王 瓊 曠文珍 許 麗
1(蘭州交通大學自動化與電氣工程學院 甘肅 蘭州 730070) 2(蘭州交通大學研究院甘肅工業(yè)交通自動化工程技術研究中心 甘肅 蘭州 730070)
隨著人工智能發(fā)展新時代的到來,語音識別技術已被廣泛應用,但在實際應用中,現(xiàn)有的語音識別引擎還存在領域知識不夠豐富的問題。面對專業(yè)領域對語音識別的特殊要求,研究者們主要對語音識別模型進行了研究,提出一系列的新模型和方法,如:文獻[1]提出了基于聲學狀態(tài)似然值得分模型及監(jiān)督狀態(tài)模型的語音識別特征融合算法;文獻[2]提出了一種基于隨機段模型的發(fā)音信息集成方法;文獻[3]構建了一種基于聲學特征空間非線性流形結構新型聲學模型;文獻[4]對基于隱馬爾可夫模型的電力調度語音識別系統(tǒng)進行了研究。也有部分學者從語音識別后文本入手,通過自然語言處理技術進行研究,來提高專業(yè)領域內的語音識別率。
目前市場上成熟的語音智能識別軟件針對日常用語的識別準確率已取得了不錯的效果。但鐵路車務系統(tǒng)對行車指揮用語有標準化要求,現(xiàn)有的語音智能識別軟件無法滿足,識別的錯誤類型主要有散串錯誤和同音字錯誤,其中散串錯誤是指將詞組識別為連續(xù)的單字,如將“紅光帶”識別為“宏光代”。同音字錯誤又分為兩種情況,一種是將正確詞組識別為同音異意詞,如將“道岔”識別為“刀叉”;還有一種是鐵路信號領域內一些字母或數(shù)字特殊規(guī)定,如“DG”規(guī)定發(fā)音為“dao gui”,被識別為“搗鬼”。還有部分當行車組織人員使用簡略化、地方化用語表述時,造成的識別錯誤,如“1”發(fā)音為“dong”,被識別為“動”。針對以上問題,本文主要完成以下工作:
(1) 構建二元語法模型和三元語法模型實現(xiàn)語音識別后文本散串查錯,并對模型中產(chǎn)生的數(shù)據(jù)稀疏問題,采用Witten-Bell平滑算法解決,同時對平滑后的N-gram模型進行改進。
(2) 構建專業(yè)術語查錯知識庫實現(xiàn)語音識別后文本同音字及特殊規(guī)定查錯,實現(xiàn)知識庫的自動更新,并對錯誤文本與知識庫匹配的算法進行相應的設計。
本文系統(tǒng)在已成熟的語音識別技術基礎上增加自然語言處理模塊,加入專業(yè)領域內的標準化知識庫,使系統(tǒng)在識別通用語言的基礎上提高專業(yè)領域語音識別準確率。系統(tǒng)主要包含四大模塊:科大訊飛語音識別引擎模塊;中文分詞模塊,即預處理模塊;基于N-gram模型結合專業(yè)術語知識庫的查錯模塊;糾錯模塊。系統(tǒng)結構如圖1所示。
圖1 語音識別及識別后文本處理結構
為了節(jié)省開發(fā)時間,系統(tǒng)調用了國內最早研究語音技術也是技術最成熟的開放式科大訊飛語音云平臺[5]相應的API接口,將語音識別的任務傳遞給語音云平臺,然后對科大訊飛語音云平臺識別后的文本采用中文分詞算法進行預處理,為后續(xù)的查錯提供基礎。查錯模塊主要由專業(yè)術語查錯知識庫和N-gram模型組成。糾錯模塊通過構建糾錯知識庫結合相應的糾錯算法實現(xiàn)。由于查錯作為糾錯的基礎,查錯模型的構建直接影響糾錯的結果以及語音識別準確率,本文主要對查錯模塊進行研究。
n元語法模型(N-gram模型)作為自然處理領域內一種常用的數(shù)學建模方法,被廣泛應用。如文獻[6]利用N-gram模型字接續(xù)和詞接續(xù)關系,同時構建了自動查錯知識庫進行查錯,該算法采用的二元接續(xù)關系檢查局部字詞級錯誤是有效的,但對于整個文本的查錯不足。文獻[7]采用一種音素匹配法結合改進了的n元語法模型的方法對語音指令進行理解,利用N-gram模型間接獲取未被識別的音素,該方法針對小語料庫,為語音識別后文本關鍵字的提取提供了一種思路。文獻[8]設計了一種條件隨機場(CRF)和N-gram散串聯(lián)合的查錯模型,該模型只針對字錯誤查找,對于長距離的錯誤以及語法、語義級的查錯方法有待改進。本文利用N-gram模型對相鄰詞或字預測能力分別構建二元語法模型(n=2)和三元語法模型(n=3),通過分析詞間的N-gram值從而判定識別錯誤點。下面對N-gram模型構建及查錯實現(xiàn)過程進行介紹。
對N-gram模型描述為[9]:假設xi為當前將要出現(xiàn)的語言符號(包括字符、詞和短語等),則預測xi出現(xiàn)的概率時,需考慮前面曾出現(xiàn)過的若干個語言符號對它的影響,如果只考慮前面出現(xiàn)的n-1個語言符號(xi-n+1xi-n+2…xi-1),則xi的出現(xiàn)概率可由條件概率p(xi|xi-n+1xi-n+2…xi-1)來估計。假設語音識別后文本為s=x1x2…xm,則N-gram模型通過概率分布p(s)來描述s出現(xiàn)的概率,計算式表示為:
p(s)=p(x1)p(x2|x1)…p(xm|x1x2…xm-1)=
(1)
式中:x1x2…xi-1為第i個詞的歷史。N-gram模型中n值表征當前預測詞與前n-1個歷史相關,n值越大,模型所反映的句子中詞與詞的關聯(lián)越準確。由于鐵路車務系統(tǒng)用詞大多為兩字詞和三字詞,且識別后文本為短文本,選取n=2和n=3即可滿足查錯要求,稱n=2和n=3時的模型為bi-gram(二元)模型和tri-gram(三元)模型,計算式分別表示為:
(2)
(3)
式中:p(xi|xi-1)為bi-gram概率值;p(xi|xi-2xi-1)為tri-gram概率值;Nfre(xi-1)表示詞語xi-1在整篇語音識別后文檔中出現(xiàn)的頻率,同理Nfre(xi-1xi)、Nfre(xi-2xi-1xi)、Nfre(xi-2xi-1)表示相應詞語在整篇語音識別后文檔出現(xiàn)的頻率。在利用訓練語料估計參數(shù)模型時,由于只選取所有分詞后語料中的部分詞作為訓練語料,未能完全覆蓋語料中所有詞,存在數(shù)據(jù)稀疏問題[10],所以,本系統(tǒng)采用Witten-Bell平滑插值平滑算法解決,即利用低階的N-gram模型向高階的N-gram模型插值[11]。平滑后的bi-gram模型、tri-gram模型,計算式分別表示為:
pwb(xi|xi-1)=λxi-1p(xi|xi-1)+(1-λxi-1)pwb(xi)
(4)
(5)
式中:λxi-1為高階和低階模型的權重值。本系統(tǒng)采用分段方法,利用先驗知識將可能具有相似λxi-1值的語料歸結在一起進行訓練確定λxi-1的值,最后確定λxi-1為0.7。
bi-gram模型為判斷相鄰兩詞(字)xi-1和xi是否接續(xù)提供了基礎。利用bi-gram模型進行查錯時,通過判斷xi與xi-1的pwb(xi|xi-1)值或xi與xi+1的pwb(xi|xi-1)值是否滿足閾值α1,即可判斷xi與xi-1或與xi+1接續(xù),從而判斷xi是否錯誤。而對于一些臨界詞,如“信號機故障”,其中:“信號機”和“故障”的N-gram值都很高;而詞間字“機故”作為臨界詞其N-gram值卻很低,但不能認定“機故”就是識別的錯誤位置。
為了進一步對閾值判定提供依據(jù),本文通過對語音識別錯誤點xi相鄰字的N-gram值分布得到適當?shù)臋嘀刂祵崿F(xiàn)對錯誤點的準確定位。例如,語音識別前文本為“2號道岔扳動至反位,鉤鎖器加鎖”,對詞“道岔”識別的結果,是以“2號道岔”計算得到的pwb(xi|xi-1)為主要判定值,還是以“道岔扳動”計算得到的pwb(xi|xi+1)為主要判定值,下面以bi-gram模型為例說明。
若要判斷當前詞xi是否為識別錯誤點,通過計算pwb(xi|xi-1)、pwb(xi|xi+1),并加以權重,從而實現(xiàn)錯誤的準確判定,改進后的模型計算所得值記為P(xi),計算式表示為:
P(xi)=(1-β)Pwb(xi|xi-1)+βPwb(xi|xi+1)
(6)
式中:β用于衡量前詞和后詞對識別錯誤點定位的重要程度,通過后續(xù)實驗部分確定β值。
由于語料中某些詞語出現(xiàn)頻率較少,如“鉤鎖器”和“加鎖”在5 000條語料中分別只出現(xiàn)了兩次,很有可能導致模型錯誤識別詞串,但“鉤鎖器加鎖”幾乎同時出現(xiàn),即共現(xiàn)概率很大,兩詞具有很強的依賴關系?;バ畔⑹且环N計算兩個隨機變量之間共有信息的度量,當兩個隨機變量相關時,其互信息大于零,互信息越大,結合程度越強,當變量之間不存在依賴關系時,它們的互信息小于零[12]。在利用N-gram模型查錯基礎上,加入互信息作為二次判別條件,對語料庫中單獨出現(xiàn)頻次低,但共現(xiàn)頻次高的詞語錯誤提供了查錯依據(jù)。
對詞(字)與詞(字)間互信息的定義為:
(7)
式中:若文檔中共有詞串M個,則p(xi-1xi)=Nfre(xi-1xi)/M,p(xi-1)=Nfre(xi-1)/M,p(xi)=Nfre(xi)/M。
利用互信息查錯時,當兩詞間的I(xi-1xi)或I(xixi+1)滿足閾值α2,則認為xi與xi-1或xi與xi+1結合的程度很大,xi出錯的概率很小。利用改進后的N-gram模型和互信息聯(lián)合查錯算法實現(xiàn)步驟如下:
(1) 分別計算pwb(xi|xi-1)、pwb(xi|xi+1),從而得到p(xi)。若p(xi)≥α1,xi無錯,轉至步驟(5),否則轉至步驟(2)。
(2) 計算I(xi-1xi),若I(xi-1xi)≥α2,則xi與xi-1可靠接續(xù),可確定xi無錯,轉至步驟(5),否則轉至步驟(3)。
(3) 計算I(xixi+1),若I(xixi+1)≥α2,則xi與xi+1可靠接續(xù),可確定xi無錯,轉至步驟(5),否則轉至步驟(4)。
(4)xi錯誤,將xi存儲于錯誤字符數(shù)組中,轉至步驟(5)。
(5) 檢查是否i>length[s],若滿足,則查錯結束,否則i=i+1,轉至步驟(1)。
實驗中的α1、α2和β由實驗部分確定其具體值。通過改進后N-gram模型和互信息聯(lián)合查錯算法,散串錯誤基本都可確定。但針對同音詞及特殊規(guī)定詞語識別錯誤,需構建專業(yè)術語查錯知識庫來實現(xiàn)查錯。
語音識別后文本的查錯不僅依賴于上下語境,還需要相關專業(yè)領域知識融合解決。目前針對特定領域語音識別后處理已經(jīng)有所研究,如文獻[13]通過構建基于全信息語音識別文本常識知識庫,構建了語法、語義、語境三層知識庫實現(xiàn)了對語音識別后文本的糾錯,但該方法需要大量的語料,造成存儲和更新語料庫的不便。文獻[14]構建了語境知識庫,并計算了詞語語義相似度以及詞語與語境核心詞的語境關聯(lián)度,結合詞序因素、語義語法知識對識別后文本進行了查錯糾錯,但糾錯算法還需完善,且知識庫不夠充足。張仰森等[15]提出三層語義搭配知識庫,采用“HowNet”抽取詞語的義原信息,生成詞語-義原搭配知識庫,該方法在文本查錯召回率和準確率上有了很大的貢獻,但所采用的句型較為簡單,未考慮語法結構和詞語間的語義限制。由于本文系統(tǒng)針對的文本為語音識別后的文本,只是破壞了句子詞語間表層的結構,且句子的結構比較固定,因此不需要進行全面的句法分析,只需構建相應的專業(yè)術語規(guī)則知識庫即可查找錯誤。
在鐵路車務系統(tǒng)中,描述一個對象及其動作采用的句型基本固定,如“D1107次司機,蘭州站轉換為非常站控,2道?!?,句型結構為“名詞(n)+動詞(v)+狀語(adv)”,其中對于車次號“D1107”以及股道名“2道”,這類詞準確定位了場景中的對象,需要進行準確識別。并且鐵路車務系統(tǒng)車機聯(lián)控中對個別字母或數(shù)字發(fā)音有一定的特殊規(guī)定如“DG”“D”規(guī)定發(fā)音為“dao gui(道軌)”“dong(動)”,還有部分數(shù)字由于工作人員地方口音等因素造成發(fā)音不準確,如“0”“1”“2”和“7”等經(jīng)常分別發(fā)音為“dong(洞)”“yao(幺)”“l(fā)ia(倆)”和“guai(拐)”等,還有部分同音異意詞如“道岔(刀叉)”“扳動(搬動)”“加鎖(枷鎖)”和“反位(反胃)”等都是需要依靠專業(yè)術語查錯知識庫來實現(xiàn)查錯的。
本文從相關網(wǎng)頁及現(xiàn)場收集到大量鐵路車務標準用語文本數(shù)據(jù),由人工錄入至鐵路車務接發(fā)車培訓系統(tǒng)采用科大訊飛識別引擎進行語音識別訓練,并統(tǒng)計識別后文本已分詞后詞語出現(xiàn)的頻次,形成音似詞序列,構成如表1所示的查錯知識庫結構。
表1 專業(yè)術語查錯知識庫
該查錯知識庫采用適應關鍵字的更新原則,在首次語音識別前錄入行車組織人員語音信息,進行知識庫規(guī)則初始化。在進行語音識別過程中由操作人員錄入語音,由系統(tǒng)識別為關鍵字序列,采用似然匹配算法將該序列與標準序列匹配,并對系統(tǒng)進行閾值設定,當匹配率高于一定閾值時自動將誤差項更新至專業(yè)術語查錯知識庫中,同時人工可干預評判,從而提高識別速度與準確性。圖2為某一場景下的對專業(yè)術語查錯知識庫適應性更新過程。
由于知識庫采用適應關鍵字更新方法,針對車務系統(tǒng)領域內出現(xiàn)的新詞可通過提取關鍵詞的方法,由系統(tǒng)識別為關鍵詞后,進行系統(tǒng)知識庫訓練學習來更新擴展知識。且對于識別后文本若出現(xiàn)同義表達時,可采用上下文詞語間的互信息構建詞語搭配知識庫進行糾檢錯。由于本文系統(tǒng)主要針對語音識別后文本查錯研究,極少詞組會被識別為同義詞,絕大多數(shù)為發(fā)音相同,系統(tǒng)識別為同音異義詞序列,因此對詞語搭配知識庫的構建未進行陳述。
若w1,w2,…,wn為語音識別文本分詞后的的表示,z1,z2,…,zm為專業(yè)術語查錯知識庫中的音似詞序列,定義匹配函數(shù)為:
(8)
(wn-i+1,zm-i+1)=m(z1=w1,zn=wm)。
則稱詞串w1,w2,…,wn和詞串z1,z2,…,zm似然匹配,若匹配成功,則可確定此處存在錯誤。
該匹配算法的缺點是只能對語音識別后的錯誤詞串已存入知識庫的音似詞序列的錯誤進行定位,若識別后出現(xiàn)錯誤的詞串在訓練過程中未出現(xiàn),未能存入查錯知識庫的音似詞序列,則無法確定該詞是否有錯。該匹配算法也可作為糾錯算法對語音識別錯誤點進行糾錯,可由音似詞序列追溯至專業(yè)詞存儲位置并匹配到對應的正確詞實現(xiàn)。本文只討論查錯算法,糾錯算法將不再贅述。
4.1.1α1的確定
對鐵路車務標準用語“5號道岔現(xiàn)場扳動到反位鉤鎖器加鎖”進行分詞后得到“5號/道岔/現(xiàn)場/扳動/到/反位/鉤鎖/器/加鎖”,對其bi-gram模型、tri-gram模型的N-gram圖仿真如圖3所示。
對語音識別后文本經(jīng)分詞后得到“5號/道岔/現(xiàn)場/搬動/到/反胃/勾/索/器/枷鎖”,對其bi-gram模型、tri-gram模型的N-gram圖仿真如圖4所示。
圖4 語音識別后文本N-gram圖
由圖3可得tri-gram模型的N-gram值比bi-gram模型的N-gram值均高出0.2左右,反映語音識別前文本中詞與詞的緊密關系更加準確。圖4中在錯誤點處tri-gram模型的N-gram值比bi-gram模型的N-gram值均低出0.05左右,顯然當n=3時所反映的語音識別后文本中相鄰詞語的關聯(lián)度更貼近語義,對語音識別錯誤點的定位也更準確。因此以圖4為基礎可得語音識別錯誤點的N-gram值低于0.1,又選取70條語音識別后已分詞文本,共287個詞和字,其中錯誤詞組163個,對163個詞組仿真得到如圖5所示錯誤詞組N-gram值分布圖。
圖5 錯誤詞組N-gram分布圖
由圖5可得大部分錯誤詞組N-gram值均低于0.1,只有個別詞組的N-gram值高于0.1,該部分詞組則是由于同音字或專業(yè)術語規(guī)定發(fā)音造成的識別錯誤,利用N-gram未能查找出,因此由圖5可確定α1為0.1。
4.1.2β的確定
為對α1判定語音識別錯誤點提供更可靠的依據(jù),分別對語音識別錯誤點在其對應的語音識別前相鄰詞(字)的tri-gram概率值和語音識別后相鄰詞(字)的tri-gram概率值的分布情況進行了仿真,得到了語音識別前相鄰字的tri-gram概率值分布圖如圖6所示,語音識別后相鄰字的tri-gram概率值分布圖如圖7所示。
圖6 語音識別前相鄰字的tri-gram概率值分布圖
由圖6和圖7可得語音識別錯誤點在其對應的語音識別前相鄰詞(字)的tri-gram概率值的分布基本一致且相對吻合。語音識別后文本中識別錯誤點相鄰詞(字)的tri-gram概率值的區(qū)分性較大,后字的tri-gram概率值大部分低于0.1,而前字的tri-gram概率值絕大多數(shù)大于0.1。顯然后字的tri-gram概率值為α1判定錯誤點起到的作用更大,因此在對N-gram模型改進中給予后詞更大的權重。
為確定β的最優(yōu)值,通過對70條識別后文本共163個錯誤詞組128個散串錯誤實驗,β=0.8時系統(tǒng)的識別率、召回率及F值均最高,因此取β為0.8。
4.1.3α2的確定
為確定閾值α2,提取測試語料所有詞(字)(共2 432個)的互信息值和頻次,將其構成2×2 432的矩陣,對矩陣中的數(shù)據(jù)進行區(qū)間化處理。實驗表明當區(qū)間劃分為20等份時,閾值體現(xiàn)的詞(字)與詞(字)的結合緊密程度越具區(qū)分性。因此將2×2 432的矩陣歸一化為20×20的矩陣,矩陣中的每個值為互信息和頻次在對應區(qū)間內的詞(字)和詞(字)結合出現(xiàn)個數(shù)?;バ畔⑴c頻次的密度值對詞(字)和詞(字)結合出現(xiàn)個數(shù)的覆蓋趨勢如圖8所示。
圖8 互信息和頻次密度對詞結合覆蓋率趨勢
可以看出,互信息和頻次密度對詞(字)與詞(字)的結合覆蓋率呈上升趨勢,當覆蓋率達到8.9%時,其互信息和頻次對應的密度值為89,對統(tǒng)計到的語料中出現(xiàn)頻率較少的專業(yè)詞匯基本覆蓋,對詞(字)的結合具有較大的區(qū)分性。將該密度值逆推轉化得到互信息對應的區(qū)間為[1.5,2.1],因此α2確定為2.1。
在實驗條件相同情況下,選取800條鐵路車務標準用語文本中的400條作為訓練文本,400條作為測試文本。由人工錄入至鐵路車務仿真培訓系統(tǒng),通過統(tǒng)計識別后文本,包含散串錯誤207個,同音字錯誤87個,將識別后的文本分別采用文獻[6]、文獻[7]和文獻[8]方法,與本文算法進行實驗對比,結果如表2所示。
表2 實驗結果對比(%)
相比文獻[6],本文算法除利用二元語法模型外加入了三元語法模型和互信息共同進行查錯,而文獻[6]只利用詞間和字間接續(xù)關系查錯,本文算法所涵蓋的文本上下文信息更全面,且對文本中單獨出現(xiàn)頻次低、共現(xiàn)頻次高的詞語錯誤查找更精確;相較文獻[7]本文算法召回率提高了45.69百分點,主要原因是文獻[7]所構建的數(shù)據(jù)庫是基于領域的指令集,數(shù)據(jù)庫缺乏鐵路信號領域知識,導致語音識別后文本中有關領域特殊規(guī)定及專業(yè)詞匯錯誤未被查找出來;相比文獻[8],本文算法通過對N-gram模型改進,增加了N-gram模型對上下文信息的利用,加快了對錯誤的定位,并使系統(tǒng)的召回率提高了17.69百分點,但對于錯誤類型沒有明確區(qū)分,這也是后續(xù)需要改進的。
本文對語音識別后文本采用了基于改進的N-gram模型和知識庫聯(lián)合查錯方法。首先建立了witten-Bell平滑的N-gram,通過對平滑后的N-gram模型增加后詞對當前詞查錯的權重值,提高了查錯的準確率;其次建立了自動更新的專業(yè)術語知識庫,增強了N-gram模型的領域特征,且采用自動更新知識庫的方法,極大地提高了領域內文本的查錯率和召回率。因此該算法具有一定的應用價值。
本文采用加權法改進了N-gram模型的同時也增加了模型的復雜度和計算量,并且知識庫只針對鐵路信號領域中的車務系統(tǒng)用語,應用領域較單一,后續(xù)可通過應用外部數(shù)據(jù)源,從更深的句子結構中挖掘構造知識庫。