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