# open-jev 與 open-jev-laya 評測完整報告

**評測日期：** 2026-09-27<br>
**範圍：** open-jev 內建 kev-0.6b、kev-4b、open-jev，以及 open-jev-laya fp16 checkpoint<br>
**網頁版：** [open-jev 評測紀錄](index.html)

## 執行摘要

這些結果不能用單一「好／不好」概括，模型排名會依任務改變：

- **Banking77 十類分組：** open-jev 在固定原始標籤上最好，462 題答對 77.1%（macro-F1 0.736）；Laya 為 55.6%。kev-0.6b 與 kev-4b 大量選 other，分別只答對 16.0% 與 26.6%。
- **SMS spam：** Laya 的 spam 分數排序能力很好（AUC 0.894），但 0.5 門檻下把 112 則判成 spam，只有 26 則真的 spam，準確率為 56.5%。分數要先校準並用獨立資料驗證門檻。kev-0.6b 在 0.5 門檻下完全漏掉 27 則 spam；86.0% 準確率低於「全部判正常」的 86.5% 基準。
- **Banking77 七十七類 intent：** kev-4b 得分最高（87.0%），但單題 p50 約 8.5 秒；kev-0.6b 為 79.2%。Laya 為 35.1%，而目前編碼會截短 77 個選項，這不是對其完整分類能力的公平上限測試。open-jev 因 512-token 上限無法執行該題。
- **速度：** 在這次 Node WebGPU 測試中，Laya 的簡訊與十類分組 p50 較低；這不是瀏覽器端實測，不能直接當作瀏覽器效能承諾。

建議把 open-jev 的十類分組作為目前較有力的基線；Laya 的 spam 排序值得保留，但不可直接以 0.5 分數門檻作業；Kev 的 other 偏差與所有模型的分組定義需要分開處理。

## 評測設計與模型

| 專案／模型 | 檢查點與精度 | 本次執行方式 |
| --- | --- | --- |
| open-jev：kev-0.6b | Q4 | Transformers.js 4.3.0、Node.js WebGPU |
| open-jev：kev-4b | Q4 | Transformers.js 4.3.0、Node.js WebGPU |
| open-jev：open-jev | DeBERTa-v3-large ONNX、Q4 | Transformers.js 4.3.0、Node.js WebGPU |
| open-jev-laya：Laya | multilingual ONNX、fp16，權重 646,982,318 bytes（約 647 MB） | Transformers.js 4.3.0、Node.js WebGPU |

固定資料、問題定義與每題 ID 取自 tryjev/eval revision 52770fc2166b929ede98c6a1599cc03dea33af9c。SMS 資料共 200 則（spam 27、正常 173）；Banking77 十類分組共 462 則；七十七類 intent 使用每類一則的固定平衡子集，共 77 則。每列模型推論一次。Laya 的 739 列輸入 state 與 question 定義皆和 Kev 基線逐列吻合，且沒有推論錯誤。

**執行環境限制：** Kev 與 open-jev 的測試，以及 Laya 對照測試，都是在 Node v24.18.0、macOS arm64、Transformers.js 4.3.0 中明確指定 device=webgpu。不是在瀏覽器跑出的效能測試。Laya 使用的 sequence 與 client 程式和 open-jev-laya 固定 commit 的版本逐位元相同。Laya 圖首次下載／初始化約 71,955 ms；此時間包括模型與 tokenizer 下載。使用快取後本次載入紀錄約 1.77 秒。

## 橫向比較

### SMS spam：200 則

| 模型 | Accuracy | Macro-F1 | AUC | Brier / ECE | Precision（p≥0.5） | Spam recall（p≥0.5） | p50 / p99 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| kev-0.6b | 86.0% | 0.462 | 0.459 | 0.138 / 0.145 | 0.0% | 0.0% | 108 / 189 ms |
| kev-4b | 85.0% | 0.583 | 0.717 | 0.118 / 0.084 | 38.5% | 18.5% | 534 / 1,016 ms |
| open-jev | 76.5% | 0.453 | 0.266 | 0.191 / 0.254 | 4.5% | 3.7% | 101 / 159 ms |
| Laya fp16 | 56.5% | 0.520 | 0.894 | 0.368 / 0.415 | 23.2% | 96.3% | 89 / 140 ms |

### Banking77 十類分組：462 則

| 模型 | Accuracy | Macro-F1 | Brier / ECE | 預測 other | Top-2 accuracy | 排除 other 後的 argmax accuracy | p50 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| kev-0.6b | 16.0% | 0.200 | 0.724 / 0.703 | 381 / 462 | 78.1% | 76.6% | 264 ms |
| kev-4b | 26.6% | 0.370 | 0.584 / 0.518 | 327 / 462 | 79.7% | 78.4% | 1,394 ms |
| open-jev | 77.1% | 0.736 | 0.371 / 0.288 | 4 / 462 | 91.3% | 76.2% | 231 ms |
| Laya fp16 | 55.6% | 0.490 | 0.407 / 0.288 | 5 / 462 | 73.2% | — | 116 ms |

Top-2 和排除 other 的數字是離線排名診斷，並非重新推論後的結果。

### Banking77 七十七類 intent：每類一則，共 77 則

| 模型 | Accuracy | Macro-F1 | Brier / ECE | p50 | 能否完成該題 |
| --- | ---: | ---: | ---: | ---: | --- |
| kev-0.6b | 79.2% | 0.729 | 0.184 / 0.078 | 1,826 ms | 可以 |
| kev-4b | 87.0% | 0.831 | 0.144 / 0.116 | 8,542 ms | 可以 |
| open-jev | — | — | — | — | 512-token context 不足以容納此題 |
| Laya fp16 | 35.1% | 0.260 | 0.627 / 0.466 | 226 ms | 可執行，但 77 個選項會觸發截短 |

表中 Brier 與 ECE 越低通常代表機率與正確率較一致。SMS 的 ECE 以正類機率對標籤計算；多選題以最高選項機率對預測正確性計算。這些摘要量會受樣本量與分箱方式影響，不能替代逐筆校準圖。

## SMS spam：辨認能力和門檻是兩件事

### kev-0.6b

在 p(spam) ≥ 0.5 時，混淆矩陣為 TP 0、FP 1、FN 27、TN 172。模型一則 spam 都沒抓到。因為這份資料正常簡訊占 86.5%，全部答「正常」就能達到 86.5%；kev-0.6b 的實際準確率為 86.0%，因此不能用表面的高準確率代表 spam 分類有效。

spam 分數範圍約 0.0017–0.0861、中位數 0.0168；正常簡訊中位數 0.0205。分數最高的 28 則全是正常簡訊。AUC 0.459 接近隨機，反向排序也沒有帶來可靠區別。用同一批 200 則資料挑門檻，最高 F1 只有 0.266（門檻約 0.011、precision 15.8%、recall 85.2%）；這是偏樂觀的樣本內結果。

輸入探針確認實際 state 有包含簡訊原文，noul 的 yes/no 順序也已確認。三則明顯 spam 的原文被送入模型後，p(yes | spam) 仍只有 0.045–0.086；空 state 的控制值反而是 0.538。這支持「模型在這些例子上對內容反應方向不對」的解讀，並排除本次評測器漏掉 message 欄位的猜測。

### Laya fp16

在 0.5 門檻，Laya 的混淆矩陣為 TP 26、FP 86、FN 1、TN 87。召回率 96.3%，但 precision 只有 23.2%，accuracy 56.5%。它的 AUC 0.894，表示分數排序能把 spam 與正常簡訊分開；主要問題是分數在預設門檻下校準不良。正常訊息分數中位數約 0.491，90 百分位已接近 1；spam 中位數幾乎為 1。

在同一批資料上挑出的最高 F1 門檻是 0.99999256，F1 0.679、precision 69.2%、recall 66.7%（TP 18、FP 8、FN 9、TN 165）。此門檻仍須用新的驗證集確認。ECE 為 0.415；目前不應把原始分數當成校準機率，也不應直接用它決定人工複核門檻。

open-jev 的 SMS AUC 為 0.266，分數與真實類別在這批資料呈反向關聯；它在 0.5 門檻只抓到 27 則 spam 中的 1 則。kev-4b 的 AUC 0.717 高於 kev-0.6b 和 open-jev，但仍只抓到 5/27 則 spam（recall 18.5%）。

## Banking77 十類分組：other 偏差與標籤定義

### kev 的 other 偏差很大

十類任務的真實標籤中只有 6/462 是 other。kev-0.6b 卻有 381 題預測 other；kev-4b 也有 327 題。kev-0.6b 預測為 other 的 381 題，只有約 6 題真的屬於 other；然而這些預測的第二高分類別有 286 題是正確答案（75%）。把 other 移出候選的離線 argmax accuracy 是 76.6%；kev-4b 的對應值是 78.4%。

kev-0.6b 的樣本內反事實測試若把 other 機率除以 10、100、1,000，accuracy 會分別是 41.6%、65.8%、75.1%。這些係數是在同一批 462 題上試出來，不能當成已驗證的修正。信心分數也不適合直接當人工審查閘門：kev-0.6b 在信心 0.50–0.70 的題目準確率為 32.9%，信心 ≥0.95 時只有 6.2%。

open-jev 幾乎不選 other（4/462），且在固定原始標籤上準確率 77.1%。Laya 選 other 5 次，沒有一題是正確 other。Laya 對 transfers 的 recall 為 37.5%；exchange_fx recall 為 71.4%。fees_charges 的原始標籤只有 6 題，Laya 46 次預測中只命中這 6 題，因此 precision 13.0%、recall 100%；這組估計受極小的真實樣本數影響。

### 固定分組標籤不完全符合語意

- other 只有 contactless_not_working 這個 intent（6 則），語意上較像 card。
- 七個費用相關 intent 分散在不同 group：transfer_fee_charged 在 transfers、cash_withdrawal_charge 在 atm_cash、exchange_charge 在 exchange_fx、extra_charge_on_statement 在 disputes_refunds 等；原始 fees_charges 只有 card_payment_fee_charged。

離線重標 diagnostic 將 contactless 移至 card，並將列出的七個 fee intents 併入 fees_charges。原始與重標後 accuracy 為 Kev-0.6b 16.0% → 13.6%、Kev-4b 26.6% → 23.2%、open-jev 77.1% → 82.9%。它說明標籤定義會改變分數，並不代表這套新 taxonomy 已獲驗證。原始固定標籤未被修改。

### 調整 fallback prompt 沒有改善表現

v2 使用完整 462 題；v3、v4 是相同 77 題的短 prompt 試跑。

| 模型 | 問法 | n | Accuracy / Macro-F1 | 預測 other | 排除 other 的 accuracy | p50 |
| --- | --- | ---: | ---: | ---: | ---: | ---: |
| kev-0.6b | baseline | 462 | 16.0% / 0.200 | 381 | 76.6% | 264 ms |
| kev-0.6b | fallback v2 | 462 | 10.8% / 0.140 | 410 | 77.7% | 500 ms |
| open-jev | baseline | 462 | 77.1% / 0.736 | 4 | 76.2% | 231 ms |
| open-jev | fallback v2 | 462 | 20.3% / 0.273 | 327 | 76.4% | 445 ms |

v2 雖抓中全部 6 題真實 other，卻額外產生 Kev 404 題、open-jev 321 題的 false other。提示詞也讓 p50 延遲接近翻倍。短 prompt pilot 也沒有救回結果：

| 模型 | baseline（accuracy / other） | v3（accuracy / other） | v4（accuracy / other） |
| --- | ---: | ---: | ---: |
| kev-0.6b | 15.6% / 62 | 14.3% / 64 | 13.0% / 65 |
| open-jev | 75.3% / 1 | 14.3% / 58 | 22.1% / 52 |

這些版本是以同一批資料設計並測試，且目前看起來比 baseline 差，不應取代原始問題。若要調整選項權重、描述或門檻，需另留未參與調整的驗證資料。

## Banking77 七十七類 intent

Kev-0.6b 在固定每類一題的 77-way 子集達到 79.2% accuracy、0.729 macro-F1；kev-4b 是 87.0%、0.831。Laya 為 35.1%（27/77）top-1，45.5%（35/77）top-2。open-jev 的 512-token context 不足以容納 77 個選項，因此沒有可比較的 open-jev 分數。

此處還有明確的 Laya 編碼限制：head_max_len=256 時，77 個選項各縮短為 4 tokens（mask marker 加 3 個選項 token），問題開頭最多留下 8 tokens。因此 35.1% 反映的是目前 sequence encoding 路徑，不是無截短條件下的完整模型能力。

## 速度與載入

每題 latency 包含 tokenization、sequence construction、一次 forward pass 與 decode，不含頁面載入時間。

| 任務 | kev-0.6b p50 / p99 | kev-4b p50 / p99 | open-jev p50 / p99 | Laya p50 / p99 |
| --- | ---: | ---: | ---: | ---: |
| SMS spam，n=200 | 108 / 189 ms | 534 / 1,016 ms | 101 / 159 ms | 89 / 140 ms |
| Banking77 group，n=462 | 264 / 312 ms | 1,394 / 1,684 ms | 231 / 291 ms | 116 / 166 ms |
| Banking77 intent，n=77 | 1,826 / 2,004 ms | 8,542 / 9,102 ms | 無法執行 | 226 / 294 ms |

各模型本次載入紀錄：kev-0.6b 1.61 秒、kev-4b 6.39 秒、open-jev 2.75 秒；Laya 使用快取時約 1.77 秒。Laya 約 647 MB 的 fp16 ONNX 權重第一次下載與初始化約 71.96 秒。這些載入數字來自同一台測試環境，不等於新使用者的網路下載保證。

## 重複穩定性與其他限制

- 三個 open-jev 內建模型在每類 25 則、共 50 則 SMS 的平衡子集上各重跑三次，對同一訊息的預測一致性均為 1.000。此子集只能說明重複輸出穩定，不能估計整體分類準確率；Laya 沒有做此重複實驗。
- Laya 模型載入時 Transformers.js 對 LayaDecisionModel 顯示未知類型警告，改用通用 EncoderOnly wrapper；本次 739 列仍成功回傳 logits 與 act_probs，未發生推論錯誤。
- 每個樣本僅執行一次，除上述 50 則穩定性子集外，未估計不同抽樣或重複推論的信賴區間。
- SMS 與 Banking77 樣本來自既有固定子集，不代表所有語言、銀行、真實流量或新分布。
- 此報告網站僅發布 aggregate 指標，不上傳含簡訊原文的 raw JSONL。

## 建議後續

1. 對 Laya spam 的 AUC 與 score distribution，用新的分層驗證集重估門檻與校準；不要直接採用樣本內最佳門檻。
2. 為 Banking77 固定 taxonomy 記錄版本，將 other、contactless 與費用類定義先由標註規則確認，再測 prompt 或 score penalty。
3. 對每題保留原文、完整渲染後 prompt、候選分數與模型版本，以便逐題稽核。
4. 在真實目標瀏覽器、WebGPU 裝置、模型快取狀態下重新量測延遲；本報告的 Node WebGPU 指標不能替代瀏覽器 benchmark。

## 重現與來源

固定資料及問題檔在 eval/；逐筆推論 JSONL 僅保存在本地。

```sh
pnpm eval:models --models=kev-0.6b,kev-4b,open-jev --datasets=sms-spam,banking77 --questions=spam,group --device=webgpu --dtype=q4 --run-id=20260927-shared
pnpm eval:models --models=kev-0.6b,kev-4b --datasets=banking77 --questions=intent --per-label=1 --device=webgpu --dtype=q4 --run-id=20260927-intent77
pnpm eval:laya --datasets=sms-spam,banking77 --questions=spam,group --run-id=20260927-shared
pnpm eval:laya --datasets=banking77 --questions=intent --per-label=1 --stratify-by=intent --run-id=20260927-intent77
```

- 資料與問題：[tryjev/eval 固定 revision](https://github.com/sugarforever/tryjev/tree/52770fc2166b929ede98c6a1599cc03dea33af9c/eval)
- Laya 原始碼：[open-jev-laya 固定 commit](https://github.com/killkli/open-jev-laya/tree/f25eec4954ae5893bee8581bbcbec8c345caa656)
- Laya 權重：[Hub revision](https://huggingface.co/killkli/open-jev-laya-multilingual-onnx/tree/643219b2b3a112ff1c40fb1143f050aa871f76f7)
- Banking77 資料集：[PolyAI/banking77](https://huggingface.co/datasets/PolyAI/banking77)，上游標示 CC-BY-4.0
- SMS Spam Collection：[UCI Machine Learning Repository](https://archive.ics.uci.edu/dataset/228/sms+spam+collection)
