兩秒 OCR 背後的工程實作
收據照片是一種極具挑戰性的輸入:數週內便會褪色的熱感應紙、捲曲的邊緣、沾染的指紋油漬,以及一位通常正於行走中的拍攝者。我們的第一代處理流程在實驗室環境中達到了百分之九十一的欄位準確率——然而在真實場景下,僅餘百分之六十四。
此一突破並非來自於規模更大的模型,而是源於我們接受了一項事實:照片本身僅構成一半的訊號。收據上的商戶名稱往往遭到截斷(如「7-ELEVEN ST」、「WELLCOME 12」),然而結合時間、貨幣與使用者歷史紀錄加以研判,其完整身分便昭然若揭。
因此,處理流程採取兩階段執行。第一階段由視覺模型逐字轉錄——不進行臆測、不進行「善意」的補完。第二階段則由另一模型基於該逐字稿,並結合上下文進行推論:此處為總計或小計?「DEPARTURE」為商戶名稱或欄位標題?該褪色字元究竟為 3、為 8,還是應誠實地標示為「?」?
「逐字優先」的原則,其重要性超乎表面所見。一個自信滿滿地捏造合理數字的 OCR,其危害遠甚於坦然承認不確定的系統——因為被捏造而出的數字將悄然侵蝕整本帳目的可信度。我們的準則為:「?」是一項特性,而幻覺方為缺陷。
如今,自拍攝照片至完成歸檔的端對端處理時間中位數為一點八秒,並於最常見的十一種書寫系統中達到百分之九十八點七的欄位準確率。餘下的百分之一點三,正是我們堅持將「回覆錯誤即可更正」的反饋迴路維持於一則訊息之遙的原因。
重點整理
- 先逐字轉錄、後推理 —— 絕唔容許模型臆測。
- 上下文(時間、貨幣、歷史紀錄)可以還原被截斷嘅商戶名稱。
- 「?」係一項特性;捏造嘅數字先係缺陷。