雷鋒網按:本文作者潘復平,地平線機器人語音識別算法工程師。博士畢業於中國科學院聲學研究所,曾任聲學所副研究員、百度語音技術部資深工程師等職位。在中科院工作期間曾領導完成多個"863"、教育部和中科院的科研項目。在百度工作期間把解碼器的搜索空間大小壓縮到了原來的十分之一,解碼速度提高了約30%,並在置信度、VAD等方面大幅提高了系統性能。現任地平線機器人語音識別算法工程師,深度參與地平線「安徒生」智能家居平臺的研發。
語音識別技術,也被稱為自動語音識別(Automatic Speech Recognition,ASR),其目標是將人類語音中的詞彙內容轉換為計算機可讀的輸入,例如按鍵、二進位編碼或者字符序列。與說話人識別及說話人確認不同,後者嘗試識別或確認發出語音的說話人而非其中所包含的詞彙內容。
智能硬體行業的不斷發展,對計算機深度學習能力提出了更大的挑戰。為了滿足人工智慧技術快速產品化的訴求,進一步提升用戶體驗,未來的智能終端必須具備出色的與人交流、溝通的能力。人工智慧產品這種交互功能的實現是與語音解碼器技術密切相關的。本期「大牛講堂」主講潘復平博士將為我們科普高大上的「語音識別專題」之語音解碼技術。
基本原理
當前主流的語音識別系統多基於統計理論的貝葉斯準則。其典型框架一般包含前端處理、聲學模型、語言模型、解碼器和後處理等五個基本模塊。解碼器模塊主要完成的工作包括:給定輸入特徵序列的情況下,在由聲學模型、聲學上下文、發音詞典和語言模型等四種知識源組成的搜索空間(Search Space)中,通過維特比(Viterbi)搜索,尋找最佳詞串,使得滿足:
(1.1)
通過貝葉斯公式,公式(1.1)可以改寫為:
(1.2)
其中,分母項與無關,被省略。除了上述最優路徑,如果在Viterbi搜索中還保留了次優路徑,則解碼器可同時產生包含多候選識別結果的詞圖。
引入隱馬爾可夫模型和N元文法語言模型,公式(1.2)可表示為:
(1.3)
其中為單詞的狀態轉移序列,為狀態轉移概率。
公式(1.3)中,已經引入了Viterbi最大近似假設,這個假設會帶來一定的精度損失,但是其運算量卻大大降低。在解碼過程中,各種解碼器的具體實現可以是不同的。按搜索空間的構成方式來分,有動態編譯和靜態編譯兩種方式。關於靜態編譯,是把所有知識源統一編譯在一個狀態網絡中,在解碼過程中,根據節點間的轉移權重獲得概率信息。
由AT&T提出的Weighted Finite State Transducer(WFST)方法是一種有效編譯搜索空間並消除冗餘信息的方法。就動態編譯而言,只是預先將發音詞典編譯成狀態網絡構成搜索空間,其他知識源在解碼過程中根據活躍路徑上攜帶的歷史信息動態集成。
按搜索算法的時間模式來分,有異步與同步兩種方式。時間異步的搜索算法通過棧解碼器(Stack Decoder)來實現。時間同步的方法就是常說的Viterbi解碼。基於樹拷貝的幀同步解碼器是目前比較流行的方法。下面將針對搜索空間的兩種構成方式與幀同步解碼算法作進一步詳細介紹。
動態解碼網絡
動態解碼網絡僅僅把詞典編譯為狀態網絡,構成搜索空間。編譯的一般流程為:首先把詞典中的所有單詞並聯構成並聯網絡;然後把單詞替換為音素串;接著把每個音素根據上下文拆分為狀態序列;最後把狀態網絡的首尾根據音素上下文一致的原則進行連接,構成迴環。這樣編譯出來的網絡一般稱為線性詞典(Linear Lexicon)(如圖2-1),它的特點是每個單詞的狀態序列保持嚴格獨立,不同單詞的狀態之間沒有節點共享,因此內存佔用比較大,解碼過程中的重複計算比較多。
為了克服這些缺點,一般把單詞首尾發音相同的部分進行合併,稱為樹型詞典(Tree Lexicon)(如圖2-2)。由於大量相同狀態的節點被合併在一起,因此可以顯著降低搜索空間的規模,減少解碼過程的運算量。
圖2-1 線性詞典示例
圖2-2 樹形詞典示例
基於樹拷貝的動態規劃搜索算法
在樹形詞典構成的搜索空間中進行動態解碼,如果使用N-Gram語言模型,當前詞的ID只有在搜索到達樹的葉子節點時才能知道。這樣,語言模型的概率只有在達到N-Gram中第N個單詞的結束狀態後才能集成。為了能夠應用動態規劃準則,常用的做法是採用「樹拷貝」(Tree Copy)的方式來組織搜索空間:對於每個前驅詞歷史,我們引入詞典樹的一份拷貝,這樣在搜索的過程中,當單詞結束的假設出現時,我們總能夠知道它的前驅詞歷史。為了方便描述,下面以Bi-Gram語言模型為例介紹解碼搜索算法。
基於樹拷貝的解碼搜索需要用到動態規劃(Dynamic Programming,DP)算法。動態規劃的主要意圖是把一個全局最優問題的求解分解為小的局部問題並且形成遞歸聯繫。
下面首先引入兩個變量的定義:
•表示時刻t到達前驅詞為v的詞典樹狀態s的最佳部分路徑得分。
•表示時刻t到達前驅詞為v的詞典樹狀態s的最佳部分路徑起始時間。
這兩個變量的計算可以採用如下的迭代公式:
(3-1)&(3-2)
這裡表示前驅詞為v時假設(t, s)的最佳前驅狀態。後向指針只是簡單的根據動態規劃的決策進行傳播。
在詞的邊界,我們需要為每個單詞w找到它的最佳前驅詞v。為此我們定義:
(3-3)
這裡表示詞典樹中單詞w的結束狀態。為了能夠向下一個單詞傳播路徑假設,我們需要在處理時刻t的數據幀前傳遞分數和時間索引:
(3-4)&(3-5)
算法的流程見表3-1。從表中可以看出,DP遞歸包含兩個層次:
聲學層,主要是處理詞內部一些假設的重新組合;
詞對層,處理Bigram語言模型的使用。
該搜索過程是一個時間同步寬度有限的搜索策略。為了降低存儲量的需要,可以引入一個回溯數組用於記錄在每一個時間幀的詞邊界(v, w)和它們的開始時間。在句子的結束處,通過對回溯數組的一些查找操作可以很輕鬆地獲得識別出來的單詞序列。
束剪枝
對於大詞表連續語音識別中的完全DP搜索,在每個時間幀,DP遞歸程序面臨巨大數目的HMM狀態。如果採用一定的剪枝策略,則可以把計算量降低,同時保證識別率基本不下降。常用的剪枝操作主要從如下三個方面進行:
根據搜索空間中所有活躍路徑累計概率的最大值,設定一個門限,把累計概率小於該門限的那些路徑裁剪掉。
當活躍路逕到達單詞末尾後,可以取得單詞ID,同時在累計概率中加入語言模型得分。由於語言模型概率的加入,增大了不同路徑間的概率區分性,因此可以把到達詞尾的路徑歸集在一起,根據累計概率最大值設置門限,把累計概率小於門限的那些路徑裁剪掉。
這種剪枝方法是繪製活躍路徑累計概率的直方圖分布,然後根據事先設定的最大允許活躍路徑數量上限,算出合適的累計概率門限,把小於門限的活躍路徑裁剪掉,以避免路徑數量的爆炸性增長。
靜態解碼網絡
大詞表連續語音識別所常用的四類模型:HMM、跨詞三音子模型、詞典以及語言模型,實際上是在不同粒度上描述了可能的搜索空間:
1、HMM 模型定義了每個三音子所對應的HMM狀態序列。語音識別時,通過對每一幀所對應的狀態進行假設,可以在HMM的狀態序列上進行搜索,從而產生可能的三音子序列;
2、跨詞三音子模型定義了從三音子到音素的對應關係。根據HMM模型產生的三音子序列,可以得到可能的音素序列;
3、詞典定義了音素序列所表示的詞。根據跨詞三音子模型產生的可能的音素序列,可以得到相應的詞序列;
4、語言模型定義了詞序列出現的概率。根據詞典產生的詞序列,可以得到該序列的概率得分;
上述過程是非常複雜的,系統需要同時考慮4類模型以及模型之間的約束關係,以完成「從可能的狀態序列到可能的詞序列之間的轉換」。
20世紀90年代末期,美國電話電報公司(AT&T)的Mohri率先提出了以加權有限狀態轉換器(Weighted Finite-state Transducer: WFST)對語音識別過程中所使用的各種模型進行描述。此後,相關的研究紛紛出現。與傳統動態網絡解碼相比,基於WFST的識別系統在識別之前利用上述模型產生語音識別用的靜態解碼網絡,這個網絡包含了所有可能的搜索空間。
在此基礎上進行語音識別時,系統只需要將這個識別網絡(WFST網絡)讀入內存,然後基於聲學模型就可以在這個網絡上完成解碼,不需要像原有系統那樣同時考慮聲學模型、詞典、語言模型等。這樣簡化了語音識別系統的設計與實現。實驗表明,用WFST構建的語音識別系統具有識別速度快,識別效果好的特性。
所謂靜態網絡就是根據已知的模型,將它們代表的搜索空間進行組合,從而得到一個統一的識別網絡:從輸入HMM狀態序列,直接得到詞序列及其相關得分。基於WFST構建靜態解碼網絡是一個相對複雜的過程。構建網絡的第一步是將上述四類模型轉換成WFST表示。然後再依次進行WFST網絡的合併和壓縮,從而得到完整的語音識別靜態搜索空間。
我們用H、C、L、G分別表示上述HMM模型、三音子模型、字典和語言模型的WFST形式。不難看出,這四個模型在語音識別中相當於4個串聯的子系統。每一個子系統的輸出是下一個子系統的輸入。使用WFST的合成操作可以實現將上述串聯繫統組合成一個 WFST。使用HMM的狀態序列作為這個 WFST的輸入時,系統將直接輸出詞序列以及相應的得分。
但是,直接求空間複雜度較高,合成的結果佔用內存非常之大。為了在有限的內存中完成解碼網絡的構建,需要對信息逐步引入,並在每一步引入信息之後進行優化,為下一步引入信息做準備。同時,建立好靜態解碼網絡後,還需要進一步的優化,使得網絡能夠有較小的體積。基於上述思想,一般網絡構建的流程為:
(5.1)
其中的det表示確定化算法;min表示最小化算法;為 ε-Removal 算法。式(5-1) 在逐步引入信息的同時採用確定化算法對網絡結構進行優化。而在將所有信息引入後,需要採用WFST的最小化算法以及ε-Removal算法完成進一步的優化,使得形成的識別網絡較小。
基於靜態解碼網絡的搜索算法與基於動態網絡的動態規劃搜索算法類似,也是採用了迭代計算,讓概率信息在網絡節點間傳遞更新。不同之處在於,由於靜態網絡已經把搜索空間全部展開,所以它不需要根據解碼路徑的前驅詞構造搜索空間副本,也不需要在詞尾節點根據歷史信息查詢語言模型概率,它只需要根據節點間的轉移權重計算聲學概率和累計概率即可,因此解碼速度非常快。
雷鋒網(公眾號:雷鋒網)註:本文由大牛講堂授權雷鋒網發布,如需轉載請聯繫原作者,並註明作者和出處,不得刪減內容。有興趣可以關注公號地平線機器人技術,了解最新消息。
雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。