馮 濤 何治斌 張永成
(大連海事大學船舶動態仿真與控制國家重點實驗室 遼寧 大連 116026)
輪機模擬器是能夠模擬船舶機艙中設備操作的系統,能夠體現船舶機艙中的實際操作情況。在一定程度上能夠克服實際中存在的缺陷,進行針對性的操作訓練。近些年在STCW公約馬尼拉修正案的標準約束下,輪機模擬器的交互方式也一直在發生著變化[1],而在傳統模擬器的實際操作中仍然存在著操作者的分工職能無法體現的缺陷[2],并且在VR技術應用于虛擬船舶機艙后,傳統的交互方式會破壞仿真環境下的沉浸感。語音識別技術的應用能夠在一定程度上解決這個問題,在訓練操作中如果出現超出操作者的職能范圍的操作,可以使用語音交互的方式對模擬器發出指令,來模擬合作者的身份,從而更好地體現分工合作的目的。在應用了VR技術后的虛擬船舶機艙中,語音識別可以使操作者擺脫鍵盤與鼠標的復雜交互方式,在虛擬船舶機艙中的交互更加便捷[3]。本實驗工作主要分為兩個部分:搭建語音識別系統;展示基于語音交互的發電機操作。
語音識別系統的任務是在輸入為音頻信號的情況下,輸出最可能的詞序列。搭建語音識別系統的核心工作是構建由語音特征矢量至模型詞序列之間的關系[4]。語音識別的原理可以用以下公式簡單概括:



可以看出,ASR(Automatic Speech Recognition)的概率模型分為P(Y|w)和P(w)兩個部分,其中:P(Y|w)表示在詞序列w一定的情況下獲得音頻信號Y的概率;P(w)表示在所有的字詞所組成的語句中,詞序列w的概率。前者在語音識別系統中通常被稱為聲學模型(Acoustic Model,AM),后者被稱為語言模型(Language Model,LM)。由式(2)可以看出語言模型和聲學模型對語音識別的結果至關重要,因此搭建語音識別系統的主要工作即在于對語言模型和聲學模型的建模[5]。語音識別系統的基本架構如圖1所示。

圖1 ASR架構
1.2.1語音信號處理與特征提取
處理語音信號并提取特征是訓練聲學模型的準備工作。通過設備采集到的音頻有低頻段信號能量小、信號不平穩等問題,需要進行信號數字化、預加重、加窗分幀等處理。本實驗提取語音信號的梅爾頻率倒譜系數(Mel-Frequency Cepstral Coefficients,MFCC)作為聲學模型訓練的聲學特征[6]。MFCC的特征提取流程如圖2所示。

圖2 MFCC提取流程
在提取特征的流程中,為了提高信號高頻部分的能量,使高頻信號共振峰更加明顯,對采集到的語音信號首先進行預加重。預加重濾波器為一階高通濾波器。給定時域輸入信號x(n),則預加重之后的信號可以表示為:
y(n)=x(n)-α(n-1) 0.9≤α≤1.0
(3)
由于語音信號為非平穩信號且具有短時平穩的特性,因此,對預加重后的語音信號進行分幀加窗來獲取短時平穩的語音信號。具體操作為在時域上使用窗函數與原始信號進行相乘,可由式(4)表示。
y(n)=ω(n)x(n)
(4)
式中:x(n)為輸入信號;ω(n)為窗函數;y(n)為加窗語音信號。窗函數的選取中較為常用的有:


對加窗分幀后的語音信號使用離散傅里葉變換,將時域信號變換到頻域,并取離散傅里葉變換系數的模,得到譜特征。對獲取的譜特征使用梅爾濾波器組進行濾波,然后對濾波后的結果取對數并進行離散余弦變換,獲取MFCC,這一過程的計算可表示為:
(7)
式中:M為梅爾濾波器組的個數;s(m)表示第m個濾波器的輸出;L為MFCC的階數。
為了使聲學模型在輪機模擬器的指令識別中表現得更好,采集輪機領域相關的音頻作為聲學模型的訓練語料,以80%、10%、10%的比例將數據劃分,分別用于對聲學模型的訓練、測試與開發。具體提取過程分為以下幾個步驟:
(1) 將語音信號通過高通濾波器進行預加重。
(2) 對預加重后的語音信號進行加窗分幀,使用漢明窗,幀長為25 ms,幀移為10 ms。
(3) 對分幀后的每一幀信號做離散傅里葉變換,將信號從時域變換至頻域,并計算功率譜。
(4) 使用梅爾濾波器組對功率譜進行濾波,提取每個濾波器內的對數能量。
(5) 對對數能量進行離散余弦變換,輸出12維原始MFCC。
(6) 計算原始MFCC的一階差分與二階差分、訊框能量、訊框能量的一階差分與二階差分,共計39維,作為生成聲學模型的MFCC特征。圖3為“啟動預潤滑油泵”的MFCC語譜圖展示。

圖3 “啟動預潤滑油泵”的MFCC語譜圖
1.2.2聲學模型訓練
本次實驗采用混合高斯隱馬爾可夫模型(Gaussianof Mixture Hidden Markov Model)對聲學模型進行建模。其中,HMM(Hidden Markov Model)用于對聲學特征序列進行建模,HMM是一種雙重隨機過程的概率模型,通過對有限個狀態之間的轉換概率進行建模來描述語音信號特征[7]。GMM(Gaussian of Mixture)用于對HMM中的每個狀態的輸出概率進行建模。GMM-HMM聲學模型的示意圖如圖4所示,其中:Si表示HMM的狀態序列;Oi表示觀測序列,在語音識別中表現為MFCC特征向量;aij表示從狀態i跳轉至狀態j的轉移概率;bi(Ot)表示由狀態Si輸出觀測Ot的概率。圖4中語音信號表示的語句為“出口截止閥打開”。

圖4 GMM-HMM聲學模型示意圖
聲學模型的訓練可表示為在已知觀測序列O=(o1,o2,…,oT)的情況下,估計模型λ使得P(O|λ)最大。使用Baum-Welch學習算法對GMM-HMM模型進行訓練,其具體步驟如下:
(1) 初始化GMM-HMM參數。
(2) E步(count):估計狀態占用概率γ,即給定模型γ與觀測O,在時刻t處于狀態Si的概率,表示為:
γt(i)=P(it=Si|O,λ)
(8)
(3) M步(normalize):基于估計的狀態占用概率,最大化期望,重新估計GMM-HMM的參數。
(4) 重復步驟(2)和步驟(3)直至收斂。
聲學模型的訓練在Kaldi平臺中實現,其部分展示如圖5所示。

圖5 聲學模型片段
1.3.1語料收集與處理
語言模型是一種數學模型,用來描述語言之間的規律,決定了語音識別的輸出結果是否符合語言邏輯。特定的語言模型能夠使語音識別系統在其所使用的領域中識別更準確。因此,本實驗從中國船務周刊、現代漢語語料庫等報刊與語料庫中選取輪機領域相關語料72 910句,并結合清華大學開源語料庫THCHS30,共計844 100句,作為本實驗訓練語言模型的語料。對收集到的生語料使用ICTCLAS工具進行分詞,將不同詞性的詞語進行劃分,并對句子起始使用進行標注。語料庫部分如圖6所示。

圖6 語料庫片段
1.3.2語言模型生成
語言模型的基本類型分為基于文法規則的語言模型和基于統計的語言模型兩種。基于文法規則的語言模型需要設立文法規則并對不同文法使用不同模型,工作量大且無法覆蓋所有的語言詞句之間的組合。基于統計的語言模型能夠使用統計的方法來處理語句之間的前后關系,在處理大型數據時較基于文法的語言模型更快速準確[8]。為實現大詞匯量的連續語音識別,本實驗采用基于統計的方法對語言模型進行建模。統計語言模型是在提供的語料庫中的所有詞序列上的一個概率分布,包含有限集合V與函數P(x1,x2,…,xn),且滿足以下條件:
對于任意
(9)
本實驗使用統計語言模型中的N-gram語言模型作為系統使用的語言模型,也可以稱為N元語言模型。N-gram所表示的含義為使用前N-1個詞作為歷史來估計第N個詞(當前詞)。一句由n個詞組成的句子S可以表示為:
式中:wi表示第i個詞。N-gram語言模型可以表示為:
使用SRILM工具訓練并測試語言模型。建立語言模型的步驟分為統計詞頻、生成語言模型、計算困惑度三個步驟。困惑度(Perplexity,ppl)是用來評價一個語言模型性能的指標,合乎邏輯的詞序列出現概率與其困惑度成反比。在測試集W=w1w2…wN中,語言模型的困惑度可以表示如下:
為了得到性能更優的語言模型,分別對基于Uni-gram、Bi-gram和Tri-gram的語言模型進行建模并對比三者困惑度。實驗結果如表1所示。

表1 三種語言模型的困惑度對比
在對語言模型進行測試的過程中,出現許多頻率為零的詞序列,這是由語料的稀疏性(sparse data)導致的。為了解決語言模型中出現的這一問題,通常使用平滑算法(Smoothing)處理語言模型,其主要思想是將一部分出現的詞序列概率分給未出現的詞序列。本次實驗采用Kneser-Ney平滑算法對語言模型進行處理。
Kneser-Ney平滑算法的基本思想為絕對折扣(absolute discounting)[9],并在此基礎上將絕對折扣與接續概率(continuation probability)進行插值,從而達到對語言模型進行平滑處理的效果。絕對折扣的具體操作是將語言模型中詞頻的統計計數直接減去一個數值,作為調整計數使用,減去的這個數值被稱作折扣系數。以Bi-gram為例,絕對折扣算法可以表示如下:
(14)
式中:wi為第i個詞;C(wi)為wi出現的次數;α(wi)為歸一化系數;D為折扣系數。
接續概率描述了當給定詞序列w1w2…wi-1后,下一個詞為wi概率。當一個詞在語料庫中出現更多種不同上下文時,其接續概率就更大。接續概率定義可以表示如下:
Kneser-Ney平滑算法將絕對折扣算法與接續概率結合并進行插值。以Bi-gram為例,可將Kneser-Ney算法表示如下:
(16)
經過Kneser-Ney平滑算法處理后,將語言模型以ARPA Format形式存儲。ARPA Format是N-gram的標準儲存模式,列舉了所有非零的N元語法概率。每個語法條目中從左至右依次為:折扣后對數概率、詞序列和回退權重。圖7為生成的語言模型片段。

圖7 語言模型片段
在完成聲學模型和語言模型的建模后,使用基于OnlineFasterDecoder的解碼器進行解碼,用以測試語音識別系統。為了驗證使用Kneser-Ney平滑算法處理過語言模型的語音識別系統的性能,使用未處理過語言模型的語音識別系統作為實驗對照組。由癱船啟動的流程操作指令構成測試使用的待識別語言,讓8個測試者對兩個語音識別系統各進行30次語音識別測試實驗。實驗結果如表2和表3所示。

表2 未使用平滑算法的語音識別系統測試結果

表3 使用Kneser-Ney平滑算法的語音識別系統測試結果
由實驗結果可以看出,在使用Kneser-Ney平滑算法處理語言模型后的語音識別系統中,測試平均識別準確率較未使用平滑算法的語音識別系統準確率提升20.4百分點,證明了Kneser-Ney平滑算法的有效性。處理后的語音識別系統的識別準確率可以滿足在輪機模擬器中對輪機設備日常操作的使用需求。該語音識別系統的構建也為語音識別系統應用于船舶機艙或無人船中打下了基礎。
為了在現有輪機模擬器中展示語音交互的效果,使用訊飛SDK提供的接口進行封裝調用,完成語音合成功能。在Windows平臺下設計船舶發電機啟動的語音交互流程。交互流程如下:
(1) 啟動語音識別程序,語音識別系統進入監聽狀態,如圖8所示。

圖8 發電機關閉狀態
(2) 通過麥克風講話,識別指令“啟動預潤滑油泵”,輪機模擬器啟動預潤滑油泵并通過語音播報“預潤滑油泵已開啟”。
(3) 識別“啟動輕油泵”指令,輪機模擬器啟動輕油泵并播報“輕油泵已啟動”。
(4) 識別“打開空氣截止閥”指令,輪機模擬器打開空氣截止閥并播報“空氣截止閥已打開”。
(5) 識別“啟動發電機”指令,輪機模擬器啟動發電機并播報“發電機已啟動”,如圖9所示。

圖9 發電機啟動狀態
通過測試表明,該交互系統表現良好,識別率高,行動執行準確。
作為最自然的交互方式,語音識別在智能家居的語音控制系統以及車載語音識別系統中已經十分成熟,但在輪機模擬器以及船舶機艙仿真中卻仍未有人實踐。語音識別在輪機模擬器中的應用不僅可以減少對輪機員培訓時的人力消耗,并且可以提升輪機員操作體驗。本實驗通過對語音信號的特征提取、聲學模型的建模、多元語言模型的對比實驗,最終完成用于輪機模擬器的語音識別系統,并在輪機模擬器的發電機操作上應用語音交互系統。實驗表明語音識別系統的識別率能夠滿足應用,解決了在培訓輪機員時一人身兼多職和在虛擬環境下的交互問題,為在實際船舶機艙與無人船中應用語音識別打下了基礎,對船舶輪機仿真系統的智能化具有促進意義。