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.

検索別名

SemIfsemifSemIFSemIf-OpenJevOpenJev(旧名)

主要スペック

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 対 JevSemIfJev
公開 Jev との最頻一致率整列した 102 行で 0.8450.883
自作の判断セット0.8130.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 ステップ

01手持ちのハードウェアで凍結したオープンウェイトモデルを動かす。参考構成は RTX 3090 1 枚と Qwen3.5-4B です。
02選択肢を宣言し、1 回の prefill でそのロジットを読む。モデルに回答の JSON 配列を書かせるのをやめます。
03自前のラベル付きセットで一致率を検証する。公開値 0.845 は 102 行の整列サブセットによるもので、自領域では大きく下がる可能性があります。
python / 生成ではなく読み取り
# 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"   # 未較正の閾値を本番に出さない
利点は構造的です。答えを一切書かないモデルは 5 番目の選択肢を捏造できず、パースもリトライも不要になります。

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 は便利であって必須ではありません。

出典

本ページの比較数値はすべて第三者の公開値、または公開リポジトリの読解であり、当サイトの実測ではありません。当サイトは TypeSafe Jev 本体を実測しておらず、同社の契約はその出力を類似製品の開発に用いることを禁じています。