(長(zhǎng)江大學(xué)電子信息學(xué)院,湖北 荊州 434023)
當(dāng)前,醫(yī)院里存在大量的紙質(zhì)醫(yī)療發(fā)票,作為醫(yī)院結(jié)算費(fèi)用的重要統(tǒng)計(jì)信息,這些票據(jù)需要入庫(kù)存儲(chǔ)。而傳統(tǒng)的人工錄入方式需要花費(fèi)很多時(shí)間,成本高,錯(cuò)誤率也較高,是醫(yī)療產(chǎn)業(yè)中的一個(gè)薄弱環(huán)節(jié)。隨著光學(xué)字符識(shí)別(OCR)技術(shù)在模式識(shí)別領(lǐng)域不斷的發(fā)展,其識(shí)別率有了很大程度的提高,能夠快速準(zhǔn)確地識(shí)別醫(yī)療發(fā)票中的文本信息,在發(fā)票的自動(dòng)識(shí)別與入庫(kù)中起關(guān)鍵作用。截止目前,主要的文本識(shí)別方法有模板匹配法和幾何特征抽取法等,這些識(shí)別方法均有一定的局限性,導(dǎo)致識(shí)別精度較低,
圖1 CNN-RNN識(shí)別原理框圖
尤其在有噪聲的情況下識(shí)別效果更差。醫(yī)療機(jī)構(gòu)為了節(jié)約成本,發(fā)票中的待識(shí)別信息都是采用針式打印機(jī)來(lái)打印的,這些針式打印的文字中存在斷點(diǎn),使用傳統(tǒng)方法時(shí)識(shí)別精度低,一般的文本識(shí)別[1]方法不再適用。為此,筆者結(jié)合數(shù)字圖像處理技術(shù)與深度學(xué)習(xí)方法[2]來(lái)識(shí)別醫(yī)療發(fā)票中的針式打印文本信息。
醫(yī)療發(fā)票識(shí)別的原理框圖如圖1所示,識(shí)別的具體過(guò)程主要包含3個(gè)模塊,分別為CNN單字符識(shí)別模塊、RNN語(yǔ)義修正模塊[3]以及醫(yī)療發(fā)票圖像處理模塊。
CNN單字符識(shí)別模塊是利用CNN[4]擅長(zhǎng)于從二維圖像中提取特征的優(yōu)勢(shì)來(lái)提取單字符圖像的個(gè)性特征,從而實(shí)現(xiàn)針式打印醫(yī)療發(fā)票中單個(gè)字符的識(shí)別。
RNN語(yǔ)義修正[5]模塊則是根據(jù)循環(huán)神經(jīng)網(wǎng)絡(luò)在時(shí)序信息處理方面的優(yōu)勢(shì)來(lái)實(shí)現(xiàn)醫(yī)學(xué)術(shù)語(yǔ)的語(yǔ)義檢測(cè)與修正,已獲得更理想的針式打印醫(yī)療發(fā)票識(shí)別率,其基本原理是:RNN網(wǎng)絡(luò)中的每個(gè)神經(jīng)元都擁有記憶功能,且每個(gè)神經(jīng)元之間可以實(shí)現(xiàn)信息的傳遞,同時(shí)也能夠更深層次地揭示數(shù)據(jù)間隱藏的信息,適合于處理時(shí)序信息。
醫(yī)療發(fā)票圖像處理模塊主要通過(guò)數(shù)字圖像處理技術(shù)將針式打印的發(fā)票中的文字圖像處理成卷積神經(jīng)網(wǎng)絡(luò)能夠識(shí)別的單字符圖像,醫(yī)療發(fā)票圖像處理的基本流程為:首先通過(guò)圖像采集設(shè)備采集到一張?jiān)嫉尼樖酱蛴♂t(yī)療發(fā)票圖像,為了得到分辨率較高的醫(yī)療發(fā)票圖像,原始的發(fā)票圖像需要進(jìn)行預(yù)處理操作;為了讓卷積神經(jīng)網(wǎng)絡(luò)能夠識(shí)別發(fā)票中的文字信息,還需要將預(yù)處理得到的發(fā)票圖像中的文字切割為單個(gè)字符圖像,再將單個(gè)字符圖像交給卷積神經(jīng)網(wǎng)絡(luò)來(lái)識(shí)別。
基于CNN-RNN模型的醫(yī)療發(fā)票識(shí)別方法的具體流程圖如圖2所示。
圖2 發(fā)票識(shí)別具體流程圖
醫(yī)療機(jī)構(gòu)為了節(jié)約成本,使用針式打印機(jī)來(lái)完成醫(yī)療發(fā)票的打印,使得發(fā)票中待識(shí)別信息中的文字存在斷點(diǎn),其分辨率較低,且發(fā)票采集過(guò)程中存在偏差,導(dǎo)致采集到的發(fā)票存在傾斜等問(wèn)題,不便于識(shí)別。為了提高發(fā)票中針式打印信息的識(shí)別率,有必要對(duì)采集到的原始發(fā)票圖像做預(yù)處理操作。其預(yù)處理具體包括:發(fā)票圖像的校正、灰度化處理、閾值分割去噪、斷點(diǎn)處理等,其中,灰度化處理將彩色的醫(yī)療發(fā)票圖像變?yōu)閱瓮ǖ缊D像,便于后面的閾值分割去噪;斷點(diǎn)處理的核心是對(duì)圖像進(jìn)行高斯模糊與圖像增強(qiáng)操作,以消除文字中的斷點(diǎn)。經(jīng)過(guò)預(yù)處理操作后,發(fā)票中待識(shí)別部分的信息被保留下來(lái),且發(fā)票中的字符中不再有斷點(diǎn),即得到一張分辨率較高的單通道圖像,最后進(jìn)行單字符切割操作,得到待識(shí)別的單字符圖像。發(fā)票圖像處理的基本流程如圖3所示,而斷點(diǎn)處理前后的對(duì)比圖如圖4所示。
圖3 發(fā)票圖像處理流程圖
圖4 斷點(diǎn)處理前后的文字圖像對(duì)比圖
對(duì)于針式打印醫(yī)療發(fā)票識(shí)別,通常是將發(fā)票圖像中的文字信息轉(zhuǎn)化成方便信息查詢和和存儲(chǔ)的文本信息[6],首先通過(guò)醫(yī)療發(fā)票圖像處理模塊得到分辨率較高的單個(gè)字符圖像,再利用卷積神經(jīng)網(wǎng)絡(luò)強(qiáng)大的特征提取優(yōu)勢(shì)從單字符圖像中提取出字符的特征并實(shí)現(xiàn)單個(gè)字符的識(shí)別,最后將CNN識(shí)別得到的語(yǔ)段輸入到RNN網(wǎng)絡(luò)中進(jìn)行醫(yī)學(xué)術(shù)語(yǔ)的語(yǔ)義檢測(cè)與修正,從而得出最終的發(fā)票信息識(shí)別結(jié)果。
CNN屬于深度神經(jīng)網(wǎng)絡(luò)中的網(wǎng)絡(luò)模型之一,在二維圖像處理中取得了顯著的成果,隱藏層由卷積層和池化層交替構(gòu)成的多個(gè)卷積池化小單元組成,具體有多少個(gè)這樣的卷積池化小單元?jiǎng)t根據(jù)具體處理問(wèn)題的復(fù)雜程度決定[7]。CNN的網(wǎng)絡(luò)結(jié)構(gòu)圖如圖5所示。
圖5 CNN結(jié)構(gòu)示意圖
CNN中卷積池化小單元是由一個(gè)卷積層、一個(gè)激活函數(shù)層、一個(gè)池化層和批量歸一化層構(gòu)成,其卷積層中的每個(gè)神經(jīng)元與前一層的局部感受區(qū)域相連來(lái)提取特征,然后通過(guò)激活函數(shù)得到該層的特征圖,激活函數(shù)層的作用是為了增加神經(jīng)網(wǎng)絡(luò)模型的非線性,從而使提取到的特征具有位移不變性,還可以降低計(jì)算機(jī)的內(nèi)存占用。卷積運(yùn)算的計(jì)算公式為:
(1)
式中:l代表卷積層所在的層數(shù);k為卷積核;b為偏置大??;Mj表示選擇的輸入特征圖組合;f是激活函數(shù)。池化層也稱為下采樣層,作用是對(duì)卷積層得到的特征圖進(jìn)行降維處理,以簡(jiǎn)化卷積層輸出的特征,便于后續(xù)處理。最后的批量歸一化層使得網(wǎng)絡(luò)可以快速收斂,以加速網(wǎng)絡(luò)模型的訓(xùn)練。
筆者比較了多個(gè)CNN模型,最后選擇Alexent網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)針式打印文本的識(shí)別。但用多個(gè)單字符圖像來(lái)訓(xùn)練Alexent網(wǎng)絡(luò)模型時(shí),由于樣本量較大,需要消耗大量的時(shí)間以及計(jì)算機(jī)資源來(lái)訓(xùn)練好一個(gè)模型,雖然分布式并行計(jì)算可以加速模型的訓(xùn)練,但占用的計(jì)算機(jī)資源并沒(méi)有減小。為解決這一問(wèn)題,試驗(yàn)中對(duì)這個(gè)網(wǎng)絡(luò)做了一系列的調(diào)整,調(diào)整后的F-Alexent網(wǎng)絡(luò)的結(jié)構(gòu)如圖6所示。
注:Conv代表卷積層;Pool代表池化層。圖6 微調(diào)后的F-Alexent網(wǎng)絡(luò)圖
F-Alexent網(wǎng)絡(luò)模型的改進(jìn)具體表現(xiàn)在:①將Alexent網(wǎng)絡(luò)的第1個(gè)卷積層的卷積核大小由11×11變成9×9;②用2個(gè)3×3大小的卷積核代替第2層的5×5的卷積核;③多增加一層卷積層conv6;④將每一層網(wǎng)絡(luò)的特征圖數(shù)量減少,即通過(guò)改變卷積核的大小、特征圖和卷積層的數(shù)量來(lái)降低計(jì)算機(jī)資源的占用。
需要注意的是,筆者用字體文件生成的訓(xùn)練集的圖像大小為100×100,為了得到理想的識(shí)別率,識(shí)別階段送入卷積神經(jīng)網(wǎng)絡(luò)的單字符文本圖像也要是同樣的分辨率,因此,在單字符切割后還需要對(duì)得到的文本圖像做歸一化處理。
醫(yī)療發(fā)票中語(yǔ)義修正的具體過(guò)程為:將多張二維的單字符圖像依次輸入到CNN中后,用改進(jìn)后的Alexent網(wǎng)絡(luò)完成多個(gè)文本圖像的識(shí)別,最終輸出多個(gè)語(yǔ)段。假設(shè)語(yǔ)段的個(gè)數(shù)為S,則這些語(yǔ)段可以用序列L=[L1,L2,…,Li, …,Ls]表示,其中1≤i≤S。在輸入到RNN進(jìn)行語(yǔ)義修正之前,需要對(duì)多個(gè)語(yǔ)段進(jìn)行向量化處理,即Li表示一個(gè)大小為M×N的向量,將這些向量作為RNN的輸入,且Li作為RNN在i時(shí)刻的輸入。CNN-RNN模型的示意圖如圖7所示。
圖7 CNN-RNN模型示意圖
RNN利用各神經(jīng)元之間的記憶功能來(lái)處理時(shí)序信息,能夠更深層次的揭示數(shù)據(jù)間隱藏的特點(diǎn),輸出結(jié)果不僅與當(dāng)前時(shí)刻輸入的信息和權(quán)重有關(guān),還與之前輸入的信息相關(guān)[8]。RNN結(jié)構(gòu)示意圖如圖8所示。
圖8 RNN結(jié)構(gòu)示意圖
圖8中,xt、ht、yt分別代表t時(shí)刻RNN網(wǎng)絡(luò)的輸入狀態(tài)向量、隱藏層的狀態(tài)向量和輸出狀態(tài)向量。隱藏層的作用就是將當(dāng)前的輸入與前一層的輸出相結(jié)合,再通過(guò)激活函數(shù)激活神經(jīng)元,就能夠獲得當(dāng)前時(shí)刻的輸出信號(hào)。t時(shí)刻的隱藏層狀態(tài)向量和輸出狀態(tài)向量可以用公式表示為:
ht=g(uxt+vht-1)
(2)
yt=f(wht)
(3)
式中:u表示輸入層與隱藏層間的權(quán)重矩陣;v為前后時(shí)刻隱藏層間的權(quán)重矩陣;w表示隱藏層與輸出層間的權(quán)重矩陣;g為隱藏層的非線性激活函數(shù),如sigmoid函數(shù);f表示輸出層的激活函數(shù),一般是線性的,如softmax線性分類(lèi)函數(shù)。
訓(xùn)練RNN模型進(jìn)行醫(yī)學(xué)術(shù)語(yǔ)修正的過(guò)程同樣屬于有監(jiān)督學(xué)習(xí),首先從CNKI、PubMed等網(wǎng)站上搜索并下載7000多條醫(yī)學(xué)術(shù)語(yǔ)形成語(yǔ)言數(shù)據(jù)庫(kù),再對(duì)語(yǔ)言數(shù)據(jù)庫(kù)中的醫(yī)學(xué)術(shù)語(yǔ)打上標(biāo)簽,構(gòu)成訓(xùn)練模型所需的訓(xùn)練集,將大量的訓(xùn)練樣本做矢量化處理后送入RNN中,最后得到可實(shí)現(xiàn)醫(yī)學(xué)術(shù)語(yǔ)修正的RNN模型。需要注意的是,CNN-RNN模型在訓(xùn)練時(shí)采用交叉熵代價(jià)函數(shù)來(lái)加快網(wǎng)絡(luò)參數(shù)的調(diào)整和網(wǎng)絡(luò)的訓(xùn)練速度。
試驗(yàn)所采用的單字符圖像數(shù)據(jù)集是從Windows自帶的宋體字體文件中提取得到的,筆者對(duì)提取到的單字符圖像做了一些處理,包括文字扭曲、文字傾斜、筆畫(huà)粘連、筆畫(huà)斷裂以及加入椒鹽噪聲等。該操作不僅增大了樣本量,還在一定程度上加強(qiáng)了CNN模型泛化能力。將處理后的單字符圖像大小設(shè)置為100×100,這些單字符圖像中的80%用于訓(xùn)練CNN模型,剩下20%的單字符圖像用來(lái)測(cè)試得到的網(wǎng)絡(luò)模型的好壞,若測(cè)試的結(jié)果不理想,則需要調(diào)整網(wǎng)絡(luò)參數(shù)并重新進(jìn)行網(wǎng)絡(luò)訓(xùn)練,直到獲得理想的網(wǎng)絡(luò)模型。
利用RNN在自然語(yǔ)言處理方面的優(yōu)勢(shì)來(lái)實(shí)現(xiàn)醫(yī)學(xué)術(shù)語(yǔ)的語(yǔ)義修正。通過(guò)CNKI、PubMed等網(wǎng)站下載7000多條醫(yī)學(xué)術(shù)語(yǔ)文本文件,并將每條醫(yī)學(xué)術(shù)語(yǔ)的最大長(zhǎng)度設(shè)置為10個(gè)字符,以減少后期計(jì)算機(jī)資源的占用。將每條醫(yī)學(xué)術(shù)語(yǔ)矢量化為M×N大小的向量,即RNN網(wǎng)絡(luò)的訓(xùn)練數(shù)據(jù)集為7000多個(gè)大小為M×N的向量,再將其輸入到RNN網(wǎng)絡(luò)進(jìn)行訓(xùn)練。
將識(shí)別準(zhǔn)確率作為評(píng)價(jià)指標(biāo),識(shí)別準(zhǔn)確率R的計(jì)算公式為:
(4)
式中:N為測(cè)試集中總的字符圖像個(gè)數(shù);n為正確識(shí)別的字符圖像個(gè)數(shù)。
圖9 不同的樣本容量下發(fā)票識(shí)別準(zhǔn)確率
首先來(lái)研究樣本容量對(duì)F-Alexent網(wǎng)絡(luò)模型識(shí)別準(zhǔn)確率的影響,將提取到的3755個(gè)字符圖像經(jīng)過(guò)處理后依次生成20、30、40、50、60張單字符圖像分別作為訓(xùn)練集,并采用訓(xùn)練得到的模型來(lái)識(shí)別收集到的200張醫(yī)療發(fā)票,圖9給出了采用不同的樣本量對(duì)F-Alexent網(wǎng)絡(luò)模型識(shí)別準(zhǔn)確率產(chǎn)生的影響。
由圖9可知,當(dāng)訓(xùn)練F-Alexent網(wǎng)絡(luò)的樣本量增加時(shí),其模型識(shí)別準(zhǔn)確率也隨之提高,當(dāng)樣本量較少時(shí),由于此時(shí)網(wǎng)絡(luò)并沒(méi)有達(dá)到收斂狀態(tài),因此識(shí)別準(zhǔn)確率相對(duì)較低。當(dāng)單個(gè)字符的樣本量達(dá)到60時(shí),其識(shí)別準(zhǔn)確率達(dá)到90.2%,網(wǎng)絡(luò)處于收斂狀態(tài)。
表1 不同迭代次數(shù)下識(shí)別準(zhǔn)確率大小
在擁有相同大小樣本量的情況下,迭代次數(shù)必然會(huì)對(duì)識(shí)別準(zhǔn)確率產(chǎn)生影響,表1給出了不同迭代次數(shù)下識(shí)別準(zhǔn)確率的大小。
由表1可知,當(dāng)?shù)螖?shù)增加時(shí),醫(yī)療發(fā)票的識(shí)別準(zhǔn)確率不斷提高。但當(dāng)?shù)螖?shù)增大到300次后,網(wǎng)絡(luò)達(dá)到收斂狀態(tài),識(shí)別準(zhǔn)確率不再提高,網(wǎng)絡(luò)的損失值趨于穩(wěn)定。其Alexent與改進(jìn)的F-Alexent在訓(xùn)練過(guò)程中損失值隨迭代次數(shù)的變化關(guān)系如圖10所示。
圖10 損失值與迭代次數(shù)的關(guān)系圖
從圖10可以看出,在迭代次數(shù)剛開(kāi)始增大時(shí),損失值減小的速率較大,且改進(jìn)的F-Alexent的損失值比原始的Alexent的損失值下降更快。當(dāng)?shù)螖?shù)達(dá)到250之后,網(wǎng)絡(luò)處于收斂狀態(tài),損失值不再大幅度波動(dòng),此時(shí)模型訓(xùn)練完成,所得到的網(wǎng)絡(luò)模型識(shí)別結(jié)果最佳。
根據(jù)上面的試驗(yàn),將F-Alexent網(wǎng)絡(luò)參數(shù)設(shè)為最佳值,在這一基礎(chǔ)上來(lái)研究RNN結(jié)構(gòu)參數(shù)對(duì)識(shí)別準(zhǔn)確率的影響。RNN憑借各隱藏層間的相互聯(lián)系在自然語(yǔ)言處理方面取得了很大的進(jìn)步,處理程度的好壞主要取決于RNN的隱藏層參數(shù)和每層的節(jié)點(diǎn)數(shù)。從理論上分析可知, RNN隱藏層層數(shù)越多,處理時(shí)序信息的能力越強(qiáng),但隨著隱藏層層數(shù)的增加,訓(xùn)練網(wǎng)絡(luò)時(shí)計(jì)算機(jī)的資源占用也在增加,且容易出現(xiàn)過(guò)擬合問(wèn)題。采用不同的隱藏層層數(shù)和每層節(jié)點(diǎn)數(shù)訓(xùn)練會(huì)得到不同的RNN模型,需要測(cè)試多個(gè)網(wǎng)絡(luò)模型的識(shí)別準(zhǔn)確率,最終選擇識(shí)別率最高的網(wǎng)絡(luò)模型并將該網(wǎng)絡(luò)的RNN隱藏層層數(shù)和每層的節(jié)點(diǎn)數(shù)視為RNN的最佳參數(shù)。
圖11 RNN不同參數(shù)的識(shí)別準(zhǔn)確率
分別將RNN網(wǎng)絡(luò)的層數(shù)設(shè)置為1、3、5、7,并分別將每層的節(jié)點(diǎn)數(shù)設(shè)成64、128、256、512,經(jīng)組合可以得到16種網(wǎng)絡(luò)模型,不同的模型對(duì)應(yīng)的識(shí)別準(zhǔn)確率如圖11所示。
由圖11可知, 隨著RNN隱藏層層數(shù)的不斷增大,網(wǎng)絡(luò)的準(zhǔn)確率呈現(xiàn)增長(zhǎng)趨勢(shì);隨著隱藏層節(jié)點(diǎn)數(shù)的增大,網(wǎng)絡(luò)的準(zhǔn)確率也基本呈上升趨勢(shì)。但當(dāng)RNN隱藏層的層數(shù)為7,且每層節(jié)點(diǎn)數(shù)為512時(shí),網(wǎng)絡(luò)的識(shí)別準(zhǔn)確率反而下降,也就是說(shuō)每層節(jié)點(diǎn)數(shù)并非越多越好,且節(jié)點(diǎn)數(shù)越多,就越容易出現(xiàn)過(guò)擬合現(xiàn)象。為此,將RNN的隱藏層層數(shù)設(shè)為7層,每層的節(jié)點(diǎn)數(shù)設(shè)為256,訓(xùn)練得到的網(wǎng)絡(luò)模型的識(shí)別效果最優(yōu)。
比較了原始的Alexent網(wǎng)絡(luò)、微調(diào)后的F-Alexent網(wǎng)絡(luò)以及加入RNN網(wǎng)絡(luò)后對(duì)識(shí)別準(zhǔn)確率的大小的影響,其結(jié)果如表2所示。
表2 不同方法下識(shí)別準(zhǔn)確率的大小
從表2可以看出,微調(diào)網(wǎng)絡(luò)層數(shù)后得到的F-Alexent網(wǎng)絡(luò)的識(shí)別準(zhǔn)確率高于原始到的Alexent網(wǎng)絡(luò),但后續(xù)加入RNN進(jìn)行醫(yī)學(xué)術(shù)語(yǔ)修正后2種網(wǎng)絡(luò)的識(shí)別準(zhǔn)確率均有提高。試驗(yàn)結(jié)果表明,使用微調(diào)后得到的F-Alexent來(lái)提取單字符圖像特征并輸出識(shí)別結(jié)果,再結(jié)合RNN來(lái)對(duì)CNN輸出的結(jié)果進(jìn)行語(yǔ)義修正的方法在識(shí)別醫(yī)療發(fā)票時(shí)具有較高的識(shí)別準(zhǔn)確率,體現(xiàn)了CNN-RNN模型在識(shí)別醫(yī)療發(fā)票時(shí)的優(yōu)勢(shì)。
采用訓(xùn)練好的CNN-RNN模型測(cè)試了200張醫(yī)療發(fā)票的識(shí)別情況,其中每張發(fā)票中大概有100個(gè)單字符,合計(jì)共測(cè)試了2000多張單字符圖像。圖12為筆者提出方法的識(shí)別結(jié)果。圖12中左邊為本地上傳的原始發(fā)票圖像,右邊顯示發(fā)票的最終識(shí)別結(jié)果。從識(shí)別結(jié)果中可以看出,醫(yī)療發(fā)票識(shí)別準(zhǔn)確率達(dá)到90%以上,驗(yàn)證了該方法的有效性。
針對(duì)針式打印的醫(yī)療發(fā)票中存在的斷點(diǎn)等問(wèn)題,提出了一種將數(shù)字圖像處理技術(shù)與深度學(xué)習(xí)技術(shù)相結(jié)合的方法來(lái)識(shí)別醫(yī)療發(fā)票中的文本信息,通過(guò)數(shù)字圖像處理技術(shù)得到單個(gè)字符圖像,將其作為CNN網(wǎng)絡(luò)的輸入,并將識(shí)別得到的語(yǔ)段輸入RNN網(wǎng)絡(luò)進(jìn)行語(yǔ)義修正,最終得到識(shí)別結(jié)果。該方法采用微調(diào)后的F-Alexent網(wǎng)絡(luò)來(lái)提取單字符圖像中的潛在文字特征,再利用RNN在時(shí)序信息處理中的優(yōu)勢(shì)來(lái)實(shí)現(xiàn)語(yǔ)義的修正。試驗(yàn)結(jié)果表明,該方法有效地提高了針式打印醫(yī)療發(fā)票的識(shí)別精度,在醫(yī)療發(fā)票的快速識(shí)別與入庫(kù)中發(fā)揮著十分重要的作用。
圖12 醫(yī)療發(fā)票識(shí)別結(jié)果