• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于CNN 與有限狀態(tài)自動機(jī)的手寫體大寫金額識別

      2021-09-15 07:36:50孫永奇朱衛(wèi)國李宇霞
      計算機(jī)工程 2021年9期
      關(guān)鍵詞:自動機(jī)字符串大寫

      閆 茹,孫永奇,朱衛(wèi)國,李宇霞

      (北京交通大學(xué)計算機(jī)與信息技術(shù)學(xué)院,北京 100044)

      0 概述

      票據(jù)是銀行、單位和個人辦理支付結(jié)算和現(xiàn)金收付業(yè)務(wù)的重要依據(jù),是記載經(jīng)濟(jì)業(yè)務(wù)和明確經(jīng)濟(jì)責(zé)任的一種書面證明。票據(jù)數(shù)量繁多且非常重要,操作人員稍有不慎便可能造成很大的經(jīng)濟(jì)損失,因此,利用光學(xué)字符識別(Optical Character Recognition,OCR)技術(shù)對票據(jù)進(jìn)行自動識別具有重要意義。作為票據(jù)中最重要的部分,金額的識別尤為關(guān)鍵,不能出任何差錯。目前,手寫票據(jù)中大寫金額部分的識別準(zhǔn)確率達(dá)不到令人滿意的效果,原因有兩點:一是用戶在書寫時風(fēng)格多樣,字符內(nèi)部、字符之間的空隙大小不均,字與字之間可能粘連嚴(yán)重;二是手寫票據(jù)有一大部分是復(fù)寫數(shù)據(jù),存在字跡不清楚、筆畫缺失且噪聲難以完全去除的問題。此外,漢字文本行的識別涉及整條文本行圖像的去噪、準(zhǔn)確切分、單字識別以及路徑最優(yōu)化選擇等多項復(fù)雜任務(wù),每一部分都會影響最后的識別結(jié)果。因此,對手寫票據(jù)中的大寫金額進(jìn)行準(zhǔn)確識別是一個亟待解決的問題。

      為提高大寫金額的識別準(zhǔn)確率,需要對初步的識別結(jié)果做進(jìn)一步的檢查調(diào)整。由于票據(jù)中大寫金額的填寫具有嚴(yán)格的語法要求,因此很適合使用有限狀態(tài)自動機(jī)對識別結(jié)果進(jìn)行檢驗,而且大寫金額字符數(shù)量少、內(nèi)容明確,適用于構(gòu)造有限狀態(tài)自動機(jī)。此外,使用有限狀態(tài)自動機(jī)可以理清字符間的語法邏輯,快速而準(zhǔn)確地拒絕有語法錯誤的字符串并定位到錯誤的字符位置。

      本文建立一種基于卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)和有限狀態(tài)自動機(jī)的手寫體大寫金額識別模型。在利用卷積神經(jīng)網(wǎng)絡(luò)對單個字符進(jìn)行識別后,使用有限狀態(tài)自動機(jī)檢查大寫金額的語法,在票據(jù)識別結(jié)果的多條路徑中選擇更加準(zhǔn)確且符合語法規(guī)則的字符串。在路徑搜索過程中,結(jié)合語法自動機(jī)的前綴判斷功能優(yōu)化搜索性能,對不必要的搜索路徑進(jìn)行剪枝以提高搜索的速度和精度。同時,利用語法自動機(jī)對模型識別不出的模糊字符進(jìn)行預(yù)測以提高識別準(zhǔn)確率。

      1 相關(guān)研究

      1.1 手寫體大寫金額識別

      近年來,有很多學(xué)者致力于中文票據(jù)識別研究[1-2],包括票據(jù)中手寫小寫金額識別[3]以及大寫金額處理和識別[4]。文獻(xiàn)[5]提出一種偏旁識別器,使用字符寬度模型來確定分割線的預(yù)測位置。文獻(xiàn)[6]提出一種基于隱馬爾可夫模型的中國法定金額識別方法,在訓(xùn)練階段,從滑動窗口中提取梯度特征,用單字符圖像訓(xùn)練字符HMM;在識別階段,利用句子HMM 對文本行圖像進(jìn)行分割,句子HMM 由字符HMM 根據(jù)嚴(yán)格的語言模型構(gòu)造。文獻(xiàn)[7]使用筆畫序列信息和中文字符的八方向特征進(jìn)行在線手寫漢字識別。文獻(xiàn)[8]將文字表示為幾何圖形,同時保留空間結(jié)構(gòu)和時間順序,使用空間圖卷積網(wǎng)絡(luò)對字符圖進(jìn)行分類。文獻(xiàn)[9]使用深度學(xué)習(xí)自動編碼器提取孤立大寫金額漢字字符的特征,以提高字符識別準(zhǔn)確率。文獻(xiàn)[10]提出一種大寫金額語法檢查器,通過列舉不符合正確語法的靜態(tài)規(guī)則并結(jié)合動態(tài)判斷來拒絕錯誤的識別結(jié)果。

      盡管上述對手寫體大寫金額識別的研究取得了很大的進(jìn)展,但識別準(zhǔn)確率仍然有待提高。傳統(tǒng)的基于過分割、組合、識別、路徑選擇和校驗的識別方法已經(jīng)被證實可以很好地應(yīng)用于手寫字符串識別任務(wù)[11-13]。近期,有學(xué)者提出不需要分割字符的端到端的序列識別方法[14-15],這些方法對于規(guī)范的印刷體文本具有較好的性能,但是對于復(fù)雜背景下的手寫字符串識別還未能達(dá)到很好的效果。

      本文采用基于分割的框架對手寫票據(jù)中的大寫金額進(jìn)行識別。利用過分割和組合過分割項來得到單字符,使用卷積神經(jīng)網(wǎng)絡(luò)對單字符進(jìn)行識別,在此基礎(chǔ)上,構(gòu)建語法自動機(jī)用于在路徑搜索中選擇符合語法規(guī)則的識別結(jié)果,并在后續(xù)處理中對模糊字符進(jìn)行預(yù)測。

      1.2 有限狀態(tài)自動機(jī)

      美國語言學(xué)家喬姆斯基等人建立了形式文法和自動機(jī)之間的聯(lián)系[16],使得自動機(jī)可以有效地表達(dá)各種語法規(guī)則。由于確定性的自動機(jī)在算法執(zhí)行速度上與輸入字符串的長度呈線性關(guān)系,且空間復(fù)雜度較低,所以被廣泛應(yīng)用于自然語言處理領(lǐng)域中的語法規(guī)則建模任務(wù)[17-18]。文獻(xiàn)[19]使用有限狀態(tài)自動機(jī)將單詞切分為音節(jié),根據(jù)音節(jié)將文本轉(zhuǎn)換為聲音。有限狀態(tài)自動機(jī)是具有離散輸入、輸出系統(tǒng)的一種數(shù)學(xué)模型,它定義了有限個內(nèi)部狀態(tài)和狀態(tài)之間的轉(zhuǎn)移函數(shù)。自動機(jī)按序接收輸入信號,該信號在內(nèi)部狀態(tài)之間發(fā)生轉(zhuǎn)移,不符合自動機(jī)轉(zhuǎn)移條件的輸入將被拒絕,符合規(guī)則的輸入最終會轉(zhuǎn)移至輸出狀態(tài),表明該輸入通過了檢驗。在實際應(yīng)用中,自動機(jī)的狀態(tài)可能數(shù)以萬計,而且自動機(jī)的規(guī)模也是逐漸變大的,因此,會存在多余的狀態(tài)或多余的轉(zhuǎn)換弧,這些多余的狀態(tài)和轉(zhuǎn)換弧不僅降低了計算速度,而且浪費了存儲空間,需要對有限狀態(tài)自動機(jī)進(jìn)行最小化,使其沒有多余的狀態(tài),并且不存在2 個狀態(tài)相互等價的情況[20]。

      2 票據(jù)識別

      票據(jù)中手寫體大寫金額的識別主要包括:1)票據(jù)預(yù)處理及文本定位;2)字符圖像過分割、組合過分割項并識別;3)路徑搜索和校驗。

      2.1 票據(jù)預(yù)處理及文本定位

      手寫票據(jù)圖像是通過掃描儀獲得的RGB 三通道圖像。為了方便對圖像進(jìn)行處理并降低計算量,需要對圖像進(jìn)行灰度化處理。票據(jù)的尺寸、文本布局和掃描方式不一致,會造成大寫金額在票據(jù)中的位置有所差異。因此,本文首先使用能在復(fù)雜背景下對水平文本進(jìn)行檢測的CTPN 算法[21],對大寫金額進(jìn)行定位。在文本定位之后,通過如下步驟作去噪處理:

      1)使用Mask 勻光法[22]結(jié)合紅色(R)通道去除方法來去除圖像中的紅線,再將其轉(zhuǎn)成灰度圖像。

      2)使用自適應(yīng)閾值方法(OTSU)獲得閾值,將大于該閾值的像素灰度值設(shè)置為255,其余像素灰度值保持不變。

      3)采用聯(lián)通區(qū)分析方法對上下位置的小聯(lián)通區(qū)進(jìn)行去噪處理。

      大寫金額定位后預(yù)處理前后的圖像如圖1 所示。

      圖1 票據(jù)預(yù)處理效果Fig.1 Effect of bank check preprocessing

      2.2 過分割與組合過分割

      手寫漢字書寫隨意、風(fēng)格多樣,文本行字符之間粘連嚴(yán)重,如圖2 所示。因此,需要先采用過分割的方式進(jìn)行文本行切分,過分割算法將文本行圖像盡可能分開,分割得到的每一個圖像可能是單個字符或者字符的一部分,這些圖像被稱為過分割項。

      圖2 粘連文本行Fig.2 Sticky text lines

      本文采用的分割算法主要分為以下3 個步驟:

      1)通過聯(lián)通區(qū)分析將文本圖像按照筆畫或者部件進(jìn)行分割。

      2)根據(jù)聯(lián)通區(qū)域的重疊度進(jìn)行初合并,調(diào)整合并結(jié)果,去除重復(fù)區(qū)域[23]。

      3)檢測粘連筆畫并對粘連項進(jìn)行分割,通過計算過分割項的高度以及文本行高設(shè)定合適的寬高比閾值,高于閾值的項被認(rèn)為可能存在粘連。對于潛在的粘連,沿著水平方向遍歷,通過統(tǒng)計垂直方向上連續(xù)像素點的個數(shù),再結(jié)合筆畫寬度閾值和位置信息找到筆畫為“-”的區(qū)域并進(jìn)行過分割處理。

      在單個字符識別前還需要對上述過分割項進(jìn)行組合,使用的組合方法為:對過分割項的合并采用遍歷方式,從第一個過分割項開始,依次與其后的過分割項進(jìn)行合并,并記錄開始和結(jié)束的位置。漢字“捌”由4 個部件組成,是大寫金額漢字中部件數(shù)目最多的文字,因此,定義單個字符的最大合并過分割項Cmax=4。由于有些字符不需要合并4 個過分割項,因此合并時需要對過分割項進(jìn)行類型判斷,動態(tài)調(diào)整合并項的數(shù)目。本文根據(jù)過分割項的寬度h、高度w以及過分割項的最大寬度Wmax、圖像的行高Hline,將過分割項劃分為3 類:

      1)第一類C1。若過分割項的w

      2)第二類C2。若過分割項的h/w>Tth3或w/Hline>Tth4,則將其定義為中型,該類可以是單個字符,也可以是單個字符中的主要部件。

      3)第三類C3。除第一類和第二類,其余情況則將過分割項定義為大型,該類為單個字符。

      在上述分類過程中,閾值Tth1、Tth2、Tth3和Tth4通過大量的優(yōu)化實驗來確定,票據(jù)識別中閾值的取值分別為Tth1=3,Tth2=4,Tth3=1.2,Tth4=0.6。在合并的過程中,當(dāng)組合了一個C3后,不再連續(xù)組合C3或C2;每個過分割項最多組合3 個C2;C1總是與其他項組合,如果合并項寬度大于設(shè)定的閾值,則不組合。根據(jù)上述規(guī)則便可得到待識別的合并項。

      2.3 字符識別

      基于深度學(xué)習(xí)直接從原始數(shù)據(jù)中學(xué)習(xí)判別式特征以進(jìn)行字符分類的方法已經(jīng)取得了較好的效果,因此,本文使用深度卷積神經(jīng)網(wǎng)絡(luò)來訓(xùn)練字符分類器。

      本文采用8 層的卷積網(wǎng)絡(luò),其包含5 個卷積層和3 個全連接層,卷積層均采用3×3 的卷積核,卷積步長為1,padding 為1。所有卷積層后連接一個空間最大池化層MaxPooling 以降低特征維度,同時保證圖像的平移不變性,增強(qiáng)分類的魯棒性。池化窗口為2×2,步長為2。為了加快收斂的速度并增強(qiáng)分類效果,在卷積層后均加入BatchNorm 層。在全連接層后接Dropout 層來增強(qiáng)模型的泛化性能。使用ReLUs 作為除最后一個全連接層外的所有卷積層和全連接層的激活函數(shù),最后一層使用Softmax來進(jìn)行分類,網(wǎng)絡(luò)的輸入為單通道的64×64 灰度圖。為了便于計算,設(shè)置圖像背景的灰度級為0,前景的灰度級為[1,255]。CNN 的配置信息如表1所示。

      表1 CNN 網(wǎng)絡(luò)結(jié)構(gòu)及其參數(shù)Table 1 CNN network structure and its parameters

      3 大寫金額語法自動機(jī)

      使用有限狀態(tài)自動機(jī)檢驗大寫金額語法時主要解決以下2 個關(guān)鍵問題:

      1)根據(jù)大寫金額語法規(guī)則對字符進(jìn)行分類,通過定義合理的狀態(tài)構(gòu)造有限狀態(tài)自動機(jī)。

      2)根據(jù)構(gòu)造的有限狀態(tài)自動機(jī),設(shè)計大寫金額字符串的匹配算法。

      3.1 大寫金額語法規(guī)則

      大寫金額的主要語法規(guī)則如下[24]:

      1)中文大寫金額的數(shù)字字符應(yīng)該使用規(guī)范的字符,如壹、貳、叁、肆、伍、陸、柒、捌、玖、拾、佰、仟、萬、億、元(圓)、角、分、零、整(正)等字樣。

      2)中文大寫金額數(shù)字到“元”為止的,在“元”之后寫“整”(或“正”)字;到“角”為止的,在“角”之后可以寫也可以不寫“整”(或“正”)字;大寫金額數(shù)字有“分”的,“分”后面不寫“整”(或“正”)字。

      3)如果大寫金額對應(yīng)的阿拉伯?dāng)?shù)字金額中有“0”,則大寫金額應(yīng)該符合漢語語言規(guī)律和金額數(shù)字構(gòu)成規(guī)范:

      (1)阿拉伯?dāng)?shù)字中間有“0”時,中文大寫金額要寫“零”字,如¥1 409.50,應(yīng)寫成人民幣壹仟肆佰零玖元伍角(整)。

      (2)阿拉伯?dāng)?shù)字中間有連續(xù)多個“0”時,中文大寫金額中間可以只寫一個“零”字,如¥6 007.14,應(yīng)寫成人民幣陸仟零柒元壹角肆分。

      (3)阿拉伯?dāng)?shù)字萬位(元位)是“0”,或者數(shù)字中間有連續(xù)多個“0”且萬位(元位)也是“0”,但千位(角位)不是“0”時,中文大寫金額中可以只寫一個“零”字,也可以不寫。如¥107 001.53,應(yīng)寫成人民幣壹拾萬零柒仟零壹元伍角叁分,或者寫成人民幣壹拾萬柒仟零壹元伍角叁分。又如¥1 680.32,應(yīng)寫成人民幣壹仟陸佰捌拾元零叁角貳分,或者寫成人民幣壹仟陸佰捌拾元叁角貳分。

      (4)阿拉伯?dāng)?shù)字角位是“0”而分位不是“0”時,對應(yīng)的大寫金額“元”字后面應(yīng)寫“零”字。如¥16 409.02,應(yīng)寫成人民幣壹萬陸仟肆佰零玖元零貳分。

      3.2 有限狀態(tài)自動機(jī)構(gòu)造

      大寫金額字符組合具有多樣性,如果將單個字符作為有限狀態(tài)自動機(jī)的狀態(tài),自動機(jī)將變得很大,而且由于多個狀態(tài)具有相同的狀態(tài)轉(zhuǎn)移關(guān)系,使得狀態(tài)之間的轉(zhuǎn)換變得冗余且復(fù)雜。因此,通過對字符進(jìn)行分類可以得到最小化的有限狀態(tài)自動機(jī),同時準(zhǔn)確分類也有助于簡化字符組合的復(fù)雜度從而使得字符間的邏輯關(guān)系更加清晰。本文根據(jù)每個字符在金額中的意義將輸入字符集合劃分為以下5 類(括號內(nèi)為集合名稱):

      1)數(shù)字類(Number):壹,貳,叁,肆,伍,陸,柒,捌,玖。

      2)數(shù)字單位類(Unit):拾,佰,仟,萬。

      3)金額單位類(Amount):元,圓,角,分。

      4)零類(Zero):零。

      5)結(jié)束字符類(Only):正,整。

      以類別名稱的首字母作為狀態(tài)名稱來表示自動機(jī)所處的狀態(tài),則上述集合對應(yīng)的自動機(jī)狀態(tài)分別為N、U、A、Z 和O。通過分析大寫金額的結(jié)構(gòu)可以看出,在“元(圓)”之前的金額表示是由數(shù)字字符和數(shù)字單位字符組成的,而在“元(圓)”之后則不會用到數(shù)字單位字符。因此,為了更加清晰地表達(dá)自動機(jī)狀態(tài)之間的邏輯關(guān)系,將Number 類和Zero 類進(jìn)一步劃分為以下3 類:

      1)N 類。由于首字符缺乏上下文信息,因此將第一個數(shù)字字符歸為該類。例如,對于字符串“伍角叁分”或者“伍拾元”,當(dāng)自動機(jī)讀取第一個字符“伍”時,由于沒有足夠的信息將其分類,因此自動機(jī)進(jìn)入N 狀態(tài)。

      2)N1(N2)類。在“元(圓)”之前(后)且不是首字符的數(shù)字類字符歸為該類。

      3)Z1(Z2)類。在“元(圓)”之前(后)的零類字符歸為該類。

      用于大寫金額語法檢查的有限狀態(tài)自動機(jī)M定義為一個有序五元組:

      M={Q,∑,δ,q0,F(xiàn)}

      其中:Q={S,N,U,Z1,Z2,N1,A,N2,O}是自動機(jī)所有狀態(tài)的集合;∑={壹,貳,叁,肆,伍,陸,柒,捌,玖,拾,佰,仟,萬,億,元,圓,角,分,零,整,正}為所有輸入字符的集合;δ為狀態(tài)轉(zhuǎn)移函數(shù),Q×∑→Q;q0=S是自動機(jī)的初始狀態(tài),q0∈Q;F={A,O}是所有終止?fàn)顟B(tài)的集合,F(xiàn)∈Q。

      有限狀態(tài)機(jī)的狀態(tài)流程為圖3 所示的有向圖,可以看出,其具有有限個狀態(tài)節(jié)點,并且每個節(jié)點代表一個狀態(tài),每條有向邊代表狀態(tài)的轉(zhuǎn)移方向。有向邊上方標(biāo)注的集合名稱是狀態(tài)轉(zhuǎn)移時需要的字符類型,即外界對自動機(jī)的輸入,自動機(jī)通過讀取相應(yīng)的集合元素來推動狀態(tài)的轉(zhuǎn)移。

      圖3 狀態(tài)轉(zhuǎn)換示意圖Fig.3 Schematic diagram of state transition

      對于被檢查的字符串,有限狀態(tài)自動機(jī)依次讀取其中的字符,依據(jù)匹配算法進(jìn)行狀態(tài)轉(zhuǎn)移。每次讀入一個字符發(fā)生一次狀態(tài)轉(zhuǎn)移,轉(zhuǎn)移方向由當(dāng)前所處狀態(tài)和讀入的字符共同決定。例如,對于U=δ(N,Unit),在自動機(jī)處在N 狀態(tài)時,當(dāng)讀入Unit 字符集合中的一個單位字符時,自動機(jī)由N 狀態(tài)轉(zhuǎn)移至U 狀態(tài),發(fā)生一次狀態(tài)轉(zhuǎn)移。當(dāng)自動機(jī)到達(dá)某個狀態(tài)時表示該自動機(jī)接受了在此之前讀入的所有字符組合成的字符串,而沒有被接受的字符串表示不符合語法規(guī)則。因此,如果一個大寫金額字符串可以從狀態(tài)機(jī)的開始狀態(tài)經(jīng)過若干個中間狀態(tài)后到達(dá)最終狀態(tài),則該字符串有效,否則無效。由于大寫金額可以以“角”“分”和“整(正)”結(jié)尾,因此當(dāng)字符串進(jìn)入A 狀態(tài)時需要判斷是否結(jié)束。A 狀態(tài)既可以作為結(jié)束狀態(tài),也可以在還有字符讀入時根據(jù)轉(zhuǎn)移函數(shù)轉(zhuǎn)移至下一狀態(tài)。

      以上為有限狀態(tài)自動機(jī)的執(zhí)行過程,但實際應(yīng)用過程中的情況要復(fù)雜很多。數(shù)字單位和金額單位中的字符具有緊密的上下文關(guān)系,例如,“叁拾”符合語法規(guī)則,但“叁拾伍佰元整”則不符合語法規(guī)則,這種類型的規(guī)則需要結(jié)合上文信息才能表示,本文將其稱為動態(tài)規(guī)則。通過在自動機(jī)的狀態(tài)內(nèi)部添加動態(tài)約束,可以實現(xiàn)對大寫金額語法規(guī)則的合理判斷。

      3.3 自動機(jī)動態(tài)約束

      為了使自動機(jī)最小化,本文在設(shè)計狀態(tài)時合并了自動機(jī)中的等價狀態(tài)。其中,數(shù)字狀態(tài)的9 個數(shù)字字符是完全等價的,邏輯關(guān)系可以統(tǒng)一表示,因此,狀態(tài)內(nèi)部不需要進(jìn)行約束。對于數(shù)字單位Unit和金額單位Account 集合中的字符,需要結(jié)合語法信息在狀態(tài)內(nèi)部添加動態(tài)規(guī)則進(jìn)行約束。本文根據(jù)單位狀態(tài)發(fā)生轉(zhuǎn)換時讀入的字符將約束分為4 類,分別為數(shù)字類一般約束、數(shù)字類特殊約束、零類一般約束和零類特殊約束。為了方便對動態(tài)規(guī)則進(jìn)行建模,定義以下符號:

      1)unit_all={萬,仟,佰,拾,元,角,分},其包含數(shù)字單位Unit 和金額單位Account 集合中的元素。Uindex表示unit_all 中各個字符對應(yīng)的狀態(tài),0≤index≤6。例如,U0表示集合中的“萬”字對應(yīng)的自動機(jī)狀態(tài),U3表示集合中“拾”字對應(yīng)的自動機(jī)狀態(tài)。

      2)wan_used 表示在自動機(jī)讀過的字符串中“萬”字出現(xiàn)過。

      3)unit_wan_used 表示數(shù)字單位集合Unit 中的任意一個字符與“萬”字符的組合是否出現(xiàn)過,例如,“拾萬”或“佰萬”等。對于“元”字符,同樣定義unit_yuan_used 來表示類似的信息。

      4)m和n分別表示當(dāng)前單位狀態(tài)下標(biāo)以及下一單位狀態(tài)的下標(biāo),且0≤m<6,0

      4 種約束具體如下:

      1)數(shù)字類一般約束描述為:

      該約束是針對數(shù)字構(gòu)造的一般規(guī)則,其中,f為動態(tài)約束函數(shù)。用index 表示unit_all 中的狀態(tài),其控制單位的移動。當(dāng)且僅當(dāng)讀取一個數(shù)字字符時,數(shù)字單位向后移動一位,即index++。因此,該約束條件主要針對沒有發(fā)生單位向前躍變的情形。當(dāng)自動機(jī)讀取字符串中數(shù)字字符的下一位單位字符時,如果單位字符與index 指向的單位相同,則判定為正確的語法;否則,自動機(jī)返回false 標(biāo)志,表示該字符串被自動機(jī)拒絕,結(jié)束判斷。但當(dāng)m=3 時,對于合法的字符串“伍仟肆佰叁拾壹萬”,在Um=“拾”且讀入Number 集合中的“壹”字符時,數(shù)字單位狀態(tài)U 中index 由3 變?yōu)?(Un=“萬”),發(fā)生了單位的躍變,這時就需要對其做特殊約束。

      2)數(shù)字類特殊約束描述為:

      當(dāng)m=3(Um=“拾”)時,由于“萬”字符影響可能會發(fā)生單位的向前躍變,因此此約束條件取決于“萬”字符是否出現(xiàn)過。當(dāng)“萬”字符出現(xiàn)過時,表明“萬”字段的數(shù)字已經(jīng)處理完成,下一步按數(shù)字類一般約束(沒有發(fā)生躍變)處理即可,例如,當(dāng)自動機(jī)已經(jīng)讀到字符串“壹萬壹仟壹佰壹拾”的“拾”時,m=3,在讀入Number 集合中的數(shù)字時,狀態(tài)只能轉(zhuǎn)移至n=4,即下一個單位字符只能為“元”;當(dāng)“萬”字符沒有出現(xiàn)過時,可能是該字符串的金額沒有超過一萬,也可能前面的數(shù)字單位是“萬”字段的字符,對于前者,例如“壹仟壹佰壹拾壹元”,則不發(fā)生躍變,對于后者,如“壹仟壹佰壹拾壹萬”,則發(fā)生躍變,這些都符合語法規(guī)則,需要根據(jù)接下來讀入的數(shù)字單位做相應(yīng)選擇。

      3)零類一般約束描述為:

      該約束條件主要針對3.1 節(jié)中第3 條規(guī)則的第2 條,當(dāng)阿拉伯?dāng)?shù)字中間有連續(xù)多個“0”時,大寫金額可以只寫一個“零”。因此,結(jié)合數(shù)字構(gòu)造規(guī)則,在讀入字符“零”時,index 至少需要向右移動一個單位,也可以移動多個單位,即n-m≥1。在讀入下一個單位字符時,如果該單位滿足此條件,則判定為語法正確,index 根據(jù)讀入的字符進(jìn)行相應(yīng)賦值;否則,自動機(jī)返回false,結(jié)束判斷。當(dāng)大寫金額字符串為多個“零”時,index 按照“零”的個數(shù)進(jìn)行移位。

      4)零類特殊約束描述為:

      該約束條件主要針對3.1 節(jié)中第3 條規(guī)則的第3 條,其主要取決于數(shù)字單位與“萬”或者“元”字符是否組合出現(xiàn)過。例如,對于“ 萬”位,當(dāng)unit_wan_used=true 并且千位不為“零”時,該組合單位后面可以加“零”也可以不加“零”。在自動機(jī)中當(dāng)讀入字符“零”時,單位可以向后移動一位或者不移動。當(dāng)讀入下一個字符時,滿足此條件則判定為語法正確;否則,自動機(jī)返回false,結(jié)束判斷。對于“元”位的處理也與上述過程相同。

      在添加動態(tài)約束后,完整的自動機(jī)狀態(tài)轉(zhuǎn)換示意圖如圖4 所示。根據(jù)以上描述的算法可以實現(xiàn)大寫金額文本語法的準(zhǔn)確檢查。

      圖4 改進(jìn)的狀態(tài)轉(zhuǎn)換示意圖Fig.4 Schematic diagram of improved state transition

      3.4 自動機(jī)與路徑搜索

      復(fù)寫在票據(jù)上的大寫金額字體在去噪之后更加不清晰,如圖5 所示,其中一些字符可能被分成3 個以上的分割項,每個過分割項在嘗試組合之后都存在一種或多種組合情況,每種組合情況還會有一個或多個識別結(jié)果。所有識別項都可以用四元組{C,P,S,E}表示,其中,C為字符分類結(jié)果,P為置信度,S和E分別為合并項的開始和結(jié)束位置。本文對首尾相連的識別項進(jìn)行路徑搜索,并將設(shè)計的語法自動機(jī)應(yīng)用到動態(tài)搜索過程中,以提高路徑搜索的精度和速度。

      圖5 筆畫缺失的文本行Fig.5 Text lines with missing stroke

      在路徑搜索的過程中,將當(dāng)前路徑中的字符構(gòu)成的字符串稱為前綴字符串。前文所設(shè)計的自動機(jī)校驗算法是針對完整字符串的,不能到達(dá)終止?fàn)顟B(tài)時該字符串被認(rèn)為不符合語法規(guī)則。由于前綴字符串不是完整的字符串,因此需要對自動機(jī)進(jìn)行適當(dāng)調(diào)整以滿足語法檢驗的需求。首先,調(diào)整自動機(jī)的每個狀態(tài),使其可以接受標(biāo)志字符T,并可以由該狀態(tài)直接進(jìn)入終止?fàn)顟B(tài);然后,在路徑搜索過程中的前綴字符串后面添加判斷標(biāo)志T。具體搜索步驟如下:

      1)將每個合并項的識別結(jié)果按置信度P由高到低排序,當(dāng)最大置信度高于閾值T時,保留前n項作為候選集;否則,認(rèn)為該合并項的識別結(jié)果均不可靠,以模糊字符“卍”代替。接著,從S=0 的合并項開始集束搜索,設(shè)置搜索寬度sw=3。

      2)利用自動機(jī)的前綴語法檢查功能對搜索到的路徑進(jìn)行判斷。當(dāng)前綴字符串符合語法規(guī)則時,記錄結(jié)束位置E,并繼續(xù)對開始位置為S=E+1 的合并項進(jìn)行搜索;否則,增加搜索寬度,即sw=sw+1。當(dāng)所有的以S為開始的合并項都不符合語法規(guī)則時,將該位置的識別結(jié)果以模糊字符“卍”(C=“卍”)替代,繼續(xù)進(jìn)行搜索。

      3)當(dāng)結(jié)束位置E為最后一個合并項的結(jié)束位置時,即完成路徑搜索。由于整個過程按照置信度優(yōu)先搜索,因此以第一條符合語法規(guī)則的路徑作為最后的識別結(jié)果。

      當(dāng)搜索路徑中的模糊字符“卍”的個數(shù)大于3 時,或者出現(xiàn)2 個連續(xù)的模糊字符,就認(rèn)為組合或識別結(jié)果不可靠,該搜索路徑被剪枝。對模糊字符在規(guī)定范圍內(nèi)的字符串,暫不使用語法自動機(jī)對其進(jìn)行檢查。在模糊字符被預(yù)測出之后將路徑歸為候選路徑,模糊字符預(yù)測的詳細(xì)過程在3.5 節(jié)中進(jìn)行介紹。

      3.5 自動機(jī)與模糊字符預(yù)測

      對于一些筆畫缺失或者噪聲去除效果不好的字符圖像,卷積神經(jīng)網(wǎng)絡(luò)很難給出正確的識別結(jié)果,這類字符在路徑搜索中以模糊字符“卍”替代。由于大寫金額無論是數(shù)字單位還是金額單位都有規(guī)則的序位關(guān)系,因此可以利用自動機(jī)對這類模糊字符進(jìn)行預(yù)測。

      自動機(jī)每一次的字符讀取都有確定的轉(zhuǎn)移狀態(tài),當(dāng)字符串中有單個模糊字符時,模糊字符必然出現(xiàn)在前一狀態(tài)的下一個轉(zhuǎn)移狀態(tài)中。這時,就可以將下一狀態(tài)的字符集作為該模糊字符的候選集。以字符串“壹仟零叁卍陸仟叁卍捌拾元整”為例,當(dāng)自動機(jī)讀到第一個“卍”字時,自動機(jī)處于N1狀態(tài),從自動機(jī)的狀態(tài)轉(zhuǎn)換圖可以看出該狀態(tài)的下一狀態(tài)只能是M 和U 2 種情況。當(dāng)下一狀態(tài)為M 時,“元”作為該模糊字符的預(yù)測候選項;當(dāng)下一狀態(tài)為U 時,由于“仟”和“零”字符的出現(xiàn),根據(jù)數(shù)字類一般約束可知,此時index=3,預(yù)測候選項為“拾”。同時,由于wan_used=false,根據(jù)數(shù)字類特殊約束可知,“萬”也是預(yù)測候選項。因此,第一個“卍”字符有3 個候選項{“元”,“拾”,“萬”},形成3 條候選路徑。自動機(jī)繼續(xù)讀取到字符“仟”時,語法自動機(jī)就會把包含預(yù)測值“元”和“拾”的路徑剪枝,最終得到唯一的候選項“萬”,從而完成一次準(zhǔn)確的預(yù)測。同理,第二個模糊字符將被準(zhǔn)確預(yù)測為“佰”。最終,語法自動機(jī)將返回所有模糊字符的預(yù)測結(jié)果。

      4 實驗結(jié)果與分析

      本文進(jìn)行2 個實驗:一為驗證自動機(jī)語法檢查和模糊字符預(yù)測2 種算法性能的實驗,使用的數(shù)據(jù)為大寫金額字符串;二為這2 種算法在手寫票據(jù)大寫金額識別任務(wù)中的應(yīng)用實驗,使用的數(shù)據(jù)為手寫票據(jù)。

      4.1 實驗數(shù)據(jù)及評價指標(biāo)

      本文從中科院手寫漢字?jǐn)?shù)據(jù)集CASIAHWDB1.0-1.2[25]中挑出21 類字符集進(jìn)行卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練。其中,訓(xùn)練集每類包含800 張由不同作者手寫的單字符圖片,實驗采用的測試數(shù)據(jù)是人工標(biāo)注的2 600 張手寫票據(jù)。

      實驗中針對不同的應(yīng)用場景采用不同的評價指標(biāo)。在單獨的模糊字符預(yù)測實驗中,使用單字符預(yù)測準(zhǔn)確率(Character Prediction Accuracy,CPA)和字符串預(yù)測準(zhǔn)確率(String Prediction Accuracy,SPA)作為評價指標(biāo)。在識別票據(jù)中的大寫金額圖像文本時,采用單字符識別準(zhǔn)確率(Character Recognition Accuracy,CRA)和整條文本識別準(zhǔn)確率(Line RecognitionAccuracy,LRA)作為評價指標(biāo)。CRA 按照識別結(jié)果和標(biāo)注值的編輯距離進(jìn)行計算。

      4.2 自動機(jī)語法檢查和模糊字符預(yù)測結(jié)果

      為了評估有限狀態(tài)自動機(jī)的語法檢查效果,使用2 000 條大寫金額字符串進(jìn)行實驗,其中的1 000 條具有語法錯誤。實驗結(jié)果表明,語法檢查自動機(jī)對正確字符串的接受率和錯誤字符串的拒絕率均為100%,即語法自動機(jī)可以對識別結(jié)果進(jìn)行非??煽康恼Z法檢查。

      在模糊字符預(yù)測實驗中,使用2 600 條手寫票據(jù)中大寫金額部分的label 作為測試數(shù)據(jù)來評估預(yù)測效果。其中,1 300 條文本隨機(jī)使用模糊字符“卍”替代標(biāo)注字符串中的1 個字符,剩下的1 300 條隨機(jī)使用2 個模糊字符“卍”替代標(biāo)注字符串中的2 個字符,替換位置為非數(shù)字位,由于數(shù)字位的9 個字符不具備上下文語義,因此本文僅評估非數(shù)字位的預(yù)測效果。自動機(jī)對模糊字符的預(yù)測結(jié)果如表2 所示。

      表2 模糊字符預(yù)測結(jié)果Table 2 Fuzzy characters prediction results %

      從實驗結(jié)果可以看出,當(dāng)字符串中僅有1 個模糊字符時,自動機(jī)的預(yù)測準(zhǔn)確率可以達(dá)到99.5%;當(dāng)字符串中有2 個位置的模糊字符時,自動機(jī)的預(yù)測準(zhǔn)確率下降至96.0%。由于大寫金額語法的靈活性,同一模糊字符處可能存在多種符合要求的預(yù)測結(jié)果,因此自動機(jī)的字符預(yù)測率很難達(dá)到100%。但是,作為識別的后處理步驟,基于自動機(jī)的模糊字符預(yù)測可以改善部分模型識別錯誤的情況,進(jìn)而提高票據(jù)中大寫金額的識別準(zhǔn)確率。

      4.3 票據(jù)識別結(jié)果

      為進(jìn)一步驗證自動機(jī)模糊字符預(yù)測的重要性,本節(jié)將進(jìn)行2 個消融實驗,對2 600 張手寫票據(jù)的大寫部分進(jìn)行識別。實驗1 為識別后沒有進(jìn)行模糊字符預(yù)測,實驗2 為識別后再進(jìn)行模糊字符預(yù)測。2 個實驗的結(jié)果如表3 所示。

      表3 模糊字符預(yù)測對票據(jù)識別的影響Table 3 Influence of fuzzy characters prediction on bank checks recognition %

      從實驗結(jié)果可以看出,將語法自動機(jī)應(yīng)用于票據(jù)中大寫金額的識別任務(wù)時,字符識別準(zhǔn)確率可達(dá)95.3%,文本行的識別準(zhǔn)確率達(dá)到91.4%,該結(jié)果也驗證了在路徑搜索中結(jié)合前綴語法檢測自動機(jī)可以提高搜索的精度和速度。在加入模糊字符預(yù)測的操作之后,單字符的識別準(zhǔn)確率達(dá)到98.2%,相比實驗1提升了2.9 個百分點;整條文本的識別準(zhǔn)確率達(dá)到96.6%,相比實驗1 提升了5.2 個百分點。實驗結(jié)果表明,在大寫金額的后續(xù)處理步驟中使用語法自動機(jī)對模糊字符進(jìn)行預(yù)測,可以有效提升識別準(zhǔn)確率。

      5 結(jié)束語

      本文采用基于分割的框架對手寫票據(jù)中的大寫金額進(jìn)行識別。通過對字符進(jìn)行分類、定義類與類之間的邏輯關(guān)系,構(gòu)造出可以用于語法檢查的有限狀態(tài)自動機(jī)。利用語法自動機(jī)在識別結(jié)果中選擇出符合語法規(guī)則的字符串。在路徑搜索階段采用束搜索的策略,通過前綴語法檢查對搜索路徑進(jìn)行剪枝,以避免路徑呈指數(shù)級增長的問題,從而提高搜索速度。針對復(fù)寫票據(jù)不清晰、筆畫缺失導(dǎo)致卷積神經(jīng)網(wǎng)絡(luò)字符識別不正確或置信度低的問題,提出一種模糊字符預(yù)測算法。實驗結(jié)果表明,結(jié)合語法自動機(jī)校驗和模糊字符預(yù)測對單字符進(jìn)行識別時準(zhǔn)確率高達(dá)98.2%,對整條文本進(jìn)行識別時準(zhǔn)確率達(dá)到96.6%。但是,本文自動機(jī)的模糊字符預(yù)測僅針對具有上下文關(guān)系的非數(shù)字位,對于無上下文關(guān)系的數(shù)字位還無法進(jìn)行預(yù)測。因此,下一步將使用語法自動機(jī)定位模糊字符,根據(jù)偏旁部首或部件信息進(jìn)行位置糾正,以實現(xiàn)數(shù)字位的模糊字符預(yù)測。

      猜你喜歡
      自動機(jī)字符串大寫
      做一個大寫的“我”
      少先隊活動(2022年4期)2022-06-06 07:20:20
      {1,3,5}-{1,4,5}問題與鄰居自動機(jī)
      大寫的厲害:“00后”少年自制火箭成功上天
      小讀者(2021年4期)2021-06-11 05:42:04
      一種基于模糊細(xì)胞自動機(jī)的新型疏散模型
      智富時代(2019年4期)2019-06-01 07:35:00
      “大寫”與“大些”
      廣義標(biāo)準(zhǔn)自動機(jī)及其商自動機(jī)
      —個大寫的pink 該入手的都來了
      Coco薇(2016年2期)2016-03-22 02:31:03
      一種新的基于對稱性的字符串相似性處理算法
      依據(jù)字符串匹配的中文分詞模型研究
      一種針對Java中字符串的內(nèi)存管理方案
      石楼县| 蕉岭县| 贵德县| 六枝特区| 丹寨县| 西青区| 盘山县| 阿勒泰市| 肇庆市| 施秉县| 祁东县| 平谷区| 五台县| 仁寿县| 乐亭县| 平凉市| 肇源县| 巴彦淖尔市| 汪清县| 璧山县| 塔城市| 巩留县| 古浪县| 嘉善县| 武城县| 宝山区| 云龙县| 泗水县| 新安县| 资兴市| 大连市| 武安市| 廊坊市| 沈阳市| 眉山市| 绥棱县| 霍山县| 绍兴市| 寿阳县| 昆山市| 开远市|