一句話結論
讀帳號、金額,本機的 Qwen3.8-27B 與 Gemma 4 31B 比雲端的 gpt-6-luna 準得多(帳號 97–99% vs 81%,金額 99–100% vs 90%),連手寫中文的帳號都幾乎全對;但「整張圖全部欄位都對」反而輸給 Luna(66–68% vs 74%)。差距不在 OCR,而在銀行常識:圖上沒寫銀行代碼時,本機模型會憑記憶補,而且幾乎都補錯。總參數最大的 Nemotron 3.5 Super VL(120B)讀手寫數字明顯最差。
背景:為什麼測這個
這是一個銀行 App 轉帳情境的研究延伸:使用者上傳一張圖(手寫紙條、收款資訊、聊天截圖、存摺,或無關的圖),系統要抽出銀行代碼、銀行名稱、收款帳號、金額。先前用雲端的決策模型 API 做過,它看得懂圖、但抄不出帳號(逐位讀出的正確率只有 1%);改用雲端 gpt-6-luna 抽取後,帳號 81%、整張全對 74%,手寫是最大的瓶頸。
這次把抽取那一步換成三顆本機 VLM,問題是:本機模型的 OCR 能不能取代雲端?本機還有一個雲端給不了的好處——圖片完全不離開這台機器。
測試設計與固定條件
- 資料:82 張真實測資(另一套系統的實測素材)。原本 98 張,其中 16 張含真實個資,已在送出任何外部 API 之前排除,所以跟雲端那次是同一批。本頁只列彙總數字,不放圖片、帳號或逐張紀錄。
- 同一份 prompt、JSON schema、答案表與評分程式:直接沿用雲端那次的程式,只把模型換掉。Ollama 用
format傳 JSON schema 鎖住輸出格式。 - 圖片:一律依 EXIF 轉正、長邊縮到 2048 px。
- temperature 0;thinking 分「關」與「開」兩輪,對應雲端的 reasoning effort none 與 low。Qwen 有 low 等級,就用 low;Gemma 與 Nemotron 沒有,用「開」。
- 一次只載入一個模型,換模型前先卸載;暖機用一張受測圖以外的合成圖,避免第一張受測圖吃到快取;同一個模型先把 82 張跑完一種 thinking 模式再換下一種。
- 主測精度 8-bit(mxfp8),三顆同級;Qwen、Gemma 另外用 4-bit(nvfp4)再跑一次看量化損失。
| 模型 | 架構 | 授權 | 8-bit 大小 | 載入後佔用 |
|---|---|---|---|---|
| Qwen3.8-27B | dense 27.8B(含 linear attention 層) | Apache 2.0 | 31 GB | 32.0 GB |
| Gemma 4 31B | dense 31.3B | Apache 2.0 | 33 GB | 34.7 GB |
| Nemotron 3.5 Super VL | Mamba-2/Transformer 混合 MoE,120B 總參數、每個 token 12B | OpenMDW-1.1 | 129 GB | 130.0 GB |
總表
每顆模型取代表性的一種模式;「修正後」的意思見第五節。完整的八種組合在本節最後。
| gpt-6-luna effort low(雲端) | Qwen3.8-27B thinking 關 | Gemma 4 31B thinking 關 | Nemotron 3.5 thinking 開 | |
|---|---|---|---|---|
| 帳號 | 81% | 99% | 97% | 80% |
| 金額 | 90% | 100% | 99% | 94% |
| 銀行代碼 | 91% | 75% | 74% | 77% |
| 銀行名稱(修正後評分) | 91% | 80% | 80% | 78% |
| 整張關鍵欄位全對(修正後評分) | 74% | 66% | 68% | 60% |
| 手寫(中)整張全對 | 36% | 45% | 27% | 9% |
| 每張圖平均(抽取) | 2.9 秒 | 7.6 秒 | 5.2 秒 | 25.2 秒 |
完整八種組合
| Luna none | Luna low | Qwen 關 | Qwen low | Gemma 關 | Gemma 開 | Nemotron 關 | Nemotron 開 | |
|---|---|---|---|---|---|---|---|---|
| 是否轉帳 | 99% | 99% | 98% | 99% | 100% | 99% | 96% | 100% |
| 帳號 | 78% | 81% | 99% | 99% | 97% | 99% | 77% | 80% |
| 帳號逐字錯誤率(CER) | – | – | 0.4% | 0.1% | 0.5% | 0.1% | 7.0% | 2.6% |
| 金額 | 88% | 90% | 100% | 100% | 99% | 99% | 90% | 94% |
| 銀行代碼 | 84% | 91% | 75% | 72% | 74% | 75% | 80% | 77% |
| 銀行名稱(原 → 修正後) | 81 → 83% | 90 → 91% | 78 → 80% | 75 → 81% | 78 → 80% | 83 → 90% | 68 → 70% | 78 → 78% |
| 整張全對(原 → 修正後) | 70 → 70% | 74 → 74% | 65 → 66% | 62 → 63% | 67 → 68% | 68 → 70% | 55 → 55% | 60 → 60% |
| 手寫(中)整張全對 | 23% | 36% | 45% | 32% | 27% | 32% | 9% | 9% |
| 每張圖平均 | 2.3 秒 | 2.9 秒 | 7.6 秒 | 14.2 秒 | 5.2 秒 | 18.8 秒 | 5.4 秒 | 25.2 秒 |
帳號、金額、銀行代碼與名稱的準確率只算「是轉帳資訊」的 69 張;是否轉帳與整張全對算全部 82 張。CER 是數字的編輯距離 ÷ 正確值位數,看得出錯了幾碼。
一、讀數字:Qwen 與 Gemma 明顯勝過雲端
依圖片類別拆開看帳號正確率,差距全在手寫:
| 類別 | 張數 | Luna low | Qwen 關 | Gemma 關 | Nemotron 開 |
|---|---|---|---|---|---|
| 手寫(中) | 22 | 59% | 100% | 95% | 59% |
| 手寫(英) | 10 | 60% | 100% | 100% | 50% |
| 收款資訊 | 18 | 100% | 94% | 100% | 100% |
| 聊天紀錄 | 17 | 100% | 100% | 94% | 100% |
| 存摺 | 2 | 100% | 100% | 100% | 100% |
印刷與截圖大家都讀得好;手寫上,雲端 Luna 常漏掉重複或開頭的數字、金額少一個 0,Qwen 與 Gemma 卻幾乎全對,錯的幾張也多半只差 1 碼。少數錯誤之一是把銀行代碼接在帳號前面,屬於欄位切分而不是讀錯字。
二、整張全對輸在銀行常識,不是 OCR
把銀行代碼分成「圖上有寫」與「圖上沒寫」兩種情況,原因就很清楚:
| 代碼有寫在圖上(47 張) | 代碼沒寫(22 張,可留空) | |
|---|---|---|
| Luna none | 41 張對 | 自己補 5 次,補對 0 次 |
| Luna low | 45 張對 | 自己補 17 次,補對 13 次 |
| Qwen 關 | 46 張對 | 自己補 17 次,補對 1 次 |
| Qwen low | 46 張對 | 自己補 19 次,補對 1 次 |
| Gemma 關 | 47 張對 | 自己補 18 次,補對 0 次 |
| Gemma 開 | 47 張對 | 自己補 18 次,補對 1 次 |
| Nemotron 關 | 44 張對 | 自己補 11 次,補對 0 次 |
| Nemotron 開 | 47 張對 | 自己補 17 次,補對 1 次 |
- 圖上寫了什麼,本機模型都讀得比雲端準(Gemma 47/47)
- 圖上沒寫的代碼,本機模型憑記憶補,幾乎全錯:國泰世華填 006、滙豐填 007(正確是 013、081)。雲端 Luna 對台灣銀行代碼的常識好得多
- 銀行名稱的錯誤多半也是常識:代碼 822 讀對了,名稱卻寫成國泰世華(應為中國信託);英文名「Taiwan Cooperative Bank」沒有轉成中文正式名稱;Gemma 會寫成簡體字或香港母行的名稱
實務上的意涵:銀行欄位不該靠模型記憶。讓模型只照抄圖上寫的,再用銀行代碼表對照補齊代碼與正式名稱,本機模型的整張全對預期能超過雲端——但這個變體本測沒有驗證。
三、thinking 幾乎沒有幫助
- Qwen:low 慢了將近一倍(7.6 → 14.2 秒),整張全對反而少 3 點;只有「無關圖」的判斷變好(85% → 100%)
- Gemma:開了慢 3.6 倍(5.2 → 18.8 秒),整張全對只多 1–2 點
- Nemotron:有幫助但很貴——帳號 CER 從 7.0% 降到 2.6%、整張全對 55% → 60%,代價是每張從 5.4 秒變 25.2 秒,平均要想 3,200 字
OCR 這類「看清楚就會」的任務,Qwen 與 Gemma 不開 thinking 就已經到頂。
四、Nemotron:總參數最大,手寫卻讀得最差
Nemotron 3.5 Super VL 總參數 120B、佔 130 GB 記憶體,是另外兩顆的 4 倍;但手寫(中)帳號只有 59%、手寫(英)50%,整張全對只有 9–20%。錯法多半差 1 碼,也有整串讀錯、或把轉帳資訊判成不是轉帳。印刷與截圖則不輸另外兩顆(收款資訊整張全對 83%、聊天紀錄最高 88%),圖上有寫的銀行代碼也讀得準。在這批測資上,規模不是重點,兩顆 27–31B 的 dense 模型讀手寫穩得多。
五、評分程式的一個 bug:一字不差的「臺灣銀行」被判錯
雲端那次沿用的銀行名稱比對,是用「互相包含、取最長的命中」。結果「臺灣銀行」會對到名稱更長、也包含「臺灣…銀行」的臺灣中小企業銀行,連一字不差的正確答案也算錯;「匯豐」與「滙豐」這組異體字也沒有當成同一家。修正方式是先找正式名稱或別名完全相同的,找不到才退回原本的包含比對,並把「匯」統一成「滙」。
雲端與本機的紀錄都用修正後的規則重算(原始紀錄不動):銀行名稱提高 0–7 點,整張全對提高 0–2 點,排名不變。總表的「修正後」就是指這個。
六、4-bit(nvfp4)看不出明顯的量化損失
| Qwen 關 8-bit | Qwen 關 4-bit | Qwen low 8-bit | Qwen low 4-bit | Gemma 關 8-bit | Gemma 關 4-bit | Gemma 開 8-bit | Gemma 開 4-bit | |
|---|---|---|---|---|---|---|---|---|
| 帳號 | 99% | 96% | 99% | 100% | 97% | 94% | 99% | 97% |
| 金額 | 100% | 99% | 100% | 100% | 99% | 99% | 99% | 99% |
| 整張全對(修正後) | 66% | 66% | 63% | 73% | 68% | 68% | 70% | 67% |
| 每張圖平均 | 7.6 秒 | 6.9 秒 | 14.2 秒 | 10.4 秒 | 5.2 秒 | 4.6 秒 | 18.8 秒 | 15.7 秒 |
| 載入後佔用 | 32.0 GB | 18.5 GB | 同左 | 同左 | 34.7 GB | 19.5 GB | 同左 | 同左 |
帳號、金額 4-bit 只低 0–3 點;整張全對有高有低(修正後評分,Qwen low 4-bit 甚至高 10 點)。82 張圖裡 1 張就是 1.2 點,整張全對的差距主要來自銀行欄位的猜測結果翻轉,不能解讀成 4-bit 比較好。4-bit 快 9–27%、記憶體少一半左右。Gemma 4-bit 開 thinking 時,有 2 張生成到 8,192 tokens 上限被截斷、JSON 解析失敗,8-bit 沒有發生。
七、速度:讀圖佔大部分時間
| 每張圖平均 | 讀圖(prefill) | 生成(decode) | 平均 prompt tokens | |
|---|---|---|---|---|
| Qwen 關 | 7.6 秒 | 6.3 秒 | 1.2 秒 | 2,465 |
| Gemma 關 | 5.2 秒 | 3.6 秒 | 1.4 秒 | 1,180 |
| Nemotron 關 | 5.4 秒 | 4.5 秒 | 0.8 秒 | 2,582 |
| Nemotron 開 | 25.2 秒 | 4.5 秒 | 20.6 秒 | 2,582 |
Qwen 依圖片大小決定 token 數,手寫照片約 3,300 tokens、每張 10 秒左右;Gemma 每張固定在 1,200 tokens 上下,所以每張都在 5–6 秒、非常穩定。本機每張 5–8 秒,比雲端慢 2–3 倍(雲端數字含跨太平洋網路,條件不同,只並列不比高下)。
執行環境踩到的坑
- Nemotron 需要 Ollama ≥ 0.40.5:原本的 0.34.1 拉 manifest 直接回 HTTP 412,升級到 0.40.6 才能用
- Ollama 0.34.1 在 thinking 開啟時不套用 JSON schema:兩顆模型都輸出沒鎖格式的文字;0.40.6 已修好
- Gemma 每張圖的 token 數隨 Ollama 版本改變:同一張手寫圖在 0.34.1 約 400 tokens、0.40.6 約 1,150,數字一定要註明版本
- thinking 等級各家不同:Qwen 有關/low/medium/xhigh,Gemma 只有關/開,Nemotron 是關/開/medium
- 混合架構的快取:Qwen3.8(linear attention)與 Nemotron(Mamba)只在提示完全相同時才重用快取;本測每張圖只問一次,不受影響
結論與建議
- OCR 本身:Qwen3.8-27B ≈ Gemma 4 31B > gpt-6-luna > Nemotron 3.5 Super VL
- 要準選 Qwen3.8-27B,thinking 關:每張 7.6 秒,手寫最強
- 要快又穩選 Gemma 4 31B,thinking 關:每張 5.2 秒,速度幾乎不隨圖片變動
- 兩者 4-bit 版本看不出明顯退步,記憶體只要 19 GB 左右
- 銀行代碼與正式名稱要用代碼表對照補齊,不要靠模型記憶
本測沒有涵蓋的部分(誠實邊界)
- 只有 82 張圖、temperature 0 各跑一次;整張全對差距在 5 點以內的,不能當成結論
- 「照抄+代碼表對照」的變體沒有驗證,上面的預期只是推論
- 只測抽取這一步;雲端那次後面還有一道決策模型的檢核與門檻分流,本測沒有接
- 只測 OCR 抽取這一軸,沒有測一般問答、RAG 等其他能力,不能當成模型的整體排名