jevlike:針對文字選項的開源 Jev 風格單次掃描機器人
快速重點
jevlike 提供輕量級、開源的 Jev 風格單次掃描機器人實作,可為變長文字選項清單分配機率,實現快速、確定性的選擇,無需逐 token 生成。
倉儲提供的內容
- 一個最小模型,接受 上下文 字串與任意文字選項清單,並在單次前向傳播中返回每個選項的機率。
- 兩個經典互動環境(Doom 與國際象棋)的參考實作,展示模型如何直接從視覺片段評分控制器按鈕。
- 合成資料產生器、訓練腳本、評估工具與命令列預測器,支援快速實驗。
- 可選支援透過 Hugging Face
transformers庫使用凍結的預訓練編碼器(例如 Qwen2.5‑0.5B)。 - MIT 授權程式碼,下載的資料集或預訓練權重則有獨立授權。
核心架構說明
每個選項轉換為一個查詢向量,即代表其文字的短數列。查詢向量為上下文 token 分配注意力權重,產生該選項的單一上下文向量。共享的點積將每個選項與上下文對轉換為單一分數。softmax 將分數轉換為總和為一的機率分佈,並在選項維度上運行。
- 選項查詢 – 每個選項以預設的位元級(或透過凍結編碼器)嵌入為固定大小的向量,作為查詢。
- 上下文上的注意力 – 查詢關注上下文的 token 嵌入,產生特定於選項的上下文向量。
- 評分頭 – 共享的線性點積層為每個 (選項, 上下文) 對計算標量分數。
- Softmax 正規化 – 分數透過選項維度上的 softmax,產生機率分佈。
此設計模仿 TypeSafe 的 Jev 系統中描述的「選項注意力頭」,但完全公開且可擴充。
資料格式與準備
- 輸入檔案為 JSONL,每行一個物件:
{"context":"客戶需要退款。","options":["退款","銷售","技術支援"],"label":0}
label為正確選項的零起始索引。- 每行的選項數量可變,最少為兩個。
- 自訂資料集時,請在每行中保留推論時可能出現的所有選項,並將相關記錄一起分割,以避免資料洩漏。
快速上手(合成範例)
# 建立虛擬環境並安裝開發相依性
uv venv && source .venv/bin/activate
uv pip install -e '.[dev]'
# 產生合成資料
jevlike-data synthetic --output data/synthetic
# 在合成訓練集上訓練
jevlike-train data/synthetic/train.jsonl \
--validation data/synthetic/validation.jsonl \
--output runs/synthetic.pt
# 在合成測試集上評估
jevlike-eval runs/synthetic.pt data/synthetic/test.jsonl
# 對新選單進行預測
jevlike-predict runs/synthetic.pt \
--context "選擇精確的徽章:琥珀色獾。徽章:琥珀色獾。" \
--option "Azure 鷹" \
--option "琥珀色獾" \
--option "金色鷺"
評估報告 top‑1 與 top‑3 準確率、預期校準誤差,以及打亂上下文的控制組。優秀的模型應優於控制組。
使用凍結的預訓練編碼器
uv pip install -e '.[transformers]'
jevlike-train data/synthetic/train.jsonl \
--validation data/synthetic/validation.jsonl \
--output runs/qwen-head.pt \
--encoder hf \
--hf-model Qwen/Qwen2.5-0.5B \
--rank 256 \
--batch-size 8
- 檔案儲存僅包含訓練好的評分頭與編碼器識別碼;編碼器權重於執行時從 Hugging Face 載入。
--rank控制評分頭的寬度(較高 rank = 更多參數,更高記憶體)。
實際應用範例
Doom 控制器評分
- 倉儲附帶一個聯合檢查點,可從原始影像片段評分七個 Doom 控制器按鈕。
- 十秒的示範影片結合了 Doom 戰鬥與國際象棋控制器移動棋子,顯示相同的選項注意力頭可處理視覺與文字輸入。
- Doom 檔案在十次記錄的遊戲中平均取得 0.60 殺敵 與 -97.50 獎勵。
國際象棋走法選擇
- 僅國際象棋的檢查點評分五個代表走法的按鍵,在 50 個抽樣對局中對抗隨機移動者,取得 4 勝、46 平、0 敗。
- 對抗 Stockfish level 0 時,取得 0 勝、2 平、48 敗,顯示策略能力有限,但確認模型能處理視覺棋盤狀態。
作者實驗的效能數字
- 合成選單:使用單次掃描機器人,top‑1 準確率約為 98 %。
- Wikispeedia 下一個點擊任務(目標不重疊分割):
- 凍結 Qwen2.5‑0.5B 編碼器 + 評分器 → 26 % 準確率。
- 隨機編碼器控制組 → 約 8 % 準確率。
- 從零訓練的小模型(40 k 點擊)→ 29 % 準確率。
- 速度:八個選項時,單次掃描機器人比強制生成 400 個 token 的小解碼器快約 100×。
這些數字為 本地實驗結果,並非與 TypeSafe 專有 Jev 模型的直接比較。
Hacker News 評論中的社群洞見
- 將擴散模型作為 Jev 風格評分器 – 有使用者連結一個 VLLM PR,將擴散模型重新用於單次選項評分,於 DGX Spark 上每決策約 0.2 秒,語言檢測任務中表現高準確率。
- 開源 Qwen‑2.5‑1B‑RLCD – 另一則評論指出最近發布了一個更快的設備端推理模型,適用於 JSON 工作負載,顯示輕量、類型安全模型的趨勢。
- 應用場景多樣性 – 多位評論者強調,價值在於取得校準的機率權重,而非生成文字,可應用於技能衝突偵測、擴散管道的飛行前成本估計,以及多模態工作流程中的路由決策。
- 釐清概念 – 有評論指出,原始 TypeSafe 宣告模糊;README 中的三句描述(「接收一段文字與 N 個文字選項……單次……」)更清楚地捕捉核心概念。
需注意的限制
- 此專案為 研究起點,非 TypeSafe Jev 的完整複製。
- 準確率高度依賴於 資料品質、分割策略與所選編碼器。
- 預設的 位元編碼器 價格低廉,但缺乏深度語言理解。
- 使用凍結的預訓練編碼器可能需要 大量下載 與額外 GPU 記憶體。
- 模型在推論時需要 完整的選項清單,對極大候選集可能不切實際。
- 報告的速度提升是與 小解碼器 比較,而非大型商業模型。
如何擴充或調整 jevlike
- 使用
--encoder hf標籤,以更大的多語言模型(例如 LLaMA‑2、Mistral)取代位元編碼器。 - 增加
--rank以提升評分頭的容量,實現更細微的選項區分。 - 透過將視覺編碼器的視覺嵌入輸入相同選項注意力機制,實驗 多模態輸入(如 Doom/國際象棋範例所示)。
- 將預測器整合至需要 機率路由 或 信心感知分類 的流程中,而非確定性文字生成。
- 與基線分類器(邏輯回歸、微調 BERT)進行基準測試,量化特定任務中速度與準確率的權衡。
授權與引用
- 程式碼以 MIT 授權 發布。
- 資料集與預訓練模型保留其原始授權條款;請參閱相應來源(例如 Wikispeedia 的 SNAP、Hugging Face 模型卡片)。
Sources
相關
- Dispatch
- 專案
- 專案
- 專案
- 專案