范道爾吉,高光來, 武慧娟
(1. 內蒙古大學 計算機學院, 內蒙古 呼和浩特 010021; 2. 內蒙古大學 電子信息工程學院, 內蒙古 呼和浩特 010021)
建立蒙古文手寫數(shù)據(jù)庫是研究和開發(fā)蒙古文手寫識別技術的基礎。公開權威的手寫字庫是訓練識別系統(tǒng)的基礎數(shù)據(jù),也是客觀公正地評比不同識別算法的衡量標準。但目前還沒有公開的、權威的、大詞詞匯量的蒙古文手寫字庫。
近幾年來,蒙古文信息化研究在辦公自動化、語音識別、OCR等領域獲得較大成功[1-3]。然而,自由手寫文字識別、文檔分析等方面研究仍在起步階段。漢字手寫識別研究起步比較早,清華大學、中科院自動化所等著名高校和科研院所都致力于漢字識別的研究,以漢王科技股份有限公司為首的科技企業(yè)也推出了一系列成熟的商業(yè)產(chǎn)品。很多論文提出的脫機手寫體漢字識別的方法在不同的字符數(shù)據(jù)庫試驗中, 取得了95%~99%的識別率[4-6]。
目前, 具有代表性的手寫漢字數(shù)據(jù)庫有: HCL2000、HIT-MW、ETL字符數(shù)據(jù)[7]。經(jīng)常被使用的其他手寫字庫有: IAM-DB、IFN/ENIT、RIMES和Maurdor等。其中IAM-DB是英語句子的手寫字庫,大概包括10 841單詞[8]。IFN/ENIT是小規(guī)模詞匯的阿拉伯語單詞手寫字庫[9]。RIMES是大詞匯量的法語手寫字庫[10]。Maurdo是英語、法語和阿拉伯語印刷體和手寫體的混合字庫[11]。
本文主要研究了蒙古文脫機手寫字庫制作過程中的若干問題,包括文字抽樣、圖片預處理、文字分割、錯誤檢測等。在此基礎上公開了一個包含10萬訓練樣本的脫機手寫數(shù)據(jù)庫,并在隱馬爾科夫模型(hidden markov model, HMM)、深層神經(jīng)網(wǎng)絡(deep neural network, DNN)-HMM混合模型和遞歸神經(jīng)網(wǎng)絡(recurrent neural networks,RNN)模型上評估了測試集的性能。
蒙語屬于黏著語,其最大特點是詞匯量豐富。蒙古文有獨特的構詞和書寫方法,由7個元音、17個輔音及用于外來語書寫的1個元音和10個輔音構成。Unicode編碼的0x1820~0x1842區(qū)域分配給了蒙古文字母。雖然蒙古文字母只有35個(名義字符),但每個字母根據(jù)詞中位置和上下文呈現(xiàn)不同形狀(顯現(xiàn)字符)。手寫識別本質上是對形狀的識別,所以字庫應涵蓋所有可能的顯現(xiàn)字符組合。
手寫字庫訓練集中出現(xiàn)的詞匯集(簡稱HWS)是蒙古文全部詞匯集(簡稱MGS)的一次抽樣。只有HWS正確反映MGS的統(tǒng)計特性,所建的字庫才有代表意義。本文使用的MGS由多個蒙古文字典的并集構成,共包含76 371個單詞,其中動詞只涵蓋了詞根和常用變體形式。
蒙古文Unicode編碼無法直接表示形狀信息,因此我們自定義了一套形碼集合,如表1所示。從MGS抽取HWS時采用的策略是: 覆蓋所有MGS的形碼三因子。
通過該策略我們抽取了包含5 000文字的HWS。HWS和MGS的形碼三因子統(tǒng)計向量的互相關系數(shù)達到了0.88,說明HWS很好地反映了MGS的統(tǒng)計分布。手寫字庫包含兩個測試集,其中測試集Ⅰ的1 000個詞從MGS隨機抽取獲得;測試集Ⅱ的939個常用詞從小學課本人工挑選獲得。
表1 自定義形碼
為了采集最自然的手寫文字,我們讓書寫者在A4紙上用0.5mm中性筆書寫,然后通過掃描儀對紙張進行批量掃描變成圖片文件。訓練集的5 000個文字被分割成了40份原始稿件,每個原始稿件分25列,每列5個文字,共125個文字。書寫用的A4紙上提前打印了1行×25列表格,書寫者只需把原始稿件抄寫到A4紙上即可。我們共組織了200名書寫者,每人抄寫4份原始稿件,共獲得800份手寫紙張,每個字被抄寫了20人次。測試集Ⅰ的書寫人員和訓練集的書寫人員是同一群人,且每個字被書寫5人次。測試集Ⅱ的書寫人員是另外50名書寫者,每個字被書寫15人次。
每份手寫紙張都被掃描成了分辨率為300dpi的JPG格式圖片,稱為原始圖片,如圖1所示。對原始圖像進行二值化、傾斜矯正、中值濾波、行提取、尺寸變換和文字提取等手段后得到了每個樣本的二值化圖像信息。每個樣本的寬度固定為48像素,高度自適應。
書寫者在書寫過程中可能出現(xiàn)錯字、串行、丟字等錯誤現(xiàn)象。為了確保手寫字庫的正確性,需要大量人力進行核查和校正。為了進一步提高可靠性,我們對人工核對后的原始稿件進行了自動錯誤檢測。
由于蒙古文字長短不一,因此文字長度可以作為錯誤檢測的依據(jù)。其基本思想是: 對原始稿件每一行的五個文字計算相對高度,再對標記文本對應的五個文字同樣計算相對高度,最后計算兩個相對高度均方誤差ERR,如果ERR>0.015則報錯,并進一步人工核對。相對高度計算方法如式(1)所示,均方差如式(2)所示,文字長度如圖2所示。
圖1 手寫樣本
圖2 文本長度示例
MHW蒙古文脫機手寫字庫發(fā)布在https://sourceforge.net/projects/mongolian-hw/上,共包括六個文件。Trainset.mat是Matlab(ver:7.10.0.499 (R2010a))格式文件,存有訓練集手寫二值圖像,包含100 000個樣本。Trainset_label.txt是訓練集標記Unicode編碼文本文件,每行一個文字。Testset_Ⅰ.mat和Testset_Ⅱ.mat是測試集Ⅰ(5 000個樣本)和測試集Ⅱ(14 085個樣本)的數(shù)據(jù),Testset_Ⅰ_label.txt和Testset_Ⅱ_label.txt是對應標記文本。Mat文件讀入Matlab環(huán)境后獲得Cell結構,每個Cell單元中存有二維圖像信息。手寫圖像和標記文本按自然序號相互對應。
隱馬爾科夫模型(hidden Markov model, HMM)在手寫識別領域得到了廣泛的應用[12-13]。設HMM識別系統(tǒng)的輸出序列集L*由有限字符集S組成。例如輸出為Unicode序列時,S由蒙古文35個名義字符構成,輸出為形碼序列時,S由表1內容構成。任意字符s∈S由一個left-right結構HMM和高斯混合模型(Gaussian mixture model, GMM)描述。HMM用一個三元組λ={AμΣ}表示,其中A為轉移概率矩陣、μ為GMM均值、Σ為GMM方差。HMM作為生成模型,通過訓練調整{AμΣ}的值,使生成字符s所對應輸入序列的概率最大。
解碼時結合語言模型、字典數(shù)據(jù)和HMM模型構成解碼網(wǎng)絡,利用Viterbi算法由已知輸入序列(HMM觀察序列)計算最有可能HMM狀態(tài)序列并轉換成最終的識別序列。為了提高識別效果,通常對S中所有可能三因子組合a-b+c做HMM建模。
隨著深度學習模型的發(fā)展,神經(jīng)網(wǎng)絡和HMM的混合模型成功應用到了語音識別和手寫識別領域,并獲得了顯著效果[14-15]。深層神經(jīng)網(wǎng)絡(deep neural network, DNN)是前向深層網(wǎng)絡,每一層可看作是對前一層輸出數(shù)據(jù)的機器學習特征。HMM模型的一個缺點是假設觀察序列是相互獨立的,但在實際數(shù)據(jù)中這一假設不可能成立。
DNN-HMM混合模型的基本結構是用DNN網(wǎng)絡替換之前GMM-HMM模型的GMM部分,即用DNN網(wǎng)絡描述觀察序列概率分布情況。DNN輸入是一幀觀察序列xt(為了考慮前后序列的相關性,通常把左右若干幀同時作為輸入),輸出是該幀屬于各個HMM狀態(tài)的概率p(qt|xt)。但HMM模型中使用的觀察概率是已知狀態(tài)qt時生成各個幀的概率p(xt|qt)。利用貝葉斯公式可獲得:
(3)
其中p(qt|xt)是DNN輸出,p(xt)是數(shù)據(jù)幀先驗概率,可看作等概,p(qt)是HMM各個狀態(tài)的先驗概率,可通過統(tǒng)計DNN訓練數(shù)據(jù)獲得。
DNN屬于有監(jiān)督訓練,其標記信息是各幀對應HMM各個狀態(tài)的概率。這會產(chǎn)生一個悖論,即DNN的訓練需要提前知道各個幀的屬于每個HMM狀態(tài)的概率。反過來,DNN又要描述各個狀態(tài)的觀察序列概率分布。由于上述原因,我們需要先訓練GMM-HMM模型,用訓練好的模型生成DNN的標記信息,再訓練DNN模型,構成DNN-HMM結構。
循環(huán)神經(jīng)網(wǎng)絡(recurrent neural networks,RNN)的最初設計目的是處理序列數(shù)據(jù)。近年來特別是RNN的一種變體,長短期記憶網(wǎng)絡(long-short term memory,LSTM)顯示了強大的序列數(shù)據(jù)處理能力。Alex Graves等在LSTM輸出層后增加了connectionist temporal classification(CTC)層,解決了輸入輸出序列非對齊的訓練問題[16],從而使LSTM-CTC模型成功應用到了語音和手寫識別領域。
一個典型的二維多方向LSTM-CTC手寫識別模型如圖3所示。手寫圖像被1×4大小的塊按四種掃描方式掃描后輸入到4個獨立的LSTM節(jié)點,第一層LSTM輸出4個特征,并經(jīng)過子抽樣層降維合并后得到一個變換后的圖像。上述過程可以重復多次,第二層LSTM輸出20個特征,第三層輸出100個特征。第三層的LSTM經(jīng)過維度坍塌處理后輸入到CTC層。CTC本質上是一個Softmax分類層,每個節(jié)點的輸出代表當前幀對應字符s∈S′的概率,其中S′=S ∪ “blank”,“blank”代表空字符。顯然CTC層的節(jié)點個數(shù)為|S|+1。CTC層定義了特定的損失函數(shù),通過最小化損失函數(shù)使模型輸出正確序列的概率最大化。
我們利用MHW訓練集分別在Kaldi[17]和RNNLIB*https://sourceforge.net/projects/rnnl/環(huán)境下訓練了基于HMM和LSTM-CTC的手寫識別模型,并在測試集上評估了模型的性能,同時對Unicode和形碼序列的性能進行了比較。
無論HMM還是RNN模型,手寫圖像需要序列化后才能輸入到模型中。其中針對HMM模型,我們利用4×48(高×寬)大小的滑動窗口,從上到下滑窗(蒙古文從上到下書寫),幀重疊2像素。由于原始圖像各個維度相關性非常大,所以不利于直接訓練HMM模型。我們利用受限玻爾茲曼機(restricted Boltzmann machine, RBM)對窗口內的圖像進行降維處理,變成了16維向量。針對LSTM-CTC模型,圖像被1×4大小的塊多方向掃描,變成二維序列,并把原始圖像幀序列直接輸入到模型,讓其自動學習特征。
Kaldi是基于HMM的開源語音識別建模工具。利用Kaldi實現(xiàn)手寫識別需要準備特征數(shù)據(jù)文件(train.txt.ark)和標記文件(text)。由于Kaldi特征提取針對語音信號,所以我們在Matlab環(huán)境中實現(xiàn)了特征提取工作,并輸出了Kaldi文本格式ark文件。文本格式特征文件通過“copy-feats”命 令 轉 換成二進制格式特征文件(raw_mfcc_train.ark, feats.scp)。另一個非常重要的文件是lexicon.txt,其格式為“
圖3 深層LSTM-CTC結構
首先通過“steps/train_mono.sh”命令訓練單音素HMM系統(tǒng),其中 HMM模型選用三狀態(tài)left-right結構。實際訓練是在16-dim特征上加了一階差分和二階差分后構成了48-dim特征。再使用“utils/mkgraph.sh”命令把語言模型、lexicon.txt、HMM等結合生成解碼網(wǎng)絡。最后通過“steps/decode.sh”進行了解碼和性能評估。在單音素系統(tǒng)的基礎可進一步訓練上下文關聯(lián)的三音素HMM模型。先利用“steps/align_si.sh”獲取單音素系統(tǒng)下訓練數(shù)據(jù)幀和HMM狀態(tài)的對齊關系,再使用“steps/train_deltas.sh”訓練三音素系統(tǒng)。
在三音素系統(tǒng)的基礎上我們利用“build-pfile-from-ali”命令輸出了訓練DNN的標記文件。訓練DNN時當前幀和左右5個幀共11幀作為輸入,因此DNN的輸入層含528(11×48)個神經(jīng)元,四個隱含層包含1 024個神經(jīng)元,輸出層神經(jīng)元等于所有三音素HMM狀態(tài)數(shù)(這里是1 513個)。我們用PDNN工具[18]訓練了上述DNN結構,并把訓練好的DNN帶入到Kaldi代替原有的GMM。訓練前DNN參數(shù)被RBM無監(jiān)督模型逐層初始化,在訓練中學習率被設置為“D:0.08:0.5:0.05,0.05:8”,意為從0.08開始,當驗證集上錯誤率的改善不足0.05時,學習率降低一半,當連續(xù)8個循環(huán)錯誤率改善量不足0.05時訓練結束。
RNNLIB是訓練深層LSTM-CTC模型的開源工具,被廣泛應用于手寫和語音識別領域。首先要生成NetCDF格式訓練集(train.nc)和測試集文件(test1.nc,test2.nc)。NetCDF文件同時包含了訓練用手寫圖像信息和標記信息。創(chuàng)建描述模型和參數(shù)的文件(transcription.config),其中模型參數(shù)為“task transcription; hiddenType lstm; hiddenSize 2,10,50; subsampleSize 6,20; hiddenBlock 2,4;2,3; inputBlock 1,4;”,訓練參數(shù)“l(fā)earnRate 1e-4; momentum 0.9” 。RNNLIB本身不支持結合語言模型的解碼,所以這里我們使用了簡單的最佳路徑解碼方案,因此無需字典或語言模型。在RNNLIB的基礎上我們進行了基于字典的解碼方案,即根據(jù)CTC層輸出計算字典中每個詞的可能概率,選擇概率最大的字作為解碼輸出。
我們采用詞錯誤率(word error rate, WER)作為評測標準,實驗結果如表2所示。采用Unicode作為目標序列后性能明顯低于形碼系統(tǒng)。特別是單音素系統(tǒng),由于Unicode不表示形狀,因此單個HMM模型需要根據(jù)多種形狀進行訓練,因此性能特別差。采用三音素后Unicode也可以確定形狀,所以測試集的性能提升20%左右。加入DNN后HMM系統(tǒng)的性能得到了顯著提升,其原因是DNN考慮了上下文關系,同時有更好的魯棒性。LSTM-CTC系統(tǒng)中,由于采用最佳路徑,沒有加入字典和語言模型,所以詞錯誤率比較高。當加入和HMM系統(tǒng)相同的字典后,解碼性能達到了最佳。因為測試集Ⅰ和訓練集書寫者是同一群人,所以測試集Ⅰ的性能普遍高于測試集Ⅱ。
表2 實驗結果
本文發(fā)布了MHW蒙古文脫機手寫數(shù)據(jù)庫,并在三個常用手寫識別模型中驗證了MHW數(shù)據(jù)庫的性能?;谧值涞腖STM-CTC模型表現(xiàn)出了最佳性能,在測試集Ⅰ和測試集Ⅱ的WER分別達到了2.20%和5.55%。
雖然依據(jù)字典和語言模型解碼時HMM和LSTM-CTC都有不錯的表現(xiàn),但蒙古文詞匯量巨大且變形豐富。由于該特性蒙古文OOV問題比較嚴重,很難讓實際字典覆蓋全部蒙古文詞。后續(xù)工作中我們將重點研究無字典或字典輔助條件下手寫識別方法和OOV的解決途徑。
[1]Bao F, Gao G, Yan X, et al. Segmentation-based Mongolian LVCSR approach[C]//Proceedings of the IEEE International Conference on Acoustics, Speech and Signal Processing. IEEE, 2013:8136-8139.
[2]Gao G, Su X, Wei H, et al. Classical mongolian words recognition in historical document[C]//Proceedings of the 12th International Conference on Document Analysis and Recognition, 2011:692-697.
[3]Peng L, Liu C, Ding X, et al. Multi-font printed Mongolian document recognition system[J]. International Journal on Document Analysis and Recognition (IJDAR), 2010, 13(2):93-106.
[4]Zhang X Y, Bengio Y, Liu C L. Online and offline handwritten Chinese character recognition: A comprehensive study and new benchmark[J]. Pattern Recognition, 2016, 61(61):348-360.
[5]Wu Y C, Yin F, Liu C L. Improving handwritten chinese text recognition using neural network language models and convolutional neural network shape models[J]. Pattern Recognition, 2017, 65(C):251-264.
[6]Messina R, Louradour J. Segmentation-free handwritten Chinese text recognition with LSTM-RNN[C]//Proceedings of the International Conference on Document Analysis and Recognition. IEEE, 2015:171-175.
[7]趙繼印, 鄭蕊蕊, 吳寶春,等. 脫機手寫體漢字識別綜述[J]. 電子學報, 2010, 38(2):405-415.
[8]Marti U V, Bunke H. The IAM-database: an English sentence database for offline handwriting recognition[J]. International Journal on Document Analysis & Recognition, 2002, 5(1):39-46.
[9]Pechwitz M, Maddouri S S, Rgner V, et al. IFN/ENIT-database of handwritten Arabic words[C]//Proceedings of the Francophone International Conference on Writing and Document, Cifed’02, Hammamet, Tunisia. 2002:129-136.
[10]Biannebernard A L. The A2iA French handwriting recognition system at the Rimes-ICDAR2011 competition[C]//Proceedings of the Proceedings of SPIE - The International Society for Optical Engineering, 2012, 8297(1):82970Y-82970Y-8.
[11]Moysset B, Bluche T, Knibbe M, et al. The A2iA Multi-lingual text recognition system at the second maurdor evaluation[C]//Proceedings of the Frontiers in Handwriting Recognition (ICFHR), 2014 14th International Conference on. IEEE, 2014:297-302.
[12]Thomas S, Chatelain C, Heutte L, et al. A deep HMM model for multiple keywords spotting in handwritten documents[J]. Pattern Analysis and Applications, 2015, 18(4):1003-1015.
[13]Roy P P, Bhunia A K, Das A, et al. HMM-based Indic handwritten word recognition using zone segmentation[J]. Pattern Recognition, 2016(60):1057-1075.
[14]Li J, Yu D, Huang J T, et al. Improving wideband speech recognition using mixed-bandwidth training data in CD-DNN-HMM[C]//Proceedings of the Spoken Language Technology Workshop. IEEE, 2012:131-136.
[16]Graves A, Ndez S, Gomez F, et al. Connectionist temporal classification: labelling unsegmented sequence data with recurrent neural networks[C]//Proceedings of the International Conference on Machine Learning. ACM, 2006:369-376.
[17]Povey D, Ghoshal A, Boulianne G, et al. The Kaldi speech recognition toolkit[J]. Idiap, 2012.
[18]Miao Y. Kaldi+PDNN: Building DNN-based ASR systems with Kaldi and PDNN[J]. Computer Science, 2014.