熊黎劍,吾守爾·斯拉木,許苗苗
(1.新疆大學(xué) 信息科學(xué)與工程學(xué)院 新疆 烏魯木齊 830046;2.新疆多語(yǔ)種信息技術(shù)實(shí)驗(yàn)室 新疆 烏魯木齊 830046;3.新疆多語(yǔ)種信息技術(shù)研究中心 新疆 烏魯木齊 830046)
隨著信息化社會(huì)的不斷推進(jìn),光學(xué)字符識(shí)別(optical character recognition,OCR)技術(shù)在各領(lǐng)域開(kāi)花結(jié)果。印刷體文字識(shí)別在數(shù)字化辦公、文獻(xiàn)管理等方面均有良好的應(yīng)用前景。相比于已成熟化的印刷體中、英文識(shí)別,印刷體維吾爾文識(shí)別還有研究空間[1]。維吾爾文多使用于我國(guó)新疆地區(qū),包含32個(gè)字母,其中8個(gè)元音字母,24個(gè)輔音字母,詞序是主語(yǔ)-謂語(yǔ)-賓語(yǔ)[2]。有一些維文字母的主體部分相同,僅依靠上下點(diǎn)的標(biāo)記來(lái)區(qū)別不同字符[3]。同時(shí),當(dāng)字母出現(xiàn)在詞前、詞中、詞末以及獨(dú)立出現(xiàn)時(shí),對(duì)應(yīng)的寫(xiě)法也不同,切分不當(dāng)會(huì)導(dǎo)致單詞的改變,所以本文從整詞識(shí)別入手。已有研究方法多以傳統(tǒng)方法為主,如基于統(tǒng)計(jì)和結(jié)構(gòu)的方法[4]、模板匹配法[5]等。這些方法往往需要較多的人工干預(yù),包括手工設(shè)計(jì)特征和人工建立標(biāo)準(zhǔn)的匹配庫(kù)等,因此效率不高。
近些年以來(lái),國(guó)內(nèi)相關(guān)的維文OCR系統(tǒng)是西安電子科技大學(xué)盧朝陽(yáng)教授團(tuán)隊(duì)開(kāi)發(fā)的維吾爾文識(shí)別軟件。它的設(shè)計(jì)核心是:?jiǎn)卧~切分成字符再結(jié)合人工選取的特征(如方向線(xiàn)素特征和梯度特征),再用歐氏距離分類(lèi)器[6-8],最終得到候選結(jié)果。2019年,該實(shí)驗(yàn)室又利用“翻字典”原理設(shè)計(jì)了從字符到單詞的兩級(jí)級(jí)聯(lián)分類(lèi)器[9],完成了維文單詞的識(shí)別。以上方法均是手工選取特征結(jié)合分類(lèi)器進(jìn)行識(shí)別,在特征選擇方面具有一定的局限性。
本文選用經(jīng)改進(jìn)的卷積循環(huán)神經(jīng)網(wǎng)絡(luò)(convolutional recurrent neural network,CRNN)和連接時(shí)序分類(lèi)器(connectionist temporal classification,CTC)作為文字識(shí)別的核心算法,Django作為構(gòu)建前后端的框架,搭建了完整的維文整詞識(shí)別系統(tǒng)。
用于文字識(shí)別領(lǐng)域的卷積循環(huán)神經(jīng)網(wǎng)絡(luò)(CRNN)是由Shi等提出的[10]。它由深層卷積網(wǎng)絡(luò)(deep convolutional neural network,DCNN)加循環(huán)網(wǎng)絡(luò)(recurrent neural network,RNN)構(gòu)成。隨著計(jì)算機(jī)視覺(jué)領(lǐng)域研究的持續(xù)火熱,DCNN經(jīng)常被用于圖像特征提取,同時(shí),它也在目標(biāo)檢測(cè)[11-12]、情感分析[13]、圖像處理[14]等方面表現(xiàn)優(yōu)異,但是文字的檢測(cè)與識(shí)別不同于一般的目標(biāo)檢測(cè)任務(wù),基于特征(人工設(shè)計(jì)或CNN得到)及分類(lèi)的方法往往忽視了文本隱含上下文關(guān)聯(lián)的特點(diǎn)。RNN能處理序列信息,在原有的CRNN中,RNN部分是雙向長(zhǎng)短期記憶網(wǎng)絡(luò)(bi-directioanl long short-term memory,BiLSTM),但其結(jié)構(gòu)復(fù)雜,訓(xùn)練收斂速度慢。本文將BiLSTM替換為更為簡(jiǎn)潔的雙向門(mén)控循環(huán)神經(jīng)單元網(wǎng)絡(luò)(bi-directioanl gated recurrent unit,BiGRU)[15]。實(shí)驗(yàn)證明,改進(jìn)后的CRNN網(wǎng)絡(luò)比原有網(wǎng)絡(luò)收斂的速度更快,同時(shí),在測(cè)試精度方面也有略微提升。
GRU是在RNN和LSTM的基礎(chǔ)上一步步演變而來(lái)的,LSTM網(wǎng)絡(luò)解決了RNN在訓(xùn)練時(shí)容易出現(xiàn)梯度爆炸和梯度消失的問(wèn)題,而相比LSTM更為復(fù)雜的3門(mén)結(jié)構(gòu)——輸入門(mén)、忘記門(mén)和輸出門(mén),GRU將其簡(jiǎn)化為2門(mén)結(jié)構(gòu)——更新門(mén)和重置門(mén),這樣簡(jiǎn)潔的結(jié)構(gòu)減少了網(wǎng)絡(luò)訓(xùn)練收斂時(shí)間,具有更高的計(jì)算效率,提高了模型精度。GRU內(nèi)部結(jié)構(gòu)如圖1所示。
圖1 GRU結(jié)構(gòu)圖
GRU的前向傳播計(jì)算公式[15]為
重置門(mén)用來(lái)控制需要保留多少之前的信息,被忘記的歷史信息越多,其值越??;更新門(mén)主要決定被添加到當(dāng)前狀態(tài)信息中的歷史信息量,經(jīng)過(guò)Sigmoid函數(shù)激活,取值為0~1;這兩個(gè)門(mén)共同決定了隱藏狀態(tài)的輸出。
本文采用正向GRU和反向GRU結(jié)合成雙向GRU(BiGRU),并用雙層堆疊形式進(jìn)行序列建模,其中隱藏層單元數(shù)為256。如圖2所示。
圖2 系統(tǒng)框架圖
連接時(shí)序分類(lèi)器是一種用于解決不等長(zhǎng)序列的輸出問(wèn)題(序列對(duì)齊問(wèn)題)的算法,最早由Graves 提出,之后他又將CTC成功應(yīng)用于語(yǔ)音識(shí)別方面[16]。訓(xùn)練時(shí)無(wú)須切分語(yǔ)料,也不需要中間語(yǔ)音的表示,在測(cè)試集上錯(cuò)誤率低至17.7%。該解碼算法能有效解決輸入、輸出序列不等長(zhǎng)的問(wèn)題。
數(shù)學(xué)模型上,CTC層也叫轉(zhuǎn)錄層,是根據(jù)上一層(RNN層)輸出長(zhǎng)度為T(mén)的預(yù)測(cè)序列{x1,x2,…,xT},去尋找具有最高概率的標(biāo)簽序列。
(1)
(2)
維吾爾文識(shí)別的一個(gè)CTC實(shí)例。
由上述實(shí)例可以看出,CTC對(duì)齊前的輸入序列長(zhǎng)度為26,CTC對(duì)齊后的輸出序列長(zhǎng)度為5,可見(jiàn)CTC有效地解決了序列對(duì)齊問(wèn)題。
本文采用開(kāi)源的Django設(shè)計(jì)系統(tǒng),遵循M(model)T(templete)V(view)模式。用戶(hù)在瀏覽器端發(fā)送請(qǐng)求,通過(guò)urls.py發(fā)給view處理,view再調(diào)用對(duì)應(yīng)的templete和model進(jìn)行處理。其中view負(fù)責(zé)業(yè)務(wù)邏輯,templete(主要是HTML文件)負(fù)責(zé)頁(yè)面展示,model負(fù)責(zé)數(shù)據(jù)庫(kù)對(duì)象和業(yè)務(wù)對(duì)象。這種松耦合和相互獨(dú)立的特性,易于開(kāi)發(fā)和維護(hù)。系統(tǒng)流程如圖3所示。
圖3 系統(tǒng)框架圖
后臺(tái)輸入命令啟動(dòng)服務(wù),然后在瀏覽器頁(yè)面輸入網(wǎng)址,開(kāi)啟Web服務(wù)。
1)上傳功能。選擇一張本地圖像,點(diǎn)擊提交,圖像會(huì)自動(dòng)上傳到后臺(tái)splite數(shù)據(jù)庫(kù)。
圖4 系統(tǒng)展示圖
1)訓(xùn)練數(shù)據(jù)(合成數(shù)據(jù))
利用JAVA語(yǔ)言編寫(xiě)腳本,合成了含32個(gè)維文字母(8個(gè)元音,24個(gè)輔音)在內(nèi)的約10萬(wàn)張圖片數(shù)據(jù)(JPG格式),以及對(duì)應(yīng)的標(biāo)簽數(shù)據(jù)(TXT格式)。同時(shí),為了使訓(xùn)練樣本更具代表性,本文對(duì)32個(gè)維文字母作了數(shù)據(jù)均衡處理。部分訓(xùn)練圖片如圖5所示。
圖5 部分訓(xùn)練數(shù)據(jù)
2)測(cè)試數(shù)據(jù)(真實(shí)數(shù)據(jù))
從天山網(wǎng)(維文版)(http:∥uy.ts.cn/)中的不同欄目進(jìn)行收集并制作成測(cè)試圖片和標(biāo)簽??倲?shù)約1 500張,部分測(cè)試數(shù)據(jù)圖片如圖6所示。
圖6 部分測(cè)試數(shù)據(jù)
為了驗(yàn)證系統(tǒng)的有效性,本文設(shè)置了對(duì)比實(shí)驗(yàn)。采用約10萬(wàn)張圖片作為訓(xùn)練數(shù)據(jù),分別在CRNN和改進(jìn)的CRNN(BiGRU)上訓(xùn)練,并將訓(xùn)練得到的模型文件分別在測(cè)試集上進(jìn)行測(cè)試。實(shí)驗(yàn)中的PC機(jī)主要配置為:Nvidia獨(dú)立顯卡(1060Ti 6G內(nèi)存)等。所依賴(lài)的軟件及環(huán)境為:Pycharm(社區(qū)版)編譯工具、Ubuntu18.04操作系統(tǒng)、Python3.6.2編程語(yǔ)言、Pytorch1.2.0等。
1)實(shí)驗(yàn)中精度的定義為A=(nt/ns)·100%,其中:nt代表正確識(shí)別樣本數(shù);ns代表樣本總數(shù);A代表識(shí)別精度。
2)實(shí)驗(yàn)中識(shí)別速度的定義為v=1/(to-ti),其中:to代表獲得字符串時(shí)刻;ti代表輸入圖片時(shí)刻;v代表識(shí)別速度。
本實(shí)驗(yàn)對(duì)兩種方法均進(jìn)行了充分訓(xùn)練,當(dāng)損失趨于收斂后,保留最終模型文件,其中CRNN(BiGRU)收斂速度更快。在測(cè)試集上,CRNN的精度為94.1%,CRNN(BiGRU)的精度為95.7%,平均速度為12.5 fps,表現(xiàn)出較好性能。究其原因,循環(huán)層由BiGRU替換,簡(jiǎn)化了模型結(jié)構(gòu),加快了模型訓(xùn)練收斂速度,提高了計(jì)算效率。此外,訓(xùn)練數(shù)據(jù)均衡也使得識(shí)別率較為穩(wěn)定。
針對(duì)傳統(tǒng)維文識(shí)別方法特征表示不足和基于切分的識(shí)別方法易出錯(cuò)等問(wèn)題,本文從整詞識(shí)別入手,采用卷積神經(jīng)網(wǎng)絡(luò)自動(dòng)提取文字的深層次抽象特征,并對(duì)循環(huán)層進(jìn)行改進(jìn),用BiGRU替換原有的BiLSTM,改善了識(shí)別性能。引入連接時(shí)序分類(lèi)器,很好地解決了維文字符難切分以及不等長(zhǎng)輸入輸出問(wèn)題。測(cè)試識(shí)別精度達(dá)到95.7%,平均速度達(dá)到12.5 fps。最后,利用Django框架,設(shè)計(jì)了一個(gè)端到端的維文整詞識(shí)別系統(tǒng)。因此,該系統(tǒng)具有一定的實(shí)際應(yīng)用價(jià)值。然而,現(xiàn)有系統(tǒng)只能識(shí)別純維文(不含數(shù)字、字符),從實(shí)際應(yīng)用的角度來(lái)看,后續(xù)工作可將常用的符號(hào)和數(shù)字納入識(shí)別系統(tǒng),進(jìn)一步完善該系統(tǒng)。