OCR深度實踐系列:

(一)影象預處理

(二)資料生成

(三)文字檢測

(四)文字識別

間隔一個月,對話系統全流程打通後終於有時間寫OCR系列的最後一篇-後處理章節。這一部分可以說才是NLP發揮最大作用的模組,若前面的文字識別效果不好,就可藉助NLP的強大能力進行結果修正以及資訊結構化。到了這裡就體現出兼併OCR和NLP雙型技術人的強大之處了。

本文專案地址:https://github.com/Vincent131499/Chinese-OCR3

在實際應用場景中,僅僅得到文字識別結果並不意味著問題的解決,比如身份證識別結果中存在錯字、無效字元等資訊;發票和報銷單據識別結果需要定位到每個條目的內容和價格,形成結構化資訊。為了解決這些問題,接下來本文將分為兩大分支進行介紹:文字糾錯和文字結構化。

1.文字糾錯

文字糾錯的目標是糾正OCR輸出文字中錯誤的文字,通常是基於先驗資訊來達到糾正的目的。當前文字糾錯一般應用於機器翻譯、Speech2Text(語音轉文字)、輸入法等,其型別分為以下三類:

1))詞法錯誤:詞語級別的錯誤,常見於形近字或者音近字;

2)句法錯誤:與語法相關的錯誤,常見於語病句子;

3)知識錯誤:與特定領域現有知識發生矛盾。

在OCR文字識別中往往只涉及到簡單的第一類詞法錯誤,比如身份證識別結果將“上海市”錯誤識別為“上海幣”。在實際OCR的後處理應用中,大多數情況下根據先驗詞典即可解決。

經典的解決演算法有兩類:1)基於先驗詞典的改進BK-tree;2)基於語言模型的糾錯機制。

得益於深度學習的迅猛發展,目前工業界更加傾向於使用語言模型進行中文糾錯,如知名的pycorrector就是基KenLM語言模型進行糾錯的。而近兩年隨著BERT的強勢興起,一系列基於BERT的中文糾錯模型陸續上線,如SoftMaskBERT。

2.文字結構化

2.1 版面分析

版面分析(Layout Analysis)技術常見於文件識別應用中,是文件資訊理解的重要步驟,可以對文件內的影象、文字、公式、表格資訊和位置關係進行自動分析、識別和理解。透過版面分析,可以獲得文件的邏輯結構,如文字塊、段落、行以及表格的位置。

完結篇!OCR深度實踐系列(五):後處理篇

目前大多數的都是用規則引擎來做,但隨著業務量增大規則將不能滿足需求,端到端的版面分析模型也應運而生。

但是在將文件圖片輸入到模型之前有研究者發現存在影象扭曲的現象,因此又出來了文件恢復這一方向,用於將扭曲的文件影象進行還原。

針對這塊的具體演算法沒有具體介紹,只是羅列一些常規知識點,使得讀者在遇到類似問題時能夠知道解決的方向,而不是一頭霧水。

2.2 NLP整合

在得到文字識別的結果後,對於版面分析要求不高的業務應用,通常可以藉助NLP相關工具來得到結構化資訊。通常有以下兩種做法:

(1)規則模板解析

以身份證識別為例,對於識別結果可以藉助正則表示式來高效抽取“身份證號”、“性別”、“地址”這樣的特徵明顯的資訊。而且對於這樣的資訊,規則維護起來也很容易,很少會發生變化,不像“姓名”沒有固定的特徵表達形式。

(2)NLP資訊抽取

同樣以身份證識別為例,對於識別結果可以藉助NLP資訊抽取工具來得到結構化資訊,如使用針對身份證資訊訓練的命名實體識別模型即可端到端的抽取出“姓名”、“性別”、“地址”等所有的資訊。也可以藉助分類模型來識別出各段文字對應的型別,隨後將對應型別結果拼接,透過這種方式也能得到結構化資訊。重點是如何靈活的運用NLP資訊抽取工具了。

3.總結

至此,OCR深度實踐系列的所有篇章已完成。剛開始決定動筆寫這一系列的時候是因為目前並沒有一套介紹OCR的完善體系,想借此梳理OCR的同時也分享給大家一起學習。

後續我將不斷更新github的專案資源,從普遍的票證識別延伸到文件識別應用,與君共勉!