武慧娟,范道爾吉,白鳳山,滕 達(dá),潘月彩
(內(nèi)蒙古大學(xué) 電子信息工程學(xué)院,內(nèi)蒙古 呼和浩特 010021)
拼音文字(如英文、阿拉伯文和蒙古文等)脫機(jī)手寫識(shí)別任務(wù)通常有兩部分: 一是用識(shí)別模型將輸入單詞或文本行手寫圖像映射成可能的字符序列;二是用語(yǔ)言模型約束所預(yù)測(cè)字符序列,使其為有效文字[1]。對(duì)于序列數(shù)據(jù)用循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network, RNN)模型加連接時(shí)序分類器(Connectionist Temporal Classification, CTC),或用編解碼器模型(Encoder -Decoder Model)加注意力機(jī)制(Attention Model,AM)處理是目前較為常用的方法[2-3]。一些傳統(tǒng)RNN模型的特別形式,如長(zhǎng)短時(shí)記憶網(wǎng)絡(luò)(Long Short-Term Memory, LSTM)、多方向長(zhǎng)短時(shí)記憶網(wǎng)絡(luò) (Multidirectional Long Short Term Memory,MDLSTM)、二維長(zhǎng)短時(shí)記憶網(wǎng)絡(luò)(Two-dimensional Long Short Term Memory,2DLSTM)等,在各類文字的脫機(jī)文本行識(shí)別中取得了較好的效果[4-6]。還有一些研究將卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)和RNN模型相結(jié)合實(shí)現(xiàn)手寫識(shí)別任務(wù)。其中,CNN主要負(fù)責(zé)特征提取,RNN負(fù)責(zé)序列映射[7]。
目前,在蒙古文文字識(shí)別研究領(lǐng)域中,多數(shù)直接采用蒙古文的Unicode編碼作為目標(biāo)編碼[8-11]。但由于蒙古文Unicode編碼只表示名義字符,不能唯一映射到固定字形,所以對(duì)識(shí)別準(zhǔn)確率的提高有一定的消極影響,文獻(xiàn)[12-13]的實(shí)驗(yàn)結(jié)果也驗(yàn)證了該現(xiàn)象。文獻(xiàn)[14]首次提出了蒙古文的字素碼,并用字素碼作為手寫識(shí)別模型的中間碼獲得了較好的效果。然而在蒙古文中,字素碼的劃分方式?jīng)]有標(biāo)準(zhǔn)可言,從不同尺度可以有不同的劃分方法。基于蒙古文該特點(diǎn),本文提出了多尺度蒙古文脫機(jī)手寫識(shí)別方法,即先把蒙古文看作由較大字符構(gòu)成,之后再把每個(gè)較大的字符看作由中等字符構(gòu)成,最后把中等字符再看作由更小的字素構(gòu)成,并把該過程加入到模型中,使得模型更加容易學(xué)習(xí)到圖像到編碼的映射和蒙古文的構(gòu)詞規(guī)則。文中提出的多尺度模型在公開的蒙古文脫機(jī)手寫數(shù)據(jù)集MHW上表現(xiàn)出了最佳性能。
蒙古文和英文類似,也屬于拼音文字,但書寫蒙古文時(shí)字符需無縫連寫,且同一個(gè)字符在詞首、詞中和詞尾有不同的變形。根據(jù)不同角度,蒙古文可劃分成不同的字符,主要有: 傳統(tǒng)“十二字頭”分析法、字素分析法和元音輔音分析法[15]。傳統(tǒng)“十二字頭”分析法是蒙古文識(shí)字教學(xué)中使用的方法,它將一個(gè)完整音節(jié)看作一個(gè)字符,因此在該分析法中字符數(shù)多達(dá)幾百個(gè)。在字素分析法中,將蒙古文從圖形角度分解成一個(gè)一個(gè)最小單位,每個(gè)單位看作一個(gè)字符,因此該方法中字符數(shù)非常少。在元音輔音分析法中,根據(jù)語(yǔ)言學(xué)角度定義了7個(gè)元音字符和25個(gè)輔音字符,并把元音輔音字符的各種變體都看作一個(gè)字符。
本文中,在傳統(tǒng)“十二字頭”字符基礎(chǔ)上,再加入獨(dú)立輔音的詞首、詞中和詞尾的所有變形,并消除重復(fù)字形后,定義了“十二字頭”分解方式,共包含382個(gè)字符,如圖2所示?!笆诸^”分解所形成的382個(gè)字符,涵蓋了國(guó)家標(biāo)準(zhǔn)GB/T 26226-2010中“表6 蒙古文強(qiáng)制性合體字符表”的所有字符[16]。
圖2 “十二字頭”碼
圖3 變形顯現(xiàn)碼
文獻(xiàn)[14]中提出一種“字素碼”分解方案,共包含51個(gè)字符,如圖4所示。其主要思路是把蒙古文字符分解成更小的不可分割單元。從語(yǔ)法角度看,每個(gè)字素不再具備任何語(yǔ)法意義,因此字素碼更多的是從圖形角度把蒙古文分成了相互獨(dú)立的多個(gè)字符。
圖4 字素碼
“一個(gè)蒙古文單詞由哪幾個(gè)字符組成?”這是一個(gè)不能明確回答的問題,從不同角度可以有不同的分解方法。一個(gè)蒙古文單詞,首先可以分解成“十二字頭”碼,其次可將每個(gè)“十二字頭”碼再分解成變形顯現(xiàn)碼,最后再將變形顯現(xiàn)碼進(jìn)一步分解成字素碼,如圖1所示。由于蒙古文的上述三種分解方式有從大到小的逐級(jí)映射關(guān)系,所以本文提出了一種多尺度識(shí)別模型,即將一個(gè)訓(xùn)練樣本依次映射到三種目標(biāo)序列,用三個(gè)CTC損失函數(shù)同時(shí)約束模型進(jìn)行訓(xùn)練,如圖5所示。整個(gè)模型由多個(gè)雙向LSTM層、三個(gè)全連接層和三個(gè)CTC層組成。通過滑動(dòng)窗口序列化后的手寫圖像訓(xùn)練樣本序列送入雙向LSTM進(jìn)行序列數(shù)據(jù)變換,之后LSTM輸出經(jīng)過第一個(gè)全連接層,將每個(gè)序列映射到“十二字頭”目標(biāo)序列,因此第一個(gè)全連接層有383(多一個(gè)空字符blank)個(gè)神經(jīng)元。第一個(gè)全連接層的輸出經(jīng)過ReLU變換后送入第二個(gè)全連接層。第二個(gè)全連接層將“十二字頭”目標(biāo)序列映射到變形顯現(xiàn)目標(biāo)序列,擁有133個(gè)神經(jīng)元。同理,最后一個(gè)全連接層擁有52個(gè)神經(jīng)元,實(shí)現(xiàn)變形顯現(xiàn)序列到字素碼的映射。訓(xùn)練時(shí),第一個(gè)全連接層的輸出經(jīng)過Softmax歸一化后送入CTC層來計(jì)算與“十二字頭”標(biāo)簽的損失。同理,第二個(gè)全連接層計(jì)算與變形顯現(xiàn)標(biāo)簽的損失,第三個(gè)全連接層計(jì)算與字素碼標(biāo)簽的損失。最后總損失由三個(gè)CTC損失的累加和構(gòu)成。
圖5 多尺度模型BiLSTMMultiCTC
深度學(xué)習(xí)模型本身就是從低級(jí)特征逐漸學(xué)習(xí)高級(jí)特征的過程,而圖5所示的模型通過多層的監(jiān)督學(xué)習(xí),可以讓模型更容易學(xué)習(xí)到蒙古文各級(jí)別的特征和構(gòu)詞過程。模型做預(yù)測(cè)時(shí),輸入一個(gè)手寫樣本圖像,可以從三個(gè)CTC層同時(shí)獲取三種不同尺寸的預(yù)測(cè)序列。因此可以使用任意一個(gè)或多個(gè)做后續(xù)的單詞識(shí)別。
為了驗(yàn)證本文提出的多尺度蒙古文脫機(jī)手寫識(shí)別模型,借助公開的蒙古文脫機(jī)手寫數(shù)據(jù)集MHW,實(shí)現(xiàn)了模型的訓(xùn)練和測(cè)試,并在最佳路徑解碼方式下比較了測(cè)試集Ⅰ和測(cè)試集Ⅱ上的平均字符錯(cuò)誤數(shù)(Average Char Error Count, ACEC)和單詞錯(cuò)誤率(Word Error Rate, WER)。其中ACEC由預(yù)測(cè)序列和目標(biāo)序列間的編輯距離來表示。
MHW數(shù)據(jù)集的標(biāo)注是用蒙古文Unicode編碼表示的簡(jiǎn)單的文字Label信息。而本文中需要“十二字頭”碼“變形顯現(xiàn)碼”和“字素碼”等三種Label信息,因此需借助文獻(xiàn)[13]提出的轉(zhuǎn)換算法進(jìn)行自行轉(zhuǎn)換。轉(zhuǎn)換時(shí),先實(shí)現(xiàn)Unicode編碼蒙古文到“十二字頭”碼的轉(zhuǎn)換,之后用規(guī)則直接將每個(gè)“十二字頭”碼拆解成“變形顯現(xiàn)碼”和“字素碼”即可。MHW中的手寫文字圖像已經(jīng)被預(yù)處理,圖像寬度被調(diào)整到了固定的48像素,高度自適應(yīng)。圖像序列化時(shí)采用了2×48大小的滑動(dòng)窗口,幀移為1像素,所以一幀數(shù)據(jù)為96維向量。
本實(shí)驗(yàn)在開源機(jī)器學(xué)習(xí)框架Pytorch下,利用Python語(yǔ)言實(shí)現(xiàn)了傳統(tǒng)的雙向LSTM+CTC模型(BiLSTMT+CTC)和雙向LSTM+多尺度CTC模型(BiLSTM Multi+CTC)。其中LSTM層數(shù)和隱層神經(jīng)元數(shù)是需要調(diào)節(jié)的超參數(shù)。超參數(shù)的調(diào)整采用了簡(jiǎn)單的搜索策略,其中搜索的LSTM隱含層神經(jīng)元數(shù)分別為64、128和256,層數(shù)分別為1、2和3層。其他超參數(shù)采用了經(jīng)驗(yàn)值,其中學(xué)習(xí)率為1e-4、優(yōu)化算法為動(dòng)量批量梯度下降,動(dòng)量值為0.9,批量大小為128。模型訓(xùn)練時(shí)取MHW訓(xùn)練集90%作為訓(xùn)練集,剩余的10%作為驗(yàn)證集。每次迭代結(jié)束后,保存當(dāng)前模型并計(jì)算驗(yàn)證集上的損失值,根據(jù)驗(yàn)證集上的損失選取最優(yōu)模型,并用最優(yōu)路徑解碼算法在測(cè)試Ⅰ和測(cè)試集Ⅱ上進(jìn)行評(píng)估,其結(jié)果如表1和表2所示。表1結(jié)果表示隱層神經(jīng)元為128時(shí)性能最優(yōu)。當(dāng)層數(shù)從2增加到3時(shí),性能的提升已經(jīng)不再明顯,為了使模型參數(shù)更少,模型層數(shù)選定為2。
表1 LSTM隱層神經(jīng)元個(gè)數(shù)搜索實(shí)驗(yàn)結(jié)果
表2 LSTM層數(shù)搜索實(shí)驗(yàn)結(jié)果
在相同的訓(xùn)練集、測(cè)試集和模型參數(shù)下,分別以 “十二字頭”碼、變形顯現(xiàn)碼和字素碼為目標(biāo)訓(xùn)練了三個(gè)BiLSTM+CTC模型,又訓(xùn)練一個(gè)如圖5所示BiLSTMMulti+CTC模型,結(jié)果如表3所示。在BiLSTM+CTC模型中,字素碼作為目標(biāo)序列時(shí),在測(cè)試集Ⅰ和測(cè)試集Ⅱ上都表現(xiàn)出了最佳性能,其次是變形顯現(xiàn)碼,性能幾乎和字素碼接近?!笆诸^”碼測(cè)試集Ⅰ上與其他兩個(gè)編碼相近,但在測(cè)試集Ⅱ上WER高出了將近2%。這表明用較大字符做目標(biāo)識(shí)別碼,其魯棒性不如較短的編碼。
表3 實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)結(jié)果表明,在BiLSTM Multi+CTC模型中三種目標(biāo)序列的性能趨于一致,WER指標(biāo)上字素碼略微優(yōu)于另外兩個(gè)編碼。兩個(gè)模型對(duì)比時(shí),“十二字頭”碼WER指標(biāo)在測(cè)試集Ⅰ上降低了3.06%、測(cè)試集Ⅱ上降低了4.31%;變形顯現(xiàn)碼分別降低了3.16%和1.96%;字素碼分別降低了3.16%和2.28%,如圖6和圖7所示。這表明BiLSTM Multi+CTC模型普遍優(yōu)于BiLSTM+CTC。兩個(gè)模型上,測(cè)試集Ⅰ的錯(cuò)誤率低于測(cè)試集Ⅱ,這應(yīng)該是測(cè)試集Ⅰ的書寫者與訓(xùn)練集一致的原因?qū)е碌摹?/p>
圖6 測(cè)試集Ⅰ上WER對(duì)比
圖7 測(cè)試集Ⅱ上WER對(duì)比
為了進(jìn)一步驗(yàn)證多尺度效果,從圖5所示模型中,分別去除了“十二字頭”碼CTC層和變形顯現(xiàn)碼CTC層,以及同時(shí)去除了該兩層,并以字素碼CTC層為輸出進(jìn)行了對(duì)比實(shí)驗(yàn),結(jié)果如表4所示。實(shí)驗(yàn)結(jié)果表明,同時(shí)消除第1層和第2層CTC時(shí)性能變得最差,消除第2層CTC的性能略優(yōu)于消除第1層CTC模型,但消融后的模型性能普遍差于原模型。
表4 多尺度消融實(shí)驗(yàn)結(jié)果
另外,本節(jié)還將BiLSTM Multi+CTC模型與幾個(gè)已經(jīng)公開的蒙古文脫機(jī)手寫識(shí)別模型進(jìn)行了橫向比較。文獻(xiàn)[12]中,提出了基于二維LSTM-CTC (2DLSTM+CTC)模型的脫機(jī)手寫識(shí)別方法,并用MHW數(shù)據(jù)集、字素碼和最佳路徑解碼方法評(píng)估了模型性能。文獻(xiàn)[11]首次提出了基于編解碼器+注意力機(jī)制(EnDe+Attn)的蒙古文脫機(jī)手寫識(shí)別方法,并利用MHW數(shù)據(jù)集訓(xùn)練了模型。但該模型使用的目標(biāo)序列是Unicode編碼,且解碼采用了字典搜索策略,所以文中結(jié)果無法與BiLSTM Multi+CTC模型直接進(jìn)行對(duì)比。為此,本節(jié)按文獻(xiàn)[11]的模型,以字素碼為目標(biāo)序列,復(fù)現(xiàn)了實(shí)驗(yàn)過程,并用最佳路徑解碼方法評(píng)估了模型性能。由于上述兩個(gè)對(duì)比模型中都以字素碼為目標(biāo)序列,因此這里只取BiLSTMMulti+CTC模型的字素碼結(jié)果與上述兩個(gè)模型進(jìn)行了比較,其結(jié)果如表5所示。
表5 橫向?qū)Ρ葘?shí)驗(yàn)結(jié)果
實(shí)驗(yàn)結(jié)果表明,BiLSTM Multi+CTC模型普遍優(yōu)于2DLSTM+CTC和EnDe+Attn模型,其測(cè)試集Ⅰ上WER降低了8.4%左右,測(cè)試集Ⅱ上降低了5.5%左右。
表6 字素碼識(shí)別正確與錯(cuò)誤樣例
表7 變形顯現(xiàn)碼識(shí)別正確與錯(cuò)誤樣例
續(xù)表
表8 “十二字頭”碼識(shí)別正確與錯(cuò)誤樣例
用變形顯現(xiàn)碼做Label時(shí), 13個(gè)樣本識(shí)別正確,兩個(gè)樣本識(shí)別錯(cuò)誤。其中樣本9和13依然被錯(cuò)誤識(shí)別,但樣本8被正確識(shí)別了。
本文根據(jù)蒙古文的構(gòu)詞特點(diǎn),提出了全新的多尺度蒙古文脫機(jī)手寫識(shí)別模型BiLSTM Multi+CTC,并在公開數(shù)據(jù)集MHW上表現(xiàn)出了目前最優(yōu)的性能。本文中,為了更加公平地比較模型本身的性能,采用了最佳路徑解碼方法。而實(shí)際應(yīng)用中,解碼時(shí)可以結(jié)合詞典或語(yǔ)言模型進(jìn)一步提高識(shí)別準(zhǔn)確率。
文中提出的多尺度模型不僅適用于蒙古文,而且對(duì)具有相似特性的所有黏著語(yǔ)都具有借鑒作用。