郭利敏,葛 亮,劉悅?cè)?/p>
雖然OCR(Optical Character Recognition)技術(shù)在計算機視覺領(lǐng)域已有10多年,傳統(tǒng)OCR技術(shù)對現(xiàn)代印刷體的識別很成熟,但在古籍漢字的識別上還存在挑戰(zhàn)。由于古籍漢字屬于書法字體,筆畫并不像打印字體那樣橫平豎直,沒有固定模板匹配;不同作品書寫筆畫粗細不同、筆畫黏連;長期保存過程中還存在部分筆畫模糊與缺失現(xiàn)象;書法字形又承載著作者獨特書寫風(fēng)格,形態(tài)各異,給書法字識別帶來了困難。
近年,隨著深度學(xué)習(xí)技術(shù)在OCR 領(lǐng)域的應(yīng)用研究,將其用于現(xiàn)代手寫體漢字的識別已有非常多的成果。比如,IDSIA團隊首次將卷積神經(jīng)網(wǎng)絡(luò)運用到手寫體漢字的識別,在ICDAR-2011脫機手寫體漢字識別競賽中,其識別準確率達到92.18%[1];在ICDAR-2013聯(lián)機和脫機手寫體漢字識別競賽中,采用卷積神經(jīng)網(wǎng)絡(luò)模型方法對脫機手寫體漢字識別率達到了94.77%[2];最近的研究表明漢字的細微結(jié)構(gòu)特征對漢字的準確識別有很大的作用[3]。
長久以來,古籍文獻資源的數(shù)字化成果主要有古籍索引數(shù)據(jù)庫、古籍書目數(shù)據(jù)庫、古籍全文數(shù)據(jù)庫等三種類型,各種數(shù)據(jù)庫往往只是從古籍外部特征與主題內(nèi)容的角度對古籍文獻進行描述與組織,為全文文本數(shù)據(jù)庫提供檢索服務(wù)[4]。隨著數(shù)字人文的興起,數(shù)字人文為古籍?dāng)?shù)字化的深度開發(fā)提供了新的理論和實踐方法,在使得古籍語義分析、字頻統(tǒng)計、信息挖掘、智能標(biāo)點以及古文獻數(shù)字化地圖建設(shè)等成為可能的同時,也對數(shù)字化古籍的加工提出了新的要求。在數(shù)字人文古籍元數(shù)據(jù)從數(shù)字化到數(shù)據(jù)化的轉(zhuǎn)化加工過程中,對于古籍文本漢字的識別是最為基礎(chǔ)也是最重要的工作之一,但由于字庫的不完善、不規(guī)范和不統(tǒng)一等使得傳統(tǒng)的OCR技術(shù)識別古籍困難[5],使得這項工作一直以人工為主,而工作人員又必須具備一定的專業(yè)知識素養(yǎng),非常耗時費力。所以運用深度學(xué)習(xí)技術(shù)對特定樣本進行學(xué)習(xí)訓(xùn)練,并運用遷移學(xué)習(xí)的方式對古籍漢字進行識別,可以為數(shù)字人文古籍漢字的元數(shù)據(jù)加工提供一種可行的解決方案,旨在提高古籍資源在數(shù)字人文應(yīng)用研究中的效率。
一個卷積神經(jīng)網(wǎng)絡(luò)(CNN)通常是由一系列的卷積層和子采樣層以及1 個或多個全連接層組成。其中,卷積層用以從輸入圖片中提取圖片的特征信息,全連接層則用以將提取的特征信息進行分類。
本文通過構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)對特定的繁體字數(shù)據(jù)集進行特征學(xué)習(xí),并將訓(xùn)練結(jié)果用于預(yù)測古籍中的漢字。整個方法可分為三個步驟(見圖1)。
圖1 基于卷積神經(jīng)網(wǎng)絡(luò)的古籍漢字識別流程
步驟一:構(gòu)建訓(xùn)練集。運用漢字生成技術(shù),針對古籍漢字字形尋找相似的字體,同時運用數(shù)字圖像處理技術(shù)模擬真實情況下的古籍漢字圖片的噪聲,如筆畫模糊、筆畫缺失等現(xiàn)象構(gòu)建訓(xùn)練集。
步驟二:網(wǎng)絡(luò)模型的構(gòu)建與訓(xùn)練。設(shè)計卷積神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu),并在步驟一中構(gòu)建的訓(xùn)練集的基礎(chǔ)上進行學(xué)習(xí)訓(xùn)練。
步驟三:識別和結(jié)果分析。通過步驟二得到已訓(xùn)練好的深度學(xué)習(xí)網(wǎng)絡(luò),將從古籍圖片中切割出來的古籍漢字圖片(測試集)使用該網(wǎng)絡(luò)進行識別,結(jié)果分為“可識別”和“不可識別”兩類。標(biāo)注為“不可識別”的,表示機器無法對其進行識別或識別準確率非常低;標(biāo)注為“可識別”的,則表示機器可識別,同時會給出網(wǎng)絡(luò)的識別結(jié)果,再對此部分結(jié)果進行正確率的分析。
基于卷積神經(jīng)網(wǎng)絡(luò)的古籍漢字識別,其本質(zhì)就是通過深度學(xué)習(xí)的方式構(gòu)建一個漢字圖片與漢字字符的分類器,將輸入的漢字圖片通過卷積神經(jīng)網(wǎng)絡(luò)逐層提取圖片特征,得到各個分類漢字的概率,隨后選擇概率最高的一個分類作為目標(biāo)輸出,即識別結(jié)果。為了提高精確度,通常會使用閾值作為結(jié)果篩選的依據(jù),如公式1所示。
其中,P為目標(biāo)輸出的概率,T為閾值,當(dāng)概率大于等于閾值時才采用這個結(jié)果。然而閾值T通常是通過先驗知識和實驗對比選擇較好閾值,依賴主觀判斷,這種方式準確性較低、通用性較差。
因此,在設(shè)計網(wǎng)絡(luò)模型的時候特別增加一個“不可識別”的分類項,網(wǎng)絡(luò)可以將不確定的識別結(jié)果作為輸出項,達到動態(tài)閾值的結(jié)果,從而提高精確度。
充分的訓(xùn)練數(shù)據(jù)集是訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)的關(guān)鍵,然而真實數(shù)據(jù)樣本的采集和整理需要大量的人力去把握其規(guī)模和準確性。目前針對漢字手寫體的數(shù)據(jù)庫有北京郵電大學(xué)發(fā)布的HCL2000 脫機手寫數(shù)據(jù)庫[6]、國家863中文手寫評測數(shù)據(jù)[7]等,都是比較規(guī)范書寫的數(shù)據(jù)。相比而言,目前能表現(xiàn)真實書寫情況的手寫單字樣本數(shù)據(jù)庫有中國科學(xué)院發(fā)布的CASIA-OLHWDB1.0-1.2手寫單字樣本數(shù)據(jù)庫和CASIAHWDB1.0-1.2 文本行數(shù)據(jù)集[8],以及華南理工大學(xué)發(fā)布的涵蓋單字、詞組、文本行、數(shù)字、字母、符號等綜合手寫數(shù)據(jù)集SCUTCOUCH[9],但上述的數(shù)據(jù)集都集中在簡體漢字的標(biāo)準體或現(xiàn)代手寫體上,對于書法風(fēng)格的古籍漢字而言,無論是字形還是字體風(fēng)格都相距甚遠。
為避免在訓(xùn)練過程中出現(xiàn)“過擬合”(Over Fitting),提升CNN 模型的性能,也因為沒有找到合適的數(shù)據(jù)集進行模型訓(xùn)練,所以采用數(shù)據(jù)生成技術(shù)來構(gòu)建訓(xùn)練集。從不同字體中抽取字體并生成字體圖片,并結(jié)合圖像的平移、尺度縮放、旋轉(zhuǎn)、水平或垂直拉升、椒鹽噪聲、高斯噪聲等方法對圖形進行隨機變化和添加隨機噪聲,如圖2所示。
圖2 測試集中選取的有代表性的圖片
圖3 “度”字的部分訓(xùn)練樣本
通過圖2 對測試集的觀察,發(fā)現(xiàn)如下特點:(1)測試集的圖片格式大小不一,字形多樣。(2)從“煙”字可看到,部分圖片具有簡體和繁體兩種寫法。(3)從“送”和“七”字可以看出圖片的有缺失或者其他干擾噪聲。依據(jù)上述特點,選取10種不同的字體文件(其中包含細明體、黑體、宋體、隸屬、楷書等),每一個漢字分為簡體、繁體兩種,去重后共計有773 個目標(biāo)漢字(部分漢字簡、繁體相同),每一個漢字對于每一種字體施加隨機形變和隨機噪聲,生成的訓(xùn)練樣本如圖3所示。
經(jīng)過嘗試多種網(wǎng)絡(luò)結(jié)構(gòu),并在準確度、收斂速度等多方面綜合評估后,最終確定圖4的網(wǎng)絡(luò)結(jié)構(gòu)。網(wǎng)絡(luò)結(jié)構(gòu)由7個卷積層和3個全連接層組成,其中表示卷積層的卷積核大小為卷積步長為y;表示池化層(max-pooling)的大小為步長為y;表示填充層(padding),在圖像邊界填充x 個像素點,“#Class”表示目標(biāo)分類的個數(shù),本文共計773個漢字(包含簡繁體)以及“不可識別”分類,所以“#Class”為774個。
圖4 卷積神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)
測試樣本均來自上海圖書館主頁(www.library.sh.cn)的“我的圖書館系統(tǒng)”登錄驗證碼所用圖片(圖片均源自“盛宣懷檔案”)。如圖5所示,我們對每張圖片進行人工標(biāo)注,并做了二次審核以保證標(biāo)注的正確性,其中共有660 個字1213張圖片。由圖2可知,由于測試集的圖片形狀格式不一,所以我們需要對測試集進行預(yù)處理,使其成為統(tǒng)一大小的灰度圖片。處理結(jié)果如圖6所示。通過預(yù)處理不僅把原始圖片調(diào)整為統(tǒng)一大小,還能在一定程度上抑制原始圖像的背景噪聲。
圖5 “我的圖書館”登錄驗證碼界面
圖6 測試集預(yù)處理前后對比
由于計算資源有限(僅一塊NVIDIA GeForce 1080 Ti顯卡來做GPU 運算)。為了減少運算量,選取48*48大小的圖片作為CNN 網(wǎng)絡(luò)模型的輸入,在小規(guī)模數(shù)據(jù)集上嘗試構(gòu)建多種網(wǎng)絡(luò)結(jié)構(gòu),從收斂速度以及準確率兩方面進行評估后,最后選定圖5的結(jié)構(gòu)作為本次實驗的最優(yōu)結(jié)構(gòu),進行大規(guī)模的訓(xùn)練和實際樣本的測試。
目標(biāo)漢字共計773個,用于生成訓(xùn)練樣本的字體文件共計10個(包含TTF和TTC格式),共計20種字體,每個字每一種字體生成160帶有隨機噪聲的樣本。所以整體的訓(xùn)練樣本數(shù)量約為160*10*2*773=2473600 個樣本,由于部分字體并沒有包含繁寫體,所以最終生成的訓(xùn)練樣本比上述值少些。
為評估實驗結(jié)果,引入兩個評價指標(biāo):準確率(Accuracy)和精確率(Precision)。
準確率(Racc)是:對于給定的測試數(shù)據(jù)集,正確識別的樣本數(shù)(Sright)與總樣本數(shù)(Stotal)之比。準確率可反應(yīng)卷積神經(jīng)網(wǎng)絡(luò)對預(yù)測樣本整體的識別能力。
精確率(Rprecision)是:對給定的測試數(shù)據(jù)集,正確識別的樣本數(shù)(Rright)與識別出的樣本數(shù)量(Rright+Rerror)之比。精確率可反應(yīng)卷積神經(jīng)網(wǎng)絡(luò)的預(yù)測結(jié)果的可靠程度,在準確率較難提升的情況下,通過提升精確率使得網(wǎng)絡(luò)的實際運用更好,系統(tǒng)更可靠。
對上述訓(xùn)練樣本在圖5 的模型結(jié)構(gòu)于TensorFlow平臺上進行20訓(xùn)練輪迭代后做了相應(yīng)測試,結(jié)果見表1。
表1 識別結(jié)果
其中,Runknow為無法識別樣本。通過公式(2)與公式(3)計算所得:
由于訓(xùn)練集對模型識別的結(jié)果影響較大,特地在原有樣本基礎(chǔ)上,新增王羲之書法字體和顏體書法字體,通過字體生成技術(shù)生成單字160個不同的樣本,見圖7。同樣進行20 輪迭代訓(xùn)練后,得出的測試結(jié)果如表2所示??梢?,增加字體樣本后未識別樣本降低,整體的準確率有所提升。所以,訓(xùn)練樣本字體的多樣性有助于提升CNN網(wǎng)絡(luò)的識別率。可以通過將古籍中的漢字切割、標(biāo)注、預(yù)處理后構(gòu)建訓(xùn)練樣本,以此提高樣本的多樣性,進而提升識別性能。
圖7 新增王羲之、顏真卿字體
表2 增加樣本前后測試準確度對比
圖8 預(yù)處理前后樣本對比
如前文圖1所示,模型對圖片的結(jié)果識別分為“可識別樣本”和“不可識別樣本”兩類,其中可識別樣本包括識別正確樣本和識別錯誤樣本。在對錯誤樣本和不可識別樣本進行分析后,得到幾個導(dǎo)致識別錯誤的原因。
(1)圖片預(yù)處理導(dǎo)致的失真問題。雖然把原始圖片轉(zhuǎn)換成灰度圖,一定程度上降低了背景噪聲,但程序批量處理使部分樣本在轉(zhuǎn)換后失真嚴重,如圖8所示。這種情況是由于缺少相應(yīng)的訓(xùn)練樣本使得機器將其識別為“不可識別樣本”。雖然降低模型的正確率,但對精確率有一定的提升。
(2)相近字體導(dǎo)致的識別錯誤。在識別錯誤結(jié)果中,部分是相近字形導(dǎo)致的識別錯誤。如圖9所示,將文件名第一個字符表示此圖片標(biāo)注的漢字,第二個為卷積神經(jīng)網(wǎng)絡(luò)識別的漢字,可見由于手寫體字形的多樣性和不確性使得網(wǎng)絡(luò)將其識別成為其他相似字。如“化”字,由于連筆產(chǎn)生的多余信息被識別為“他”字。因此,對卷積神經(jīng)網(wǎng)絡(luò)來說,如何提升筆畫細節(jié)的識別能力非常重要,也是提高準確度的關(guān)鍵。
圖9 相近字體識別錯誤樣例
(3)簡繁體識別錯誤。在校驗識別結(jié)果后,發(fā)現(xiàn)有部分繁體字被識別成為簡體字,共計27個樣本,占比約10%。由于在訓(xùn)練集中,簡、繁體字被定義成為兩個不同的樣本,對于這樣的結(jié)果目前無法解釋,需要增加測試樣本作進一步探究,但通過建立簡繁體映射表則可解決此問題。錯誤樣例見圖10。
(4)其他錯誤。對其余一些識別錯誤的樣本,很難找到具體的原因,但通過提升網(wǎng)絡(luò)對筆畫細節(jié)的識別能力,以及提升網(wǎng)絡(luò)對不可識別漢字的判斷能力,可降低這部分錯誤的出現(xiàn)率,進而提升網(wǎng)絡(luò)識別的精確率。
圖10 簡繁字體識別錯誤樣例
古籍的元數(shù)據(jù)文本加工是數(shù)字人文研究中最重要也是工作量最大的基礎(chǔ)工作之一,它有著工作量大、專業(yè)性強的特點,一直以來都是以人工識別為主,耗時費力。本文構(gòu)建了卷積神經(jīng)網(wǎng)絡(luò)模型,通過數(shù)據(jù)生成技術(shù)生成古籍漢字圖片作為訓(xùn)練集,并在TensorFlow 平臺上訓(xùn)練后,用于數(shù)字化古籍漢字的識別,該方法可用于輔助古籍漢字的元數(shù)據(jù)加工工作。下一步將繼續(xù)擴大訓(xùn)練集,并結(jié)合標(biāo)注漢字圖片進行模型結(jié)構(gòu)和訓(xùn)練集合的調(diào)整,進一步提高其識別率。
對圖書館而言,由于圖書館學(xué)自身專業(yè)的定位,使得圖書館行業(yè)內(nèi)計算機、數(shù)學(xué)相關(guān)的專業(yè)背景的人才相對較少,類似于傳統(tǒng)的OCR 這種需要大量計算機和數(shù)學(xué)背景知識專業(yè)應(yīng)用,對于圖書館而言,大多都依賴其他行業(yè)的應(yīng)用成果。但對于卷積神經(jīng)網(wǎng)絡(luò)這類深度學(xué)習(xí)的應(yīng)用,使得之前需要花費大量時間盡力進行的特征編碼、算法設(shè)計等相對復(fù)雜的設(shè)計變得非常簡單,在網(wǎng)絡(luò)模型既定的情況下,通過調(diào)整訓(xùn)練集就可以得到一個更適合于圖書館應(yīng)用場景的結(jié)果。圖書館恰好有著大量的行業(yè)數(shù)據(jù)積累,圖書館館員也具有對這部分數(shù)據(jù)整理歸納的能力,所以深度學(xué)習(xí)相對于傳統(tǒng)計算機算法處理而言,是一個更適合于圖書館的應(yīng)用方案。