ふくふくHukuhuku LLC
EP.63Toolbox 12分公開:

THX-01を日本語で試す。金額・締切・引用を取り出す322Mモデルの使いどころ

THX-01の正式配布版で、日本語の文書から数値や引用を取り出す小さな試験を実施。原文との照合、記載がない場合の扱い、Jev周辺ツールとの役割の違いを解説します。

#THX-01#判断モデル#日本語#情報抽出#ローカルAI
執筆 / 監修
松尾 亮合同会社ふくふく 代表社員

データ基盤・データパイプライン構築 / BI / 生成 AI 活用支援を専門とするエンジニア (28 年)。 本記事は AI 利用ポリシーに基づき、生成 AI の補助で執筆 → 人間が監修・編集して公開しています。

プロフィール詳細
シェア

請求メモから税込額を拾う。案内文から締切の一文を抜く。問い合わせ先を選び、確認した原文も添える。THX-01は、こうした決まった形の答えを返す小型の判断モデルです。日本時間2026年10月9日2時23分に、Pythonパッケージthx01の1.0.0が配布されました。PyPIの配布記録

今回の新しさは正式パッケージの配布です。数値・引用の機能自体は、10月6日未明の公開履歴にもあります。紹介投稿の日をモデルの初公開日と取り違えず、少し早く公開されていた道具を、日本語の実務で使えるか確かめました。公式の更新履歴

架空資料6件をCPUで各1回試すと、空白を入れた金額と改行された締切文は取り出せました。一方、未確定の税込額を税抜額と取り違え、空白のない金額を見落とす例もありました。結果を直さず、何がモデルの判断で、何が前後のプログラムの制約かを説明します。

THX-01は何を返すモデルか

HAL-X AIが公開したTHX-01は322M、約3.22億パラメータのテキスト用モデルです。mmBERT-baseという文章を読むモデルに判断用の部分を組み合わせ、文章と質問から答えを選びます。会話文を長く生成するチャットモデルとは使い方が異なります。公式モデルカード

指定する型返るもの今回の用途
choice選択肢と候補別の数値担当部署の一次仕分け
number原文に記載された数値、またはnull税込合計の抽出
excerpt原文から切り出した文字列と位置申込締切の一文
cite: true質問の答えを支える原文の箇所部署を選ぶ根拠の確認

ほかに真偽を扱うnoul、順序付きの段階を扱うscoreがあります。numberは、文書に書かれた数値を探す機能で、足し算や税率の推定、通貨換算を任せるものではありません。税込額が未記載なら、期待する返答はnullです。

事後学習の18言語には日本語が含まれ、公式は日本語の分類課題の結果も掲載しています。ただし、その結果が日本語の金額抽出や引用の切り出しにそのまま当てはまるとは限りません。1問あたりの上限は質問・選択肢・本文を合わせて1,024トークン。長文は切り詰められるため、長い契約書を丸ごと渡す設計には向きません。公式の言語と制限

日本語の6件を、正解と分けて固定した

試験には架空の請求メモ、社内案内、プリンターの問い合わせを使いました。実在の請求や個人情報は含めていません。入力と期待値は実行前に別ファイルへ保存し、期待値をモデルへ渡していません。出力を見てから質問や正解を直すこともしていません。

ID確認する内容事前に決めた期待値
N01空白を挟んだ「税込合計: 52800 円」52,800
N02税抜48,000円だけ記載、税込は後日確定null
N03「税抜48000円、消費税4800円、税込52800円」52,800
E01改行された案内から締切の一文を抜く「申込締切は十月十五日正午です。」
E02同じ内容を句点だけでつないだ段落から抜く同じ締切の一文
C01プリンターの接続相談を担当へ回す情報システム部と担当一覧の根拠

実行機はApple M2 Ultra・192 GiBメモリ、macOS 27、Python 3.12.10。CPUのfloat32・4スレッド、seed=0で各1回です。公式thx01==1.0.0、torch 2.14.0、Transformers 5.19.0.dev0を使い、公開重みをbef2e2478be7acd79429324a658558a57552a2e8に固定しました。初期取得後はOSで通信を遮断しています。これは最低必要メモリや他の端末の速度を調べる試験ではありません。

実測:返り値の形式と、意味の正しさを分ける

6件ともエラーなく返り値を取得できました。数値は期待値と1/3件一致、締切の指定一文は1/2件一致、部署の選択は1/1件一致です。わざと表記の境界を含めた少数の教材なので、この割合を一般的な正答率として使うことはできません。

ID実際の返答確認結果1回の処理時間
N0152,800明記された税込合計と一致123ms
N0248,000未確定の税込額に税抜額を返した77ms
N03null記載された52,800を見落とした50ms
E01締切の一文原文・文字位置とも一致187ms
E02案内の段落全文締切を含むが、一文だけには絞れない191ms
C01itと原文3箇所部署は一致。担当の対応文に加え、無関係な見出しも引用235ms

モデルの読込は約49.38秒でした。表の時間は読込後のagent.decideの処理で、型ごとの候補作成や複数の推論、答えの組立てを含みます。各1回の観測値で、平均速度や他モデルとの比較ではありません。

C01は「共有プリンターに接続できません」と、「接続設定と端末不具合は情報システム部」という対応を含む文を返しました。一方、意味のない「架空の問い合わせ」という見出しも引用しています。また、事前の厳密な検査は「問い合わせ先一覧:」という見出し込みの文を求めていたため、その完全包含は不一致になりました。原文を読むと必要な対応内容は含まれており、見出しまで一致したかと、根拠の意味が合うかを区別できます。

確率1.0でも、候補を拾えていないことがある

N03は、モデルの前にある数値候補の抽出でつまずきました。公式1.0.0は正規表現で本文から候補を集めます。今回の「税込52800円」のように日本語の文字と数字が連続する表記では、数字を候補として拾えませんでした。候補が空のまま「記載なし」だけを選ぶため、nullとともにprobability=1.0、confidence=1.0が返っています。固定版の数値処理

E02も似た問題です。公式の引用処理は句や行を分け、空白で区切った単語の始まりと終わりを選びます。日本語の「。」だけでつないだ今回の段落は一つの区画・単語として扱われ、全文がprobability=1.0で返りました。原文からの切り出しなので新しい文字は作っていませんが、「締切の一文だけ」という依頼は満たしていません。固定版の引用処理

confidenceも型によって意味が異なります。通常のchoiceとそこから作るnumberでは、候補分布の偏りを表す値です。excerptのprobabilityは、内部で行う複数の選択の値を掛け合わせています。「日本語で正しい確率」や、担当者の確認を省ける保証として扱わないでください。公式の計算処理

公式カードには約10ms・一度の推論という説明がありますが、引用を返すライブラリ処理は区画と単語を選ぶ複数段階です。引用根拠のciteも追加の判定を行い、閾値に届く箇所がなくても最上位の一つを返す実装です。すべての型が一回・10msで終わる、根拠がなければ引用は必ず空になる、といった前提では組み込めません。

教材で再集計してから、自分の入力へ広げる

再現用教材ZIPには、入力、別に保存した期待値、実際の応答、集計スクリプトを収録しています。まず展開先で次を実行すると、モデルを導入せず保存結果を検査できます。通信や有料APIは使いません。

Bash
python3 test_evaluate.pypython3 evaluate.py

8つの検収テストは、誤った数値や全文引用、原文に存在しない位置などを区別するためのものです。この成功をTHX-01の品質試験と混同しないでください。expected.jsonと生応答も開き、金額が税抜か税込か、引用が質問へ答えているかを人が読み比べます。

モデルを再実行する場合は、別のPython環境へ公式パッケージと公開重みを用意します。次の取得処理にはインターネット接続が必要です。重みだけで約644MB、ほかにトークナイザーや依存ライブラリが必要です。

Bash
python3 -m venv .venv. .venv/bin/activatepython -m pip install 'thx01==1.0.0'hf download doofz/THX-01 \  --revision bef2e2478be7acd79429324a658558a57552a2e8 \  --include 'config.json' 'rl_agent_config.json' 'model.safetensors' 'encoder/*' 'tokenizer/*' \  --local-dir ./modelpython run_local.py --model-dir ./model --output-dir my-results --runpython evaluate.py --raw my-results/raw.responses.jsonl

このランナーはCPUを指定し、取得済みのローカルモデルだけを読みます。出力先が既に存在すると止まります。教材のREADMEには今回の依存バージョンとOS通信遮断の条件を記載しています。別環境の試行は保存結果を上書きせず、別フォルダで残してください。

業務へ進めるなら、最初は「抽出候補を出す→原文と並べる→人が確定する」流れが扱いやすいでしょう。空白や改行を整える場合も元の文書を残し、同じ意味の異なる表記、値がない例、複数の似た金額を別々に検収します。今回の失敗を直すための前処理や再学習は実施していません。

数値を探す道具の役割はJevの3択を繰り返すjev-bisect、モデルと周辺ツールの違いはJev系モデルの比較記事も参考になります。THX-01の重みはApache 2.0で配布されていますが、実行する計算機、電力、検収の手間まで無料になるわけではありません。

よくある質問

日本語対応なら、空白を足せば解決しますか?
今回、空白や改行を含む例で成功したことは、任意の日本語資料で解決する保証ではありません。数値候補を拾えることと、その中から正しい意味の値を選ぶことは別です。N02では候補を拾えていても、未確定の税込額を取り違えました。
nullなら、元資料に値がないと判断できますか?
断定できません。N03では税込額があるのにnullでした。返り値に加えて候補一覧と原文を確認し、未記載と抽出失敗を区別します。請求や支払いの自動承認にそのまま使うものではありません。
引用は生成AIの作り話を防げますか?
この実装は原文の位置を指定して切り出すため、存在しない文章を新しく作ることは避けられます。ただし、関係ない箇所や長すぎる範囲を選ぶことはあります。原文にある、質問の根拠になる、必要な範囲に収まる、の三つを別々に確認します。
シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp