如圖1所示,顧名思義,語言模型即根據當前語境的上下文推斷當前句子的意思。具體的標準定義為:對於語言序列w1,w2,…wn,語言模型就是計算該序列的概率即p(w1,w2,…wn)。
文字影象中包含兩層資訊:視覺紋理資訊和語言資訊。由於單純根據視覺紋理資訊進行文字識別缺少了對上下文的字元語義資訊的挖掘,時常會導致錯誤的文字識別結果(之後會詳細說明)。因此如何獲得魯棒的語言資訊來提公升識別效能成為了最近場景文字識別任務中比較受歡迎的思路。
由鏈式法則可以得到:
可以通過採用極大似然估計來計算每個詞出現的條件概率,但是對於任意長的自然語言語句,根據極大似然估計直接計算p(wn|w1,w2,…wn-1)顯然不現實(計算量太大)。因此為了解決這個問題,n-gram語言模型引入馬爾可夫假設(markov assumption),即假設當前詞出現的概率只依賴於前 n-1 個詞,可以得到:
n=1 unigram:
n=2 bigram:rrqldmy
因此,綜上可以看出,基於n-gram的語言模型有如下優點:1)完全包含了前n-1個詞的全部資訊。2)可解釋性強。對應也有缺點:1)缺乏長期依賴關係。2)引數空間隨著n增大指數型增長。3)單純的基於統計頻次,泛化能力差。
在目前基於深度學習的語言模型結構主要包括三個類別:基於rnn的語言模型,基於cnn的語言模型和基於transformer的語言模型。接下來我會對它們進行依次介紹,並且逐一分析他們的優缺點。
圖2基於rnn的語言模型結構
隨著深度學習的發展,在受到nlp(natural language processing)等任務的啟發,lee等人[1]在視覺特徵建模之後,通過引入rnn(recurrent neural networks)代替傳統的n-gram進行語言模型建模(圖2所示)。rnn通過自回歸的方式(auto regression),在t時間步讀取的是t-1步的狀態,即**當前時間步時會考慮上一時間步的資訊,同時通過注意力的方式在glimpse向量中關注對應位置字元的視覺資訊。該方法省去了繁瑣的n-gram計算過程,在目前的場景文字識別框架中佔據了主導的地位。
但是基於rnn的語言模型結構存在2個問題:1)梯度消失/**的問題。2)序列計算效率慢。因此,最近的方法對rnn的語言建模方式進行了改進(上下文記憶力差的問題,因為在部分最近的工作中證明對中/短文本影響不大,所以在這裡沒有考慮)。
圖3 視覺和語言模型整合的網路框架
圖4 基於cnn的語言模型結構
為了避免了由rnn造成的梯度消失/**的問題,fang等人[2]採用了全卷積神經網路的結構,並通過乙個並行的分支單獨學習語言資訊(圖3),通過將視覺和語言資訊整合的方法提公升了識別結果。
基於cnn的語言模型如圖4所示,給定 ,輸出向量 由下式獲得:
程式設計客棧
sk-2和 sk-1是之前時間步對應的向量,因此,www.cppcns.com該結構可以看成乙個近似的bigram語言模型。但是由於該語言模型也是序列的操作過程,導致其計算效率也較慢。
圖5 視覺語言模型解耦的網路結構
圖6 基於transformer的語言模型結構
yu等人[3]將語言模型從視覺部分解耦,然後在兩個獨立的結構中分別進行進行視覺和語言模型的建模,最後通過融合視覺和語言資訊進行文字**(圖5所示)。在語言模型部分,該方法採用了transformer的結構(圖6所示),通過transformer中的mask來模擬語言結構中的順序和逆序的建模過程,最終自適應地融合視覺和語言資訊進行識別。由於transformer的結構特點,識別過程不同的時間步並行操作,提公升了識別效率。
圖7 語言資訊幫助提公升識別結果的效果圖(上:沒有語言模型。下:加入語言模型。)
語言模型能夠幫助在視覺資訊不充足的情況下,提公升識別的結果。如圖7所示,語言模型提取的語言資訊能夠有效地幫助在視覺缺失,模糊,雜訊的情況下實現準確的識別結果。雖然語言模型提公升效果顯著,但是也存在著以下幾個問題:1)oc(outside vocabulary)問題。2)計算複雜度高。
針對oc問題,wan等人[4]指出了目前基於注意力的方法容易在訓練集中沒有出現過的詞彙中識別錯誤,且精度和在測試過程中使用訓練集**現過的詞彙的效果之間gap遠大於基於分割的識別方法,因此如何獲得乙個魯棒的語言模型是一種挑戰。對於計算量問題,雖然目前程式設計客棧transformer應用於識別是一種趨勢,且能夠通過平行計算提公升識別效率,但是對於長文字的識別,其計算量增加明顯(rnn為線性增長,transformer為平方增長)。
語言模型最近是場景文字識別領域比較熱門的研究方向,在我看來語言模型部分以後的研究大致會分為兩個方向:1)結構。即如何通過搭建更強壯的語言模型捕捉更魯邦的語言資訊。2)能力。如何降低oc問題的影響。3)計算量。如何在低計算量的前提下提取有效的語言資訊。
最近的方法中,僅通過捕捉視覺特徵也能取得不錯的效果(基於視覺特徵匹配[5])。對於無序的識別(車牌識別),yue等人[6]引入了位置資訊增強視覺特徵進行識別。因此,在作者看來,未來的文字識別發展一定是多元化的,即視覺和語言模型並行發展,針對不同的具體任務會有不同的改進。
自然場景文字識別 基於筆畫寬度變換的文字檢測
近期在學習自然場景 natural scenes 的文字識別 text recognition 問題,這一問題也是時下乙個很熱門的亟待解決的問題。在閱讀學習了一定量的文獻資料之後,有了一定收穫,本文提到的基於 筆畫寬度變換 stroke width transform 的方法,是眼下個人看到比較認同...
Python識別中的文字
參照 2.本地安裝tesseract pip install pytesseract 文字識別 pip install pillow 讀取 參照importosimportpytesseract 文字的路徑 path text img 獲取路徑列表 imgs path iforiinos.listd...
Python怎麼識別文字?正確 的方法詳解
爬蟲 文字識別 機器視覺 從google的無人駕駛汽車到可以識別假鈔的自動售賣機,機器視覺一直都是乙個應用廣泛且具有深遠的影響和雄偉的願景的領域。將影象翻譯成文字一般被稱為光學文字識別 optical character recognition,ocr 可以實現ocr的底層庫並不多,目前很多庫都是使...