本文へスキップ

FAQ ​

どの言語に対応していますか? ​

デフォルトのモデルは英語向けです。他の言語には Decide Multilingual を使ってください。

ts
const d = await createDecider({ model: "debuffjp/decide-multilingual" });

Decide Multilingual は intfloat の multilingual-e5-small に由来する Xenova/multilingual-e5-small の無変更のコピーで、下の表の e5 はこのモデルです。0.1.1 より前のこの例は Xenova の ID を使っていました。その ID は今でも動きます。decidekit はこのモデルの設定(必要な "query: " という接頭辞、温度)を知っているので、確信度は較正されたままです。ダウンロードは 34 MB に対して約 118 MB です。MASSIVE(60 インテント、ラベル名は英語、言語ごとに 2,000 件のテストメッセージ、eval/multilingual.ts)の結果です。

デフォルト、日本語e5、日本語e5、中国語e5、ドイツ語e5、英語デフォルト、英語
ゼロショット6.4%43.5%38.5%40.0%51.4%61.9%
ラベルごとに 10 例30.8%68.4%69.5%60.4%70.2%76.1%
全訓練データ55.0%76.5%76.5%71.6%78.6%85.6%
英語の例だけで訓練9.0%70.1%65.3%60.8%

最後の行は、英語の例で訓練した 1 つのヘッドが、多少の損失で他の言語でも動くことを示します。訓練した e5 のヘッドの較正誤差は約 0.03 です。英語のテキストにはデフォルトのモデルを使ってください。精度が 7 ポイント高くなります。

デフォルトのモデル専用に調整した設定が 2 つあります。1 つは withFallback の話題外ゲート(noneBelow)です。e5 は無関係なテキストでも類似度が 0.8 前後なのでゲートが働かず、「どれでもない」を学びません。もう 1 つはラベルの説明の温度で、e5 では計測していません。ONNX の重みを持つ他の Hugging Face モデルも model に渡せますが、計測はしていません。

長いテキストを読めますか? ​

短いテキストが最適で、段落 1 つ程度です。エンコーダーが読むトークン数には限りがあり、残りは無視するので、長い文書は冒頭で判断されます。長い文書を分類するには、段落に分けてそれぞれ判定するか、意味を担う部分(件名、タイトル、最初の段落)で判定してください。

ユーザーのテキストはデバイスの外に出ますか? ​

いいえ。ブラウザでは、モデルとヘッドはユーザーのタブで動き、訓練もそこで動きます。decidekit 自身が行うネットワークリクエストは、Hugging Face または自分の modelHost からのモデルファイルのダウンロードだけです(ほかには自分で取得するヘッドファイルがあります)。

オフラインで動きますか? ​

最初の訪問のあとなら動きます。モデルファイルはブラウザにキャッシュされ、残りはあなたの静的ファイルです。最初の読み込みにはネットワークが必要です。ブラウザがキャッシュを消すと、モデルをもう一度ダウンロードします。Node では、最初のダウンロードのあと transformers.js がキャッシュディレクトリにファイルを保持します。

動かすコストは? ​

呼び出しごとのコストはありません。コストは最初のダウンロード(バンドラーの wasm エイリアスを使って、モデル 34 MB と wasm 12.9 MB、gzip で 3.3 MB)と、ユーザーの CPU です。判定 1 回の中央値は Chrome で約 8 ms、Node の decideMany() で 1 テキスト 1.1 ms です。リリース前のデフォルトの all-MiniLM-L6-v2 は約 36 MB と 3-5 ms でした。

これと LLM のどちらを使うべきですか? ​

答えが決まったラベルのどれかで、例を集められるなら decidekit を使ってください。LLM を使うのは次のような場合です。答えが自由回答のとき。テキストの外の事実をもとに推論するとき。例がなく、ゼロショットの 66-73%(ラベル名)や 72-83%(1 文の説明)では足りないとき。LLM の構造化出力でも型付きの選択は得られますが、API が必要で、呼び出しごとに費用がかかり、確信度は較正されていません。

組み合わせもできます。ローカルで判定し、minConfidence を下回る答え(choice が null)だけを大きなモデルに送ります。

jimothy と比べるとどうですか? ​

jimothy(MIT)も、較正された確信度を持つ型付きのローカル分類器を作ります。BANKING77 での報告値は、独自の分割と all-MiniLM-L6-v2 で 92.4% です。decidekit 0.2 は、データセットのテスト分割と Decide Small で 93.1% です(0.2 より前は 90.7%)。分割とエンコーダーが違うので、直接は比べられません。decidekit 0.2 の Adam の設定は jimothy のソースから来ています。jimothy の訓練は Node で、推論はワーカーで動きます。Node で事前に訓練するなら jimothy を選んでください。ユーザー自身のデータからページの中で訓練する必要があるなら decidekit を選んでください。

transformers.js のゼロショットパイプラインは? ​

NLI ベースで、結果に型がなく、スコアは較正されていません。decidekit のゼロショットは埋め込みを比べ、選択にラベルの型を付け、同じ decide() の呼び出しのまま訓練済みヘッドに移れます。

WebGPU を使いますか? ​

デフォルトでは使いません。createDecider({ device: "webgpu" }) はデバイスを transformers.js に渡しますが、ワーカーの中の WebGPU はまだ完成しておらず、計測もしていません。デフォルトはブラウザで wasm、Node で cpu です。WebGPU を使うなら、バンドラーの wasm エイリアスは外してください。

スマートフォンで動きますか? ​

まだテストしていません。デスクトップと同じダウンロード(最初の訪問でモデル 34 MB と wasm)が必要で、スマートフォンの CPU では判定が遅くなります。頼る前に、対象のデバイスで計測してください。

Node とブラウザのどちらですか? ​

どちらも同じコードが動きます。Node では decidekit の createDecider() を使います。バッチには decideMany() が高速です。ブラウザでは decidekit/browser の createWorkerDecider() を使います。同じデサイダーを Web Worker で動かすので、ページは固まりません。よくある分け方は、Node か CLI で訓練し、ヘッドファイルを配布し、ブラウザで判定するものです。例がユーザーから来るなら、ブラウザで訓練もできます。

ヘッドのライセンスは? ​

自分のデータで訓練したヘッドはあなたのものです。decidekit 自体は MIT です。heads/ の既製のヘッドは公開データセットから作られていて、そのライセンスを引き継ぎます。BANKING77 は CC BY 4.0(PolyAI)、CLINC150 は CC BY 3.0(Clinc)です。配布するときはデータセットのクレジットを記載してください。

自分のデータでどのくらい正確ですか? ​

ラベルがどれだけ区別できるか、例がいくつあるかで変わります。2 つの公開インテントベンチマークでは、訓練したヘッドは0.2 ではラベルごとに 5 例で 83.7-90.2%、全訓練データで 93.1-96.3% に達しました。0.2 より前は 82.3-89.6% と 90.7-94.4% です。リリース前のデフォルトの all-MiniLM-L6-v2 では 78.7-87.3% と 90.6-94.0% です。2 から 10 ラベルの小さなタスクは、ラベルごとに 1 例で 93.4% に達しました。ラベル付きの例を一部取り分けて計測してください。手順は確信度としきい値にあります。

どんな判定が得意ですか? ​

テキストが何についてのものかの判定です。インテント、トピック、振り分け、カテゴリなどです。テキストがどう感じているかの判定は苦手です。bge-small で計測しました(各 2,000 テスト行、eval/mteb.ts、eval/hwu64.ts)。

タスクラベルゼロショット訓練後確信した答えの正答率
HWU64 のインテント(調整には未使用)6459.8%85.8%(ラベルごとに 10)、90.2%(すべて)98%
AG News のトピック467.5%84.4%(ラベルごとに 32)95%
ツイートの感情極性353.3%61.3%(ラベルごとに 32)89%
感情650.6%49.4%(ラベルごとに 32)66%
有害性(有害 7.6%)265.7%66.6%(ラベルごとに 32)56%

感情極性、感情、有害性はエンコーダーの限界です。トーンではなく意味で訓練されているので、例を増やしてもほとんど効きません。有害性は最悪のケースで、まれなラベルがさらに悪くします。常に「有害でない」と答えれば 92% の割合で正解だからです。有害なテキストの少なさをヘッドに伝える方法も試しました(eval/prior-shift.ts)。結果は、ほとんどすべてに「有害でない」と答えるようになっただけでした。4 倍大きい bge-base(model: "Xenova/bge-base-en-v1.5")もあまり効きませんでした。ラベルごとに 32 例で、感情 54.6%、有害性 64.2%(低下)、ツイートの感情極性 62.0% でした。HWU64 は 90.6% です。今のところ、これらには LLM か専用の分類器を使ってください。

なぜエンコーダーをファインチューニングしないのですか? ​

ヘッドだけを訓練すれば、ブラウザのタブでも訓練できるほど軽く済み(10,003 例で 147-217 s、9 例で 0.1 s)、キャッシュした 1 つのエンコーダーですべてのヘッドをまかなえます。2026-11-02 に SNIPS と PAWS でファインチューニングを試したところ、開発分割で BANKING77 は 2.5 ポイント、CLINC150 は 1.2 ポイント下がりました。否定できたのはこのデータの組み合わせだけです。0.2 より前のこの回答では、BANKING77 で約 91% を超える道としてファインチューニングが有力としていましたが、実際にはヘッドの訓練の改善で 93.1% に届きました。

ヘッドの大きさは? ​

重みを base64 にした JSON で、77 ラベルが 156 KB、150 ラベルが 303 KB です。大きさはラベルの数で増え、例の数では増えません。

再訓練なしでラベルを変えられますか? ​

いいえ。ヘッドが知っているのは訓練に使ったラベルだけです。ラベルの追加、削除、名前の変更には、例を変えて train() をもう一度呼んでください。同じデサイダーなら、エンコードするのは新しいテキストだけです。

npm がインストールスクリプトをブロックしたと警告します ​

npm 11 は、プロジェクトが許可していないパッケージのインストールスクリプトを飛ばし、decidekit の依存のうち onnxruntime-node、sharp、protobufjs の 3 つについてそう伝えます。decidekit はそれでも動きます。onnxruntime-node はバイナリをパッケージに含めていて、decidekit は sharp を使いません(transformers.js が画像用に読み込むものです)。CI のパック済みパッケージのテストはこの方法でインストールしています。承認は不要です。

decide() が "this head was trained on ..." と例外を投げるのはなぜですか? ​

ヘッドは訓練に使ったエンコーダーでしか動きません。ヘッドのモデルでデサイダーを作ってください:createDecider({ model: head.model })。

ゼロショットの confidence に意味はありますか? ​

おおよそあります。固定の温度は 2 つのインテントのデータセットでほぼ較正された状態になりましたが、あなたのラベルでそうなるとは限りません。しきい値を置く前に自分のラベル付きテキストで確かめるか、独自の温度を当てはめるヘッドを訓練してください。確信度としきい値を参照してください。

モデルの読み込みで "File doesn't exist" と表示されるのはなぜですか? ​

Windows の Node では、transformers.js はモデルを node_modules の中にキャッシュします。階層の深いプロジェクトではパスが Windows の上限である 260 文字を超えることがあり、読み込みが "Load model ... failed. File doesn't exist" で失敗します。プロジェクトを短いパスに移すか、Windows で長いパスを有効にしてください。