Laya|Jevと同じ型付き判定を手元で無料で動かせるオープンモデル
Layaは、Jevと同じ型付きの分類・スコア・YES/NO判定を手元で無料で動かせるオープンモデルです。1問33msで追加学習もできますが、選択肢が20を超える分類は苦手です。
ポイント
- Jev互換の型付き判定を、公開された重みで手元で無料で動かせる
- 1問33ms(T4 GPU)で答え、自分のデータで追加学習もできる
- 選択肢が20を超える分類は苦手で、そこはJevが優位
概要・解決する課題
TypeSafeの「Jev」は、テキストを渡すと部署の選択やスコア、YES/NOの確率を型付きで返す有料のクローズドなAPIです。Layaは同じ問いの形式(choice・score・noul)と同じ回答形式を持つ判定モデルで、重みをApache 2.0で公開しており、自分のマシンで無料で動かせます。Jev互換のHTTPサーバーも同梱しているため、既存のJev用クライアントをそのまま向け替えられます。
文章を生成せず1回の順方向パス(単一質問で33ms、T4 GPUでの測定値)で答えるので、パースエラーや、存在しない内容をでっち上げる類のハルシネーションは起きません。ただし答えは選択肢ごとの確率から選んでいるだけなので、判定を間違えることは普通にあります。配布モデルの確信度は過大気味で、しきい値を決める前に自分のデータでの較正が要るとREADMEも書いています。
一番の制約は選択肢の数です。既定設定では選択肢が20を超えると1つあたりに割ける入力枠が足りなくなり、77分類のBanking77では正解率0.425(Jevは0.870)まで落ちます。READMEは枠を広げる、埋め込みで候補を絞る、大分類と小分類に分けるといった回避策を示しつつ、50を超える選択肢を1問でそのまま扱うならJevの方が向くと認めています。長文も4,000トークンを超えると20件中8〜17件正解とばらつきます。
なぜ注目されているか
README掲載の比較では、単一質問の応答が32.8ms対236〜276ms、AG NewsやDAIR Emotionの分類でもLayaが上回ります。ただしJevの数値はクラウドAPIとして第三者が測った公開値で、作者自身は計測していません。
もう1つの違いは、自分のデータで鍛えられることです。業務判断を複数まとめて下すtyped-decisionsベンチマークでは、配布チェックポイントのままだと正解率0.362で「常に最多の答えを返す」基準(0.461)を下回りますが、追加学習した版は0.766でJev(0.727)を上回ります。追加学習用のノートブックは無料のKaggle環境(T4×2)で動き、中身が非公開のJevではできない部分です。一般的な分類はそのまま使える一方、自社固有の判断に使うなら追加学習が前提と考えるのが妥当です。
主なユースケース
- インプットされるテキストの一次切り分け: カスタマーサポートに届いた問い合わせ内容から、担当部署の判定、緊急度スコア、解約リスクの有無を一括判定します。
- エージェントシステム内の動的ルーティング: ユーザーの入力言語や意図を検知し、後続のLLMやツールに振り分ける前処理層として活用します。
動作環境
- 対応ランタイム: Python 3.10以上
- 必要なパッケージ:
huggingface_hub1.x、transformers5.x、torch2.14以上 - ハードウェア要件: CPUおよびGPU(PyTorchビルド環境)。TileLang GPU高速化用の
laya[fast]や、ONNX Runtime用のlaya[onnx]などのオプションも選択可能
始め方(クイックスタート)
事前にインストール不要でブラウザ上で動作を確認できる公式デモが公開されています。
ローカル環境への導入は以下の通りです。
python -m pip install laya
Pythonスクリプトから以下のようにルーターを呼び出して判定を実行します。
from laya import Router
router = Router()
state = "Hi, we were billed twice for March. Please refund the duplicate today."
questions = {
"department": {
"type": "choice",
"instructions": "Which department should handle this?",
"criteria": {"billing": "invoices, payments, refunds", "technical": "bugs"}
}
}
result = router.predict(state, questions)
print(result["answers"]["department"]["choice"]) # billing
初回の判定時にHugging Faceからモデルが自動でダウンロードされます(英語版の重みファイルで約840MB、英語以外の文を渡すと多言語版の約680MBも追加)。2回目以降はキャッシュから読み込むため、ダウンロードは最初だけです。GPUが無くても動きますが、READMEの実測では1問あたり193〜464msと、GPU(32.8ms)より一桁遅くなります。
詳細は公式ドキュメントを参照してください。
実際に使ってみて
M系のMacにpipで入れ、架空の日本語の問い合わせ12件を「担当部署」と「解約の意思があるか」で振り分け、同じ質問文をJev(TypeSafeのAPI)にも流して比べました。初回はモデルのダウンロードに1分弱かかり、以降の応答はLayaが1件20ms台、Jevが通信込みで約0.5秒です。
部署は両方とも12件中10件が正解でした。差が出たのは解約の判定で、YES/NOの質問に返る「はい」の確率(0〜1)を、質問文の書き方を変えて並べると次のとおりです。
| 質問文 | Laya:解約あり(6件) | Laya:無関係(5件) | Jev:解約あり(6件) | Jev:無関係(5件) |
|---|---|---|---|---|
| 解約・退会・乗り換えを示していますか? | 0.41〜0.97 | 0.02〜0.77 | 0.92〜0.98 | 0.02〜0.03 |
| 解約したいと言っていますか? | 0.21〜0.98 | 0.00〜0.18 | 0.64〜0.97 | 0.02〜0.04 |
| 同じ内容を英語で | 0.80〜1.00 | 0.01〜0.94 | 0.70〜0.97 | 0.03〜0.06 |
Layaは言い回しを変えただけで同じ文の確率が0.2から0.97まで動き、「返金がなければ今月で解約します」が0.47、「ログインできない」が0.77と、0.5で区切ると逆転する件も出ました。Jevはどの書き方でも解約あり・無しがきれいに分かれています。追加学習なしで日本語の問い合わせをすぐ判定したいならJev、無料・手元・速さを取り、過去の問い合わせに正解を付けて追加学習する手間を払うならLaya、という分かれ方だと感じました(どちらも十数件での確認です)。
こんな人におすすめ
- Jevのような型付き判定を、手元で無料で、速く回したい開発者
- 過去の問い合わせなど正解付きのデータがあり、自分の業務に合わせて追加学習できるチーム
- 生成AIの出力フォーマット揺れやパースエラーをなくし、判定を型付きの値で受け取りたいエンジニア
逆に、正解付きのデータが無く、日本語の問い合わせを追加学習なしですぐ判定したいなら、まずJevを試すほうが早いです。
関連リソース [PR]
※ Amazon アソシエイト・リンクを含みます。リンク経由の購入で当サイトが収益を得る場合があります。
本記事は GitHub Trending を元に自動生成しています。最新情報は公式リポジトリをご確認ください。