# FAQ

## どの言語に対応していますか？ {#which-languages-does-it-support}

デフォルトのモデルは英語向けです。他の言語には 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` に渡せますが、計測はしていません。

## 長いテキストを読めますか？ {#can-it-read-long-texts}

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

## ユーザーのテキストはデバイスの外に出ますか？ {#does-my-users-text-leave-the-device}

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

## オフラインで動きますか？ {#does-it-work-offline}

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

## 動かすコストは？ {#what-does-it-cost-to-run}

呼び出しごとのコストはありません。コストは最初のダウンロード（[バンドラー](/ja/decide/docs/bundlers)の 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 のどちらを使うべきですか？ {#should-i-use-this-or-an-llm}

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

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

## jimothy と比べるとどうですか？ {#how-does-it-compare-with-jimothy}

[jimothy](https://www.npmjs.com/package/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 のゼロショットパイプラインは？ {#and-the-transformers-js-zero-shot-pipeline}

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

## WebGPU を使いますか？ {#does-it-use-webgpu}

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

## スマートフォンで動きますか？ {#does-it-work-on-phones}

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

## Node とブラウザのどちらですか？ {#node-or-browser}

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

## ヘッドのライセンスは？ {#what-licence-do-heads-have}

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

## 自分のデータでどのくらい正確ですか？ {#how-accurate-will-it-be-on-my-data}

ラベルがどれだけ区別できるか、例がいくつあるかで変わります。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% に達しました。ラベル付きの例を一部取り分けて計測してください。手順は[確信度としきい値](/ja/decide/docs/guide-confidence#pick-a-threshold-on-your-own-data)にあります。

## どんな判定が得意ですか？ {#what-kinds-of-decisions-is-it-good-at}

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

| タスク | ラベル | ゼロショット | 訓練後 | 確信した答えの正答率 |
|---|---|---|---|---|
| HWU64 のインテント（調整には未使用） | 64 | 59.8% | 85.8%（ラベルごとに 10）、90.2%（すべて） | 98% |
| AG News のトピック | 4 | 67.5% | 84.4%（ラベルごとに 32） | 95% |
| ツイートの感情極性 | 3 | 53.3% | 61.3%（ラベルごとに 32） | 89% |
| 感情 | 6 | 50.6% | 49.4%（ラベルごとに 32） | 66% |
| 有害性（有害 7.6%） | 2 | 65.7% | 66.6%（ラベルごとに 32） | 56% |

感情極性、感情、有害性はエンコーダーの限界です。トーンではなく意味で訓練されているので、例を増やしてもほとんど効きません。有害性は最悪のケースで、まれなラベルがさらに悪くします。常に「有害でない」と答えれば 92% の割合で正解だからです。有害なテキストの少なさをヘッドに伝える方法も試しました（[eval/prior-shift.ts](https://github.com/debuffjp/decidekit/blob/main/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 か専用の分類器を使ってください。

## なぜエンコーダーをファインチューニングしないのですか？ {#why-not-fine-tune-the-encoder}

ヘッドだけを訓練すれば、ブラウザのタブでも訓練できるほど軽く済み（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% に届きました。

## ヘッドの大きさは？ {#how-big-is-a-head}

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

## 再訓練なしでラベルを変えられますか？ {#can-i-change-the-labels-without-retraining}

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

## npm がインストールスクリプトをブロックしたと警告します {#npm-warns-that-install-scripts-were-blocked}

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

## `decide()` が "this head was trained on ..." と例外を投げるのはなぜですか？ {#why-does-decide-throw-this-head-was-trained-on}

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

## ゼロショットの `confidence` に意味はありますか？ {#is-confidence-meaningful-with-zero-shot}

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

## モデルの読み込みで "File doesn't exist" と表示されるのはなぜですか？ {#why-does-it-say-file-doesn-t-exist-when-it-loads-the-model}

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