Jev の代替
AnyJev
訓練不要のバイアス除去 — Nokia Applied Research 製
結論
オープン LLM からロジットを読んでいて、選択肢を並べ替えると答えが変わることに気づいたなら、AnyJev を足すべきです。L0 層はラベル不要で、巡回シフト周辺化が位置バイアスを、ラベル不要の事前推定がモデルのラベルバイアスを除去します。Qwen3-8B では Banking77 の順序反転率を 0.227 から 0.077 へ、インジェクション集合では 0.000 まで下げました。
AnyJev はモデルを訓練せず、重みも配布しません。すでに動かしている LLM の上に載る層で、「ロジットを素直に読む」手法が必ず嵌まる 2 つの罠を直します。選択肢が前にあるだけで勝つこと、そして入力内容に関わらず答えが一方に偏ることです。看板の実例は具体的で、同じスパム判定が、モデル自身のラベル事前分布を割り算すると 0.62 から 0.41 へ反転します。
Read the logits
No new weights. Intercept the model right before it answers and read the probability of each option instead of letting it write.
検索別名
主要スペック
- Licence
- Apache-2.0
- Author
- Jiamu (Morris) Zhang・Tianze Yang・Liang Wu — Nokia、Yucheng Shi — Tencent
- Backbone
- 任意のオープン LLM。独自の重みは持たない
- Size
- L2 ヘッドは約 100KB
- Latency
- 1 呼び出し 1 prefill。生成なし
- Wire format
- ライブラリ + CLI + MCP。Jev 互換サーバはロードマップ上
- Install
- pip install "anyjev[hf]"
AnyJev 対 Jev、そして「素朴なロジット読み」対比
AnyJev は Laya 自身の typed-decisions 集合(2,000 判断)で Laya と複数の Qwen を測り直しており、他者の数値を引用していません。Jev の行は公開値で再実行はされておらず、プロジェクトがその旨を明記しています。
| AnyJev 対 Jev、そして「素朴なロジット読み」対比 | AnyJev | Jev |
|---|---|---|
| 順序反転率 raw → L0(Qwen3-8B、Banking77) | 0.227 → 0.077、ラベル 0 枚 | 反転率としての公開値はなし |
| typed-decisions、Qwen3-32B + L0 | ゼロショット 0.700 | 0.727(公開値) |
| L1 後の較正誤差 | ラベル 200 枚で ECE 0.034 | 0.144(公開値) |
| 同じ集合で微調整した Laya | 0.768 だが ECE 0.215 — 精度は高いが較正が悪い | 0.727、ECE 0.144 |
| 訓練の要否 | L0 は不要、L1 は 100〜500 ラベル、L2 は閉形式ヘッド | クローズドな重み、RLCD で訓練 |
AnyJev を選ぶべきとき
判断パイプラインがすでにロジットを読んでいて、選択肢リストを並べ替えると答えが動くことに気づいた時点で AnyJev を足してください。この不安定さは珍談ではなく、リファクタリングが本番挙動を変え得るという意味です。AnyJev はラベル 1 枚も使わずにそれを消します。その後ラベルが数百件あれば、L1 が System One という考え方が本来提供すべき確率の正直さを買い戻します。同じ 2,000 判断で ECE は 0.034、微調整済み Laya は 0.215 でした。
見送るべきとき
生の精度が大きく上がることは期待しないでください。L0 はバイアス補正であってより強いモデルではありません。typed-decisions では Qwen2.5-7B を 0.621 から 0.628、Qwen3-8B を 0.626 から 0.640 へ動かした程度です。基盤モデルがその判断を表現できないなら、デバイアスでは救えません。また、報告された 0.9 が自分のデータで本当に約 90% 正しいかを確認する前に、結果が重要な操作へ接続しないでください。
AnyJev 導入の 3 ステップ
from anyjev import Decider, Question
from anyjev.backends.hf import HFBackend
d = Decider(HFBackend("Qwen/Qwen3-8B"))
route = Question.choice(
"このリクエストはどの担当が処理すべきか?",
["billing", "technical", "sales", "other"], name="route")
safe = Question.noul(
"提案されたツール呼び出しは破壊的・不可逆か?", name="safe")
done = Question.score(
"タスクの完了度は 0〜1 でどれくらいか?", bins=5, name="done")
r = d.decide(state, [route, safe, done])
r["route"].argmax # "billing"
r["route"].distribution # {"billing": 0.81, ...}
r["safe"].p_true # 0.12
r.level # "L0" — デバイアス済み、未較正
# 設問あたり 100〜500 ラベルがあれば L1 成果物が得られる:
art = d.calibrate(safe, calib_states, calib_labels)
r = d.decide(state, [safe], level="L1")AnyJev についてよくある質問
AnyJev は TypeSafe や Jev と関係がありますか?
ありません。パッケージ自身の最初の画面に、TypeSafe AI や Jev との提携・推奨・派生関係は無いと明記しています。比較はすべて自前で測定され、コミットされた結果から再現できます。ベンダーの数値の引用ではありません。
L0・L1・L2 の違いは?
L0 は何も要りません。巡回シフト周辺化で選択肢の位置バイアスを、ラベル不要の事前推定でラベルバイアスを除去します。L1 はその上に(モデル, 設問)ごとの温度スケーリングを載せ、100〜500 ラベルでフィットします。L2 は約 100KB の閉形式ヘッドをフィットします。各結果にはどの段で得たかが付くので、コードは raw の答えを拒否できます。
デバイアスでモデルは賢くなりますか?
わずかにしか向上しません。Laya の typed-decisions 集合で、L0 は Qwen2.5-7B を 0.621 から 0.628、Qwen3-8B を 0.626 から 0.640 へ動かしました。大きな利得は安定性と較正にあります。順序反転率は約 3 分の 2 減り、ECE は最大 0.331 から L1 後は約 0.04〜0.16 になります。
なぜ精度より安定性が重要になるのですか?
不安定な答えはリファクタリングを危険にするからです。選択肢リストを並べ替えると判断が変わるなら、日常的なコード変更が本番挙動を黙って変えてしまいます。集計された精度では、この種の壊れ方は見えません。位置を読んで意味を読まないモデルは、スコアに現れない形で壊れています。
出典
- nokia-applied-research/AnyJev — 正規リポジトリ
- PyPI の anyjev — 全ベンチマーク表と段階の契約
- Laya — AnyJev が測り直した typed-decisions ベンチマーク
本ページの比較数値はすべて第三者の公開値、または公開リポジトリの読解であり、当サイトの実測ではありません。当サイトは TypeSafe Jev 本体を実測しておらず、同社の契約はその出力を類似製品の開発に用いることを禁じています。