Jevstiller 透過有限樣本邊界保證與 Jev 達到 98% 的一致性
TL;DR – Jevstiller 的成就
Jevstiller 從 Jev 自身的預測中學習一個輕量級分類器,並透過應用嚴格校準的信心閾值,保證不超過 2% 的請求會獲得 Jev 本身不會給出的標籤。該本地模型在 CPU 上約 15 ms 即可回應,大幅縮短了直接呼叫 Jev 所需的 300 ms 網路延遲。
系統建構方式
模型架構
- 編碼器 (Encoder):凍結的
bge‑small句子編碼器(384 維,在 CPU 上使用 ONNX Runtime)。 - 頭部 (Head):多項邏輯迴歸(單一線性層 + softmax),訓練資料為 Jev 的完整機率分佈,而不僅僅是最高機率標籤。
- 大小與延遲:僅幾百 KB;在單一 CPU 核心上推論約需 15 ms。
- 訓練節奏:每產生 2,000 個新的 Jev 回答後重新訓練,使用數千行資料,幾秒鐘內即可完成。
路由組件
- k‑NN OOD 評分器 – 使用訓練嵌入 (embeddings) 偵測分佈外 (out‑of‑distribution) 的輸入。
- 信心路由器 (Confidence router) – 應用閾值加上 OOD 截止點,以決定是否由本地頭部進行回答。
這兩個組件皆在專案的 DESIGN.md (§7.3‑§7.6) 中有詳細說明。
契約方程式
對於流量視窗內的特定任務:
c= 覆蓋率 (本地回答的請求比例)。e= 本地分歧率 (已回答請求中,標籤與 Jev 不同的比例)。- 與 Jev 的整體一致性:
A = 1 – c·e。
設定目標一致性 A* = 98% 可得出預算 β = 1 – A* = 2%。路由器必須確保 c·e ≤ β。
關鍵點: 該契約不涉及準確度;它僅限制與 Jev 的分歧程度。
為什麼單純的信心閾值掃描會失敗
常見的方法:
- 保留校準資料。
- 掃描信心閾值。
- 選擇一個經驗分歧率 ≤ β 的最寬鬆閾值。
在五個公開分類任務上(每個任務 20 次隨機分割),這種點估計規則在每個任務的 20 次分割中有 6‑12 次突破了 2% 的預算,有時甚至超出預算達 1%。
| 任務 | 覆蓋率 (點估計) | 平均分歧率 | 最差分歧率 | 預算突破次數 |
|---|---|---|---|---|
| Banking77 | 79.8% | 1.90% | 2.70% | 9/20 |
| CLINC150 | 84.3% | 2.09% | 2.85% | 12/20 |
| AG News | 90.3% | 2.06% | 2.65% | 11/20 |
| TweetEval sentiment | 28.2% | 1.99% | 2.60% | 8/20 |
| TweetEval offensive | 36.8% | 1.81% | 2.70% | 6/20 |
失敗的原因是統計性的:所選閾值是因為雜訊導致其樣本分歧率恰好較低。在新的流量中,真實的分歧率可能會更高。
Jevstiller 的統計可靠替代方案
四項嚴謹的選擇確保了 98% 的保證在每個生產版本中皆能以 ≥ 95% 的信心水準成立。
- 損失 = 契約 – 對於每一行校準資料(訓練時未見過),若本地模型回答且與 Jev 分歧,則記錄二元損失
1,否則為0。平均損失即為c·e。由於這是二項比例,我們可以應用精確的 Clopper–Pearson 信賴區間。 - 固定網格、嚴格優先測試 – 候選閾值是預先定義的。我們從最嚴格到最寬鬆進行評估,在第一個違反 95% 區間上限的閾值處停止。這種固定序列測試("Learn Then Test")可在無需多重測試校正的情況下控制族系錯誤率。
- 無校準洩漏 – OOD 截止點僅從訓練集得出;校準集僅用於測試閾值。這避免了點估計中常見的陷阱,即同一資料既用於選擇又用於評估閾值。
- 餘裕與影子審計 – 所選閾值設定為預算的 85%。透過校準資料行與即時影子流量的合併集進行第二次檢查,以驗證完整預算。持續的審計流量(所有請求的 2%)始終發送給 Jev,提供無偏的即時一致性估計。若即時邊界低於目標,路由將回退至 Jev 並重新開始訓練。
最初的實作遺漏了步驟 1 和 2,導致偶爾出現預算超支;修正後,Banking77 重播的覆蓋率從 70.6% 提升至 70.7%,且保證依然有效。
將保證擴展至 Jev 自身的信心底線
Jev 會為每個答案回傳信心分數。許多應用程式將低信心視為「不確定」並將此類情況轉交給人工審核。
- 在 0.4.0 版本之前,Jevstiller 僅保證標籤的一致性。
- 自 0.4.0 起,任務可以指定
confidence_floor。在校準和審計期間,若 Jev 的信心低於此底線,本地答案也會被計為分歧。 - 相同的 2% 預算現在涵蓋了標籤分歧與 Jev 不確定兩種情況。
- 對覆蓋率的影響:在五個基準測試任務中,0.6 的底線會使覆蓋率降低 4‑12 個百分點。
在生產環境中維持保證
兩種動態因素威脅著靜態邊界:
- 模型漂移 – 本地頭部會定期根據新的 Jev 答案進行重新訓練。
- 資料漂移 – 流量分佈或 Jev 的行為可能會改變。
Jevstiller 透過以下方式緩解這些問題:
- 保留 2% 的永久審計切片,始終查詢 Jev。
- 測量該切片上每個版本的即時一致性;若信賴區間跨越目標,則增加審計率,系統將回退至 Jev。
- 展示了快速恢復能力:當第 12 小時發生合成的 Jev 變更時,本地覆蓋率在四分鐘內從 90% 降至 9%,隨後在根據新答案重新訓練後,於 49 分鐘內回升至 90%。
覆蓋率與一致性的權衡
- 該邊界是「保守的」:在基準測試任務中,與單純的點估計規則相比,它犧牲了 4‑8% 的覆蓋率。
- 訓練 Jev 的完整機率分佈(而非僅最高標籤)在多類別任務中可恢復 2‑3% 的覆蓋率。
- 調整目標一致性(例如從 98% 調整至 95%)在推文情感任務中大約使覆蓋率翻倍,並將意圖分類覆蓋率從約 70% 提升至 80% 初段。
- 在 90‑99% 的完整一致性範圍內,Jevstiller 對抗人類標籤的準確度保持在 Jev 準確度的 ±1% 以內,因為當本地模型與 Jev 分歧時,其正確率與 Jev 大致相當。
- 覆蓋率與 Jev 的「一致性」相關:在 TweetEval 任務中,Jev 與人類標籤的一致性僅為 64‑74%,這限制了本地模型的信心份額。
Jevstiller 不承諾的事項
- 準確度:保證是關於與 Jev 的一致性,而非對抗真實標籤的正確性。
- 各類別預算:目前的契約是總體性的;罕見類別可能會佔據分歧預算的大部分。
- 靜態流量假設:有限樣本邊界假設校準行是未來流量的隨機樣本。顯著的分佈偏移會使邊界失效,這就是為什麼即時審計至關重要的原因。
相關工作
- 具有風險保證的選擇性分類 – Geifman & El‑Yaniv (2017)。
- 固定序列測試 – "Learn Then Test" (2021)。
- 蒸餾大型模型的級聯 – OCaTS (EMNLP 2023), Cache & Distil (ACL 2024)。
- 有限樣本一致性契約 – BARGAIN (2025) 用於批次處理;vCache (ICLR 2026) 用於語義快取。
Jevstiller 的創新之處在於將這些想法結合到一個持續重新訓練、審計、生產就緒且具有可證明一致性契約的系統中。
開始使用
git clone https://github.com/tomerglick57/Jevstiller && cd Jevstiller && pip install .
# 重現 Banking77 結果 (無需 API 金鑰,約 10 分鐘)
bash experiments/reproduce.sh
# 執行完整基準測試 (所有五個任務,約 1‑2 小時)
bash experiments/bench.sh --no-record
將 Docker 映像作為 Jev 的直接代理執行:
docker run -d -p 8080:8080 -v jevstiller-data:/data ghcr.io/tomerglick57/jevstiller
設定 TYPESAFE_BASE_URL 指向該容器。在幾千次請求後,服務會列印出達成的邊界和即時審計區間。
程式碼以 Apache 2.0 授權條款發佈。
Sources
相關
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch