Jev の代替
SemIf
新しいモデルは作らない — 選択肢ロジットを読むだけ
結論
すでにオープンウェイトモデルをホストしていて、訓練を一切したくないなら SemIf が適切です。1 回の prefill でロジットから選択肢の確率を読むため、出力トークンも JSON パースもリトライも不要です。整列した 102 行のサブセットで Jev との一致率は 0.845(Jev 自身は 0.883)。本物の再現ですが等価ではありません。
SemIf は何も訓練しません。すでにホストしているオープンウェイトモデルをそのまま使い、選択肢を宣言すると、モデルに答えを書かせる代わりにロジットから各選択肢の確率を直接読み取ります。「重みではなくパターンを再現する」流派の最も純粋な形であり、小型プロジェクトの中では方法論が最も丁寧です。比較可能な Jev の数値が無い欄は、推測せずに空欄のままにしています。
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
- MIT
- Author
- Theo Lee
- Backbone
- 凍結した Qwen3.5-4B — 微調整は一切なし
- Size
- 量子化で約 3.01GB(Q4 GGUF)
- Latency
- RTX 3090 で 21 個の二値判定に 1.023 秒 · 同じ答えを JSON 生成するより 5.21 倍高速
- Wire format
- 独自の fixture ハーネス。 /v1/systemone サーバではない
- Install
- リポジトリ参照
SemIf 対 Jev
SemIf の README は異例なほど規律正しく、比較可能な Jev の数値が無い箇所は推計ではなくダッシュを印字します。以下の一致率は両システムが回答した 102 行のサブセットによるものです。
| SemIf 対 Jev | SemIf | Jev |
|---|---|---|
| 公開 Jev との最頻一致率 | 整列した 102 行で 0.845 | 0.883 |
| 自作の判断セット | 0.813 | 0.965 |
| 判断 1 件あたりの出力トークン | 0 — 確率は書くのではなく読む | 0 |
| 訓練の要否 | 不要。すでに配信中のモデルを再利用 | クローズドな重み、RLCD で訓練 |
| 21 判断のレイテンシ | ロジット直読み 1.023 秒 対 JSON 生成 5.332 秒 | ホスト型 API の往復 |
SemIf を選ぶべきとき
すでにオープン LLM の配信に GPU コストを払っていて、二重払いをやめたいときに SemIf です。1 回はモデルを動かすため、もう 1 回は書かせた JSON を分岐に戻すため、という構図を解消できます。プロジェクト自身の実測では、長い state を複数の判定で再利用するとスループットが毎秒 2.33 判断から 20.03 判断へ上がりました。この 1 つの数字がすべての論拠です。
見送るべきとき
完成したサービスを期待しないでください。SemIf は fixture 付きの読み取りパターンであり `/v1/systemone` サーバではないため、導入はハーネスの採用を意味します。本質的な推論が必要な設問にも向きません。4B モデルの次トークン分布を読むため、多段推論の能力には上限があります。また自前のホールドアウトで温度をフィットするまで、返る確率は未較正として扱ってください。
SemIf 導入の 3 ステップ
# SemIf は答えを生成しない。選択肢を採点する。
#
# ロジット直読み : 1.023 秒、出力トークン 0(21 判定)
# 自己回帰 JSON : 5.332 秒、出力トークン 111
#
# 典型的な統合:既存の推論サーバを残し、
# 選択肢集合を宣言して制限付き softmax を読む。
options = ["safe", "injection", "jailbreak"]
probs = read_option_logits(
model=serve("Qwen/Qwen3.5-4B"),
state=untrusted_input,
question="このペイロードはどの種類か?",
options=options,
)
decision = max(probs, key=probs.get)
if probs[decision] < 0.85:
decision = "human_review" # 未較正の閾値を本番に出さないSemIf についてよくある質問
SemIf と OpenJev は同じものですか?
以前は同じでした。SemIf の旧名が OpenJev ですが、現在 OpenJev という名前は少なくとも 7 つの無関係なリポジトリが使っており混雑しているため改名されました。常に SemIf と書き、作者名を伴わない素の「OpenJev」について書かないでください。
SemIf に訓練は必要ですか?
不要です。それが存在理由そのものです。モデルが各選択肢トークンにすでに与えている確率を読むため、品質の上限は凍結した基盤モデルの表現力になります。0.845 では足りないなら、打ち手はより強い基盤か微調整であり、SemIf を増やすことではありません。
なぜロジット読み取りは JSON 生成より速いのですか?
生成で高コストなのはトークンを出力する部分だからです。21 個の選択肢確率を読むのは prefill 1 回で済みます。同じモデルに 21 件の回答を JSON 配列で書かせると、プロジェクトの実測で出力 111 トークン・5.332 秒、直読みは 1.023 秒で、同一の判断に対して 5.21 倍の差でした。
SemIf に必要なハードウェアは?
参考構成は RTX 3090 1 枚で 4B モデルを BF16 で保持する形です。ほかに llama.cpp の CPU バックエンド、Apple Silicon 向けの MLX / MPS、ブラウザタブで動く WebGPU デモもあるため、GPU は便利であって必須ではありません。
出典
- TheoLeeCJ/SemIf-OpenJev — fixture と計測値を含む README
- オープンな Jev 代替の一覧 — SemIf の節
- 「OpenJEV は 4 つの路線に分裂した」— ロジット直読み派
本ページの比較数値はすべて第三者の公開値、または公開リポジトリの読解であり、当サイトの実測ではありません。当サイトは TypeSafe Jev 本体を実測しておらず、同社の契約はその出力を類似製品の開発に用いることを禁じています。