車機從WinCE逐步進化到Android,從不能通訊到帶4G通訊,隨之帶來了一系列的新技術的應用。今天就來介紹當前車機必須技術之語音識別技術(全稱是自動語音識別 Automatic Speech Recognition,簡稱ASR)。
發展歷史
語音識別技術最早可以追溯到20世紀二、三十年代,如早期(1939年)貝爾實驗室在紐約世博會上展示了他們的語音綜合機器。
20世紀70年代中葉見證了在孤立字識別領域上許多里程碑式的進步。首先俄國的研究者們展示了在語音識別中運用模式識別(Pattern Recognition)的想法,日本的研究者成功運用到了動態編程編碼(Dynamic Programming code),其次卡內基梅隆大學在1973向世人展示了Heresay I語音理解系統,能夠在1011個單詞的詞匯表中以較好的準確性識別語音。
80年代起在連接詞識別上獲得了比較好的成效,特別是隱馬爾可夫模型(Hidden Markov Model,下面簡稱HMM)的發展并被大范圍的接受。同時語音識別最具轉折性和建設性的發展即統計方法的引入也是該時期的成就,包括HMM、期望最大化(EM),最大互信息(MMI)等,還有信號表述技術的發展也是該時期出現,如梅爾頻率倒譜系數(MFCC),感知線性預測常數(PLP)等。
時至今日,由于硬件的支持、GPU的發展使得深度學習不斷發展,許多研究者從傳統的高斯混合模型(GMM)和HMM結合轉向深度神經網絡(DNN)與HMM結合,并取得了不小的成效。另外還有兩點可喜的發展:一是語料庫的不斷完善和數據集的不斷增多(如TIMIT、TI46數據集等),二是面向大量音頻數據處理的工具的出現和不斷完善(如CMU的Sphinx,劍橋大學的HTK,國內的科大訊飛、云之聲等)。
基礎語音識別模型
一個標準的語音識別模型首先假定有一串輸入序列O = {O1, O2, .., On},以及符號詞典 W = {W1, W2, .., W_n},求解對于該輸入序列解碼出符號串(輸出語句)W = {W1, W2, .., Wk}。通過數學轉化成求解以下概率的最大值:
W = argmax(P(O|W)P(W))
其中P(O|W)被稱之為聲學模型,P(W)被稱為語言模型。 該模型的求解過程如下圖所示,其中的搜索,就是依據對公式中的聲學模型打分和語言模型打分,尋找一個詞模型序列以描述輸入語音信號,從而得到詞解碼序列。
大規模連續語音識別模型
大規模連續語音識別(Large Vocabulary Continuous Speech Recognition,LVCSR)不同于一般的模式識別,它需要解決一些棘手的特殊問題。比如說,在連續語音流中,每個發音都沒有一個清晰的邊界,難于進行一般的模式匹配,而且不同人之間的語音語速千差萬別,甚至同一個人不同時間的發音也有相當大的變化,這就給模型的建立提出了巨大的挑戰。另外,語言的規律千變萬化,使得實現高效智能的語音識別就更加困難。下圖為連續語音識別系統示意圖:
語音識別的工作流程
一般來說,一套完整的語音識別系統其工作過程分為7步:
對語音信號進行分析和處理,除去冗余信息。
提取影響語音識別的關鍵信息和表達語言含義的特征信息。
緊扣特征信息,用最小單元識別字詞。
按照不同語言的各自語法,依照先后次序識別字詞。
把前后意思當作輔助識別條件,有利于分析和識別。
按照語義分析,給關鍵信息劃分段落,取出所識別出的字詞并連接起來,同時根據語句意思調整句子構成。
結合語義,仔細分析上下文的相互聯系,對當前正在處理的語句進行適當修正。
前端參數化或特征提取
在語音識別中,特征抽取的主要目的是在給定一個緊湊的輸入信號表示計算出特征向量的簡約序列。主要分成三個步驟:語音分析(語音前端聲學處理);編譯成包含動靜態的擴展特征向量;將這些擴展后的特征向量轉化成影響因子更大的向量,然后提供給識別器,還包括預加重、分幀加窗及端點檢測等。
現在主要有下面的一些模型:
主元成分分析(PCA);
線性判別式分析(LDA);
獨立成分分析(ICA);
線性預測編碼(Perceptual Linear Predictive,PLP);
倒譜分析;
梅爾頻率倒譜系數(Mel Frequency Cepstrum Coefficient,MFFC)
濾波器分析;
基于核函數的特征抽取等。
特別說明中文聲學特征
一般將一個字的發音切割成兩個部分,分別是聲母(initials)與韻母(finals)。而在發音的過程之中,聲母轉變至韻母是一個漸進而非瞬間的改變,因此使用右文相關聲韻母模式(Right-Context-Dependent Initial Final, RCDIF)作為分析方法,可以更精準的辨識出正確的音節(syllable)。 而根據聲母的不同特征,又可以將聲母分為下面四類:爆破音(Plosive)、摩擦音(Fricative)、爆擦音(Affricate)、鼻音(Nasal)。
而韻母又有雙元音、單元音之分,要視再發生時是否有音調的改變。而根據聲帶振動與否,又分為清音(unvoiced:聲帶不震動)、濁音等差異,以上發音時不同的方式,在時頻圖上大多可以找到相對應的特征,透過處理二維的時頻圖,借由傳統影像處理的方式,達到語音辨識的目的。
聲學模型
聲學模型是語音識別系統中最為關鍵的一部分。聲學模型的目標是提供一種有效的方法,計算語音的特征矢量序列和每個發音模板之間的距離。聲學模型的設計和語言發音特點密切相關。模型識別單元大小(詞發音模型、字發音模型、 半音節模型或音素模型)對語音訓練數據量大小、 語音識別率,以及靈活性有較大的影響。對中等詞匯量以上的語音識別系統來說,識別單元小,則計算量也小,所需的模型存儲量也小,要求的訓練數據量相對也小,所需的模型存儲量也小,要求的訓練數據量相對也少,但帶來的問題是對應語音段的定位和分割困難,以及更復雜的識別模型規則。通常大的識別單元易于包括協同發音在模型中,這有利于提高系統的識別率,但要求的訓練數據相對增加,當然,對于現在大數據處理技術來說,訓練數據的增多問題不大。
以直接對詞進行建模是最直接的,也是最簡單的。但是這就需要在訓練數據中,每個詞都有足夠多的訓練樣本。這往往難以做到,尤其是對于大詞匯量語音識別。因此,現在普遍采用的是對音素(Phone,多個音素組成一個詞) 這樣的子詞單元進行建 模,隨著大數據處理技術和神經網絡的發展,也有按照詞為單位來建模的方式在研究。
下圖為基于隱式馬爾科夫模型HMM的音素模型:
具體識別鏈的例子:
語言模型
語言模型(Language Model,LM)是為了在語音識別的過程中有效地結合語法和語義的知識,提 高識別率,減少搜索的范圍。由于很難準確地確定詞的邊界,以及聲學模型描述語音變異性的能力有限,識別時將產生很多概率得分相似的詞的序列。 因此,在實用的語音識別系統中通常使用語言模型 P(W)從諸多候選結果中選擇最有可能的詞序列來彌補聲學模型的不足。
語言模型可以分為基于規則的語言模型和基于統計的語言模型。基于規則的語言模型是總結出語法規則乃至語義規則,然后用這些規則排除聲學識別中不合語法規則或語義規則的結果。統計語言模 型通過統計概率描述詞與詞之間的依賴關系,間接地對語法或語義規則進行編碼。基于規則的語言模型在特定任務系統中獲得很好的應用,可較大幅度提高系統的識別率。由于日常口語對話無法用嚴格的規則描述,在大詞匯量語音識別系統中主要采用 基于統計的語言模型。
識別方法或搜索模型
對于連續語音識別來講,識別的最終目的是從各種可能的音素模型狀態序列形成的網絡中找出最優的詞序列(即最優路徑)。這實質上屬于解碼算法或搜索算法的范疇。 語音識別算法的具體識別搜索算法的實現要根據語言的特點、模型的整體結構進行設計。
語音識別的搜索算法可以分為幾類:
深度優先(Depth-first),通常包括堆棧解碼器、A*解碼算法;
寬度優先 (Breadth-first)。包括維特比 (Viterbi)解碼算法;
人工智能方式:基于知識的專家系統;
神經網絡方式:多隱藏層的深度神經網絡(DNN),深度循環網絡(RNN)等。
一個完整例子:
對識別結果的評測
語音識別中的評測一般分為正確率 (Correctness)和準確率(Accuracy):
其中 , “NREF” 表示待識別詞的總數, “SUB”表示替換錯誤的次數,“DEL”表示刪除錯 誤的次數,“INS”表示插入錯誤的次數。
語音識別的挑戰
處理環境噪聲和缺失信息的處理,未來的語音識別系統還是要更優化地解決它。
各種變量對于語音處理的挑戰。比如說話風格,演說人的生理因素,年齡,情緒等。
對于語音系統可行度的評估分析。
對于數據中一些不能被詞典所包括的超綱詞匯以及生僻字對于語音識別的影響研究。
展望
當前簡單的語音識別技術已經比較成熟,進入了實用階段,訓練后的識別率普遍能達到95%以上。
但是針對諸如電話交談語音、微信交流語音,以及多方會議等復雜環境下的語音識別效果然仍需要有大的提升空間。
而對于聯系上下文對語義進行充分的識別,則還是處于初始起步階段,目前沒有很好的方式來實現,后續隨著人工智能、深度學習的發展,看在這個方面是否能有所突破。