自製決策模型:用 1.7B 小模型模擬 Jev,全程只要一次推論

用 Qwen3-1.7B 加 token mask 與 temperature 校準,自製 Jev 式決策模型:CommonsenseQA 0.594 起跳,finetune 到 0.624,附 HN 社群反應與視覺懶人包。

TypeSafe 的 Jev 把「決策模型」炒熱之後,Nish Tahir 寫了一篇教學:不買 API、不練大模型,用現成的 Qwen3-1.7B,加上 token mask 與 temperature 校準,做出一台堪用的決策機器。

決策模型和一般 LLM 的差別

一般 LLM 要輸出合法 JSON,得逐個 token 生成:11 個 token 就要 11 次 forward pass。決策模型換個假設:選項固定,直接從選項裡挑,一次 pass 結束。

做法是把詞表裡非選項的 token 全部 mask 掉,模型只能吐 A 到 E,取機率最高者就是答案。輸出不可能非法,但不保證正確。另外,輸出 token 的機率乍看像信心分數,實際反映的,只是模型對下一個 token 的信心,不是答對的機率,這點後面會處理。

三步實作

第一,拼提示詞:題目加上選項,結尾補 Answer:,套聊天範本送入模型。

第二,只看最後一個位置的 logits,取出五個選項 token 的分數做 softmax,argmax 即為預測,分布即為信心初值。關鍵程式碼只有幾行:


with torch.no_grad():
    logits = model(**model_inputs).logits[0, -1]
# constrained decoding: only the option tokens are allowed
probs = torch.softmax(logits[option_token_ids].float(), dim=-1)

第三,驗證與校準。完整腳本放在作者的 GitHub repo,含資料集建立、評測、finetune、校準流程。

準確率:小模型堪用

作者拿 CommonsenseQA 的隨機 holdout 共 1221 題測試:

版本 accuracy macro F1
Qwen3-1.7B 零樣本 0.5938 0.5844
資料集 finetune 後 0.6241 0.6234

以 1.7B 參數來說不差,finetune 之後再好一些。

校準:修掉過度自信

模糊題會暴露問題。「蝙蝠最可能出現在哪」一題,模型以 0.9978 選山洞,但這題本來就沒有標準答案。把信心分桶對照準確率:0.9 到 1.0 這個桶信心近滿分,實際只對七成;0.8 到 0.9 的預測,準確率只有四成左右。模型系統性過度自信。

解法是 temperature scaling:把 temperature 擬合到模型準確率上(作者找到 3.797),校準後各桶信心與準確率基本貼合,ECE 從 20.1% 降到 2.9% 左右。

狀態 最高信心桶 該桶實際答對率 ECE
未校準 T = 1.0 0.99 0.70 20.1%
校準 T = 3.80 0.93 0.95 2.9%

社群反應:HN 吵的三件事

這篇教學在 Hacker News 拿到 366 points、80 則留言,主戰場有三個。第一是命名之爭:一方說這不就是分類器換名字,另一方說重點是 ergonomics,便宜到可以亂試、API 長得像 if switch,時機正好卡進多步 pipeline 的痛點。第二是校準方法:事後調 temperature 是否算 p-hacking,長文指出調任何環節再報 test 數字就是 overfit。第三是架構質疑:token mask 只是受限生成,不等於真正的決策模型架構。

實用派則直接回報戰果:論文分類、Claude Code hooks 擋危險指令、遊戲測試 harness、問答前處理省十倍 token。共識是探索期用 Jev 系工具,任務固定後切回專門訓練的分類器。

懶人包

手機版若 iframe 顯示異常,可直接開啟:https://derek-static.pages.dev/decision-model-cheatsheet.html

原文:https://nishtahir.com/build-your-own-decision-model/ | 教學 repo:https://github.com/nishtahir/build-your-own-jev | HN 討論:https://news.ycombinator.com/item?id=50037949

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *