華東理工大學(xué) 劉峻宇 劉逸捷 岳川夢真 王憲偉 劉金琳
伴隨著深度神經(jīng)網(wǎng)絡(luò)的的到來,機(jī)器學(xué)習(xí)與人工智能技術(shù)在人們的日常生活中逐漸得到了廣泛運(yùn)用,尤其是諸如人臉識別,身份認(rèn)證,物體識別等圖像識別以及計(jì)算機(jī)視覺相關(guān)的技術(shù)。雖然深度神經(jīng)網(wǎng)絡(luò)對于語音識別模塊的推進(jìn)狀況不如圖像識別,但是迄今為止仍然在不斷涌現(xiàn)的技術(shù)允許語音識別變得逐漸快速,準(zhǔn)確。為了推動語音識別技術(shù)在人們生活中的普及,本文提出了一種醫(yī)療方向上的語音識別以及與正在發(fā)展的電子病歷系統(tǒng)結(jié)合的系統(tǒng),并在其上就語音識別和說話人識別,基于語音識別工具包Kaldi進(jìn)行了一系列研究和探索,針對語音識別修改thchs30的語音模型,獲得了一個(gè)專門針對醫(yī)療語音識別的模型,通過對案例sre16/v2的學(xué)習(xí)獲得了基于xvector的文本無關(guān)說人識別模型,最后基于對已經(jīng)識別出來的語音的正則提取處理,構(gòu)建了一個(gè)手機(jī)語音問診app系統(tǒng)。
語音識別是一個(gè)十分復(fù)雜的過程,其包括語音的采集,前端處理,解碼器以及最后的文字處理部分。首先,語音采集也許是所有步驟中看起來最沒有技術(shù)含量的一個(gè)步驟,但這并不意味著這個(gè)步驟無足輕重,在韓紀(jì)慶等人所著的《語音信號處理》藝術(shù)中就闡述了一個(gè)良好,全面的語音素材,對于語音信號處理可以起到極大的簡化作用,好的語音采集同樣對于建立良好的語音模型十分有幫助。然后是前端處理,在這個(gè)部分,需要做的包括:端點(diǎn)檢測,語音降噪,語音篩選,片段截取。這同樣是個(gè)工作量十分大而且還需要一定技術(shù)支持的步驟,良好的語音降噪和端點(diǎn)檢測對于一個(gè)用于訓(xùn)練語音模型的語音素材十分重要,加上對于語音內(nèi)容的篩選,這有利于建立識別度高,有針對性的語音模型。而片段截取則是有利于縮短模型的訓(xùn)練時(shí)間,同時(shí)也一定的有利于模型適應(yīng)度。接下來就是本文主要研究的兩個(gè)部分,解碼器和文字信息處理兩個(gè)部分,解碼器有兩個(gè)部分組成,分別是通過語音數(shù)據(jù)和文本數(shù)據(jù)訓(xùn)練出的聲學(xué)模型和語言模型,由于訓(xùn)練聲學(xué)模型需要大量好的語音資源來訓(xùn)練,由于不具備這個(gè)條件,本論文的探索的技術(shù)主要在于修正通過其他語料尋來出來的模型使其適應(yīng)醫(yī)療領(lǐng)域從而達(dá)到針對醫(yī)療語音識別這個(gè)目的。最后,文字信息處理部分其實(shí)主要在app框架之中,對于語音識別出來的信息,通過正則表達(dá)式將需要的關(guān)鍵信息提取或轉(zhuǎn)化,填入預(yù)先設(shè)定好的電子病歷之中。
要設(shè)計(jì)針對與醫(yī)療方向的語音識別,就需要先假設(shè)擁有這樣一款產(chǎn)品。倘若有這樣一個(gè)產(chǎn)品,客戶會需要其擁有什么樣的性能呢?首先需要其擁有與一般語音識別軟件一樣的功能,其次,與平常語音識別不同的是,首先,需要其能夠快速且準(zhǔn)確的識別出問診時(shí)候的專業(yè)詞匯。最有,由于病人和醫(yī)生在問診時(shí),存在一問一答的對話模式,所以需要其具有良好的說話人識別功能,以便于之后的電子病歷填寫。本文之后的探索與研究皆圍繞此兩點(diǎn)進(jìn)行。
Tri-gram語言模型:
Tri-Gram是一種基于統(tǒng)計(jì)語言模型的算法。它的基本思想是將文本里面的內(nèi)容按照字節(jié)進(jìn)行大小為3的滑動窗口操作,形成了長度是3的字節(jié)片段序列。
每一個(gè)字節(jié)片段稱為gram,對所有g(shù)ram的出現(xiàn)頻度進(jìn)行統(tǒng)計(jì),并且按照事先設(shè)定好的閾值進(jìn)行過濾,形成關(guān)鍵gram列表,也就是這個(gè)文本的向量特征空間,列表中的每一種gram就是一個(gè)特征向量維度。
該模型基于這樣一種假設(shè),第3個(gè)詞的出現(xiàn)只與前面2個(gè)詞相關(guān),而與其它任何詞都不相關(guān),整句的概率就是各個(gè)詞出現(xiàn)概率的乘積。這些概率可以通過直接從語料中統(tǒng)計(jì)3個(gè)詞同時(shí)出現(xiàn)的次數(shù)得到。
圖1 DNN-HMM聲學(xué)模型
DNN-HMM聲學(xué)模型:
DNN:深度神經(jīng)網(wǎng)絡(luò),HMM:隱馬爾科夫模型,DNN-HMM框架原理示意圖所示,與DNN-HMM相比較,將DNN替換GMM,計(jì)算的是多個(gè)幀的特征的概率值,即每個(gè)狀態(tài)的后驗(yàn)概率。從圖中可以很明顯看出,DNN的訓(xùn)練會產(chǎn)生大量的參數(shù),使用CPU進(jìn)行DNN的訓(xùn)練會消耗非常多的時(shí)間,因此在DNN的訓(xùn)練中使用GPU可以節(jié)省大量的時(shí)間,提高運(yùn)算速度。具體實(shí)現(xiàn)如圖1所示。
語音識別主要使用工具:
主要是用SRILM和Kaldi工具,其中使用SRILM訓(xùn)練語言模型,使用Kaldi訓(xùn)練聲學(xué)模型。
SRILM是一個(gè)用來構(gòu)建和測試語言模型的工具。SRILM包含C++類庫,基于這些類庫的訓(xùn)練以及測試語言模型的可執(zhí)行的封裝好的程序,以及事先準(zhǔn)備好的任務(wù)腳本。因此可以通過SRILM非常簡單地通過訓(xùn)練數(shù)據(jù)得到一個(gè)語言模型,這當(dāng)中包括最大似然估計(jì)也可以通過相應(yīng)的平滑算法使模型更加平衡。
Kaldi與構(gòu)建操作隱馬爾可夫模型的HTK工具相似,用于構(gòu)建語音識別模型,但是在其基礎(chǔ)之上,Kaldi的易于修改和易于擴(kuò)展體現(xiàn)了代碼的靈活性,同時(shí)Kaldi運(yùn)行穩(wěn)定,且支持一些目前流行的如深度神經(jīng)網(wǎng)絡(luò)等的高階模型,極大程度上便利了語音識別方面的研究。
模型訓(xùn)練:
(1)數(shù)據(jù)準(zhǔn)備
數(shù)據(jù)參考了清華大學(xué)thchs-30[23]在Kaldi平臺上訓(xùn)練語音識別模型的語言模型的訓(xùn)練數(shù)據(jù),在其基礎(chǔ)之上對其語料進(jìn)行了一定程度的擴(kuò)充,從而增加語言模型在疝病問診方面的識別效率。同時(shí),將瑞金醫(yī)院的疝病問診的對話記錄通過人工處理,得到新的訓(xùn)練文本,用于訓(xùn)練新的語言模型。
訓(xùn)練聲學(xué)模型時(shí),數(shù)據(jù)的準(zhǔn)備主要分為兩個(gè)部分,一個(gè)是語音數(shù)據(jù),即與數(shù)據(jù)集相關(guān)的錄音以及一些記錄了錄音信息的文件;另一個(gè)是語言數(shù)據(jù),即與語言本身更相關(guān)的發(fā)音字典、音素集合等關(guān)于音素的額外的信息。
字典文件的準(zhǔn)備上,本研究準(zhǔn)備繼續(xù)使用清華的thchs30中的“l(fā)exicon.txt”字典和“l(fā)exiconp.txt”概率字典,但是在其基礎(chǔ)之上,增加醫(yī)療專用詞匯,同時(shí)調(diào)整詞匯出現(xiàn)的概率,以實(shí)現(xiàn)模型的領(lǐng)域化。如圖2所示。
圖2 數(shù)據(jù)分布
(2)訓(xùn)練模型
首先是訓(xùn)練語言模型Tri-gram,通過對瑞金醫(yī)院疝病問診的文本集合進(jìn)行訓(xùn)練得到一個(gè)相對而言較小的3-gram語言模型,new_word_3gram.lm。將thchs30中的word.3gram.lm模型和new_word_3gram.lm通過SRILM中自帶的compute-best-mix腳本,計(jì)算出合適的比例,進(jìn)行合并,得到最終的基于詞的語言模型final_word.3gram.lm。
其次是聲學(xué)模型,利用Kaldi,結(jié)合使用SRILM訓(xùn)練出來的語言模型,訓(xùn)練出基礎(chǔ)的隱馬爾可夫模型語音識別模型,在此基礎(chǔ)模型之上進(jìn)行深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,與此同時(shí)可以利用Kaldi這個(gè)平臺,對比多個(gè)算法的優(yōu)劣,對模型進(jìn)行調(diào)整,得到最終的模型。最終模型的生成流程如圖3模型生成流程圖所示。對于DNNHMM的訓(xùn)練主要有五個(gè)步驟,包括特征提取、處理語言材料、單音素GMM-HMM訓(xùn)練、三音素GMM-HMM訓(xùn)練以及最后的DNN-HMM模型訓(xùn)練。具體過程如圖4所示。
圖3 模型關(guān)系
(3)調(diào)整參數(shù)
對于三音素模型的訓(xùn)練,使用了step/train_deltas.sh腳本進(jìn)行訓(xùn)練。step/train_deltas.sh腳本有幾個(gè)重要的參數(shù),包括葉子節(jié)點(diǎn)數(shù)、總的高斯數(shù)目以及存放數(shù)據(jù)、音素對齊結(jié)果等數(shù)據(jù)的目錄路徑。
表1 參數(shù)調(diào)整方法
模型效果對比:
在本次研究中,主要改進(jìn)集中在對語言模型的改進(jìn)當(dāng)中。通過對語料和詞典的擴(kuò)充,增強(qiáng)語言模型在醫(yī)療領(lǐng)域的識別效率。首先,本次研究在使用了添加了新的語料的語言模型的基礎(chǔ)之上訓(xùn)練了單音素GMM-HMM、三音素GMM-HMM以及DNN-HMM。
其中,與單音素模型不僅僅只有上下文的區(qū)別,三音素模型在訓(xùn)練的過程中,還加入了LDA、MLLT等參數(shù)調(diào)整以及說話人自適應(yīng)等過程。
表2 模型識別率
通過得到的數(shù)據(jù),對比了一下這三者之間的區(qū)別,在整體的識別率上,如表2模型識別率所示,和預(yù)期一樣,經(jīng)過了參數(shù)調(diào)整的三音素GMM-HMM的識別率極大程度優(yōu)于單音素GMM-HMM,可見三音素模型確實(shí)擁有比單音素模型更佳的效果。而DNN-HMM則是小幅度優(yōu)于三音素GMM-HMM。然后,本次試驗(yàn)通還將修改語言模型前后,三種模型在詞和音素的識別率分別進(jìn)行了對比。
表3 因素GMM-HMM對比
首先是修改語言模型前后,單音素GMM-HMM的對比,如表格3單音素GMM-HMM對比所示,從表格中的數(shù)據(jù)可以看出,對語言模型進(jìn)行修改之后,在相同的測試集中,識別率也略有提升,且詞的識別率提升較因素的識別率提升更多,原因是對于單音素模型而言,雖然對語言模型的修改對于識別率的提升并沒有多大的作用,但是由于更豐富的語言模型構(gòu)成了更加完善解碼網(wǎng)絡(luò),因此會對詞和音素的識別都略有提升。
而修改之后的單音素模型在詞的識別上起到好的作用,則是因?yàn)楦油晟频脑~的語言模型即使使用了醫(yī)療領(lǐng)域的對話文本,文本中也包含了日常的用詞,故而在普通領(lǐng)域的測試集中,識別率也會有提升。
表4 單因素GMM-HMM對比
對于三音素GMM-HMM和DNN-HMM的識別,如表4三音素GMM-HMM對比和表格5 DNN-HMM對比所示,修改語言模型的效果則不那么明顯,原因是因?yàn)閷τ谌羲啬P投裕瑫褂脝我羲啬P偷膶R序列,而DNN-HMM模型會使用GMM-HMM進(jìn)行初始化,因此效果的提升會有一定程度的削弱。
表5 DNN-HMM對比
xvector系統(tǒng):
Xvector系統(tǒng)是一個(gè)深度神經(jīng)網(wǎng)絡(luò)系統(tǒng),可以通過變長的語音片段來計(jì)算語音中嵌入的說話人這是kaldi工具欄中公共的體系結(jié)構(gòu)。如下表格展示了xvector拓展網(wǎng)絡(luò)的結(jié)構(gòu)。其主要功能可以分為三塊,如圖4所示:第一組包括一到九層,是TDNN(一維卷積)和密集層的集合。卷積的層次結(jié)構(gòu)提供了一種有效的方式來處理數(shù)量減少的230ms擴(kuò)展輸入上下文。給定一系列F維的T個(gè)輸入特征,此塊將23×F個(gè)特征的塊映射到T個(gè)高維向量(1500dim)序列中。第二組,即第10層,通過計(jì)算每個(gè)維度上的均值和標(biāo)準(zhǔn)差,對該序列執(zhí)行時(shí)間合并操作。這兩個(gè)統(tǒng)計(jì)量被串聯(lián)在一起,成為大小為3000的固定維向量,該向量總結(jié)了整個(gè)輸入記錄。第三組,即第12層至第13層,是具有瓶頸層的前饋網(wǎng)絡(luò),并用作分類器,為訓(xùn)練說話者輸出后驗(yàn)概率。在ReLU非線性之前,先從層11中提取x向量。網(wǎng)絡(luò)的瓶頸結(jié)構(gòu)用于實(shí)現(xiàn)嵌入尺寸的減?。?12尺寸)。實(shí)驗(yàn)中使用的DNN的參數(shù)總數(shù)(使用7,168名訓(xùn)練者)約為800萬,其中僅需要400萬即可提取x矢量。
圖4 xvector實(shí)現(xiàn)
Xvector的優(yōu)勢:訓(xùn)練速度十分快;無需特定的語種設(shè)置一個(gè)embedding層進(jìn)行提取特征直接進(jìn)行plda打分;識別率十分可觀
模型測試:
我們通過運(yùn)用的數(shù)據(jù)集是AISHELL中文普通話開源數(shù)據(jù),總共178 h,400個(gè)人講,其中訓(xùn)練集340個(gè)人,測試解20個(gè)人,驗(yàn)證集40個(gè)人,每個(gè)人大概講三百多句話,每個(gè)人講的話都放在一個(gè)文件夾里面。復(fù)現(xiàn)了xvector說話人識別。
圖5 邏輯流程圖
圖6 系統(tǒng)界面
我們選用app inventor進(jìn)行開發(fā),它是一個(gè)非常直觀的可視化編程環(huán)境,將代碼功能模塊化,使用積木拼圖式編程,程序員通過拖拽具有所需功能的模塊,通過拼接即可實(shí)現(xiàn)各種功能。以及系統(tǒng)的邏輯流程圖設(shè)計(jì)圖如圖5所示。
系統(tǒng)界面如圖6所示,可以看到從左到右依次有四個(gè)按鈕“開始錄音”“開始提取”“確認(rèn)信息”“重新開始”,其實(shí)這也是使用系統(tǒng)的流程。
下面我們從醫(yī)生角度解釋系統(tǒng)使用的流程。
(1)醫(yī)生點(diǎn)擊按鈕“開始錄音”后即可開始問診,系統(tǒng)開始錄音并進(jìn)行語音識別,錄音過程中系統(tǒng)界面。
(2)問診接收后,醫(yī)生只需說聲“結(jié)束”,系統(tǒng)識別“結(jié)束”后即中斷錄音,并將識別好的內(nèi)容顯示在界面上方的文本框中,鑒于識別結(jié)果可能并不準(zhǔn)確,醫(yī)生可修改識別結(jié)果。
圖7 年齡的結(jié)構(gòu)化規(guī)則
圖8 疼痛時(shí)長的結(jié)構(gòu)化規(guī)則
圖9 腫塊位置的結(jié)構(gòu)化規(guī)則
(3)醫(yī)生確認(rèn)識別結(jié)果無誤后,點(diǎn)擊“開始提取”,系統(tǒng)開始從文本中提取電子病歷所需信息并顯示在下方表格中。
(4)提取結(jié)束并顯示后,即問診結(jié)束,醫(yī)生點(diǎn)擊“確認(rèn)信息”即自動上傳電子病歷到數(shù)據(jù)庫中,系統(tǒng)的本次使用結(jié)束,點(diǎn)擊“重新開始”即可開始下一次問診。
規(guī)則結(jié)構(gòu)化,提取相應(yīng)字段返回結(jié)果,結(jié)構(gòu)化中主要有三方面問題需要處理,分別是:
年齡的結(jié)構(gòu)化規(guī)則:
對于年齡的結(jié)構(gòu)化規(guī)則如圖7所示,針對不同的語言習(xí)慣,考慮到了兩種詢問方式,主要為“多少歲”和“多大”兩種,對于回答則是考慮到了語音識別的過程中,會直接將數(shù)字轉(zhuǎn)換成阿拉伯?dāng)?shù)字,因此在該基礎(chǔ)之上,不用考慮中文的數(shù)字的問題,直接使用正則中的數(shù)字表達(dá)即可對所有情況進(jìn)行提取。
疼痛時(shí)長的結(jié)構(gòu)化規(guī)則:
疼痛時(shí)長的結(jié)構(gòu)化規(guī)則如圖8疼痛時(shí)長的正則化規(guī)則所示,針對疝病的具體情況,病人的回答可能不僅僅只有數(shù)字,而是涉及到去年、前年等詞,因此在正則化的過程中需要考慮到這些情況,故而對于疼痛時(shí)長的正則規(guī)則相對其他的字段的規(guī)則會復(fù)雜很多。
首先在提問方面,有兩種情況,對于這兩種情況都提取關(guān)鍵字后30個(gè)字符作為下一個(gè)正則提取的語句,這樣就可以極大程度上避免“答非所問”的情況。對于新的語句,首先判斷有沒有阿拉伯?dāng)?shù)字,有則直接作為最后結(jié)果輸出,沒有則判斷是否有中文數(shù)字,有則直接提取并輸出,沒有則判斷是否存在“去”、“今”和“前”等關(guān)鍵字,有則提取之后轉(zhuǎn)換成相應(yīng)的數(shù)字,例如“去年”會被轉(zhuǎn)換成“一年”,若還是沒有這些關(guān)鍵字,則判斷是否有“幾”字存在,該字的存在也表明了病人對具體時(shí)間的不確定,因此可以通過將“幾年”轉(zhuǎn)換成“數(shù)年”的方式來表達(dá)。
腫塊位置的結(jié)構(gòu)化規(guī)則:
對于腫塊位置的結(jié)構(gòu)化規(guī)則如圖9腫塊位置的正則化規(guī)則所示,針對疝病的具體情況,腫塊的位置主要集中在左、中、右三個(gè)部位,因此醫(yī)生詢問病人的時(shí)候會引導(dǎo)病人回答左、中、右這樣的關(guān)鍵詞,故而相對于其他幾個(gè)字段的結(jié)構(gòu)化規(guī)則而言,腫塊位置的正則化規(guī)則看上去非常簡單。
本文在語音醫(yī)療語音識別上進(jìn)行了探索,綜合判斷挑選了有針對性的技術(shù)解決對應(yīng)的問題,并且在這些領(lǐng)域做了研究和探索。首先,對于問診對話中常出現(xiàn)醫(yī)療詞匯的情況,本文基于清華的thchs30中的“l(fā)exicon.txt”字典和“l(fā)exiconp.txt”概率字典,增加醫(yī)療專用詞匯,同時(shí)調(diào)整詞匯出現(xiàn)的概率,以達(dá)到快速,準(zhǔn)確識別醫(yī)療詞匯的效果;針對說話人識別,本文探索了目前在訓(xùn)練速度,識別率,適用性各方面綜合下來最優(yōu)的xvector系統(tǒng),基于kaldi工具包訓(xùn)練了模型。最后,本文提出了一種語音問診智能電子病歷app系統(tǒng)的功能流程與框架設(shè)計(jì),這些技術(shù)探索和研究,都將有助于今后的醫(yī)療語音系統(tǒng)開發(fā)。