[譯] 使用 WFST 進行語音識別

以前,個人博客文章都是關於深度學習方法或者它們在 NLP 中的應用。而從幾周前,我開始研究自動語音識別(ASR)。所以,我如今也會發布一些語音相關的文章。html

ASR 的邏輯很是簡單(就是貝葉斯理論,如同機器學習領域的其它算法同樣)。本質上,ASR 就是對給定的語音波形進行轉換,好比識別與波形對應的文本。假設 Y 表示從波形中得到的特徵向量(注意:這個「特徵提取」自己是一個十分複雜的過程,我將在另外一篇文章中詳述),w 表示任意字符串的話,能夠得出如下公式:前端

公式中的兩個似然率是分開訓練的。第一個份量,稱爲聲學建模,使用包含話語和語音波形的平行語料庫進行訓練。第二個份量,稱爲語言建模,經過無監督的方式從大量文本中進行訓練。android

雖然 ASR 訓練從抽象層面看起來很簡單,但實現它的實現卻遠要複雜得多。咱們一般會使用加權有限狀態轉換機(WFST)來實現。在這篇文章中,我將介紹 WFST 及其基礎算法,並簡要介紹如何將它用於語音識別。ios

加權有限狀態轉換機(Weighted Finite State Transducer,WFST)

若是你以前上過計算機理論課程(譯者注:大多數人多是在編譯原理這門課上學的),你可能已經瞭解了自動機的概念。從概念上來講,有限自動機接受一種語言(一組字符串)做爲輸入。它們由有向圖表示,以下所示。git

每一個自動機由一個開始狀態,一個或多個最終狀態,以及用於鏈接狀態的帶有標號的邊組成。若是字符串在遍歷圖中的某個路徑後以最終狀態結束,則接受該字符串。例如,在上述 DFA(deterministic finite automata,肯定有限狀態自動機)中,aacae 會被接受。github

所以接受器將任何輸入字符串映射成二進制類 {0,1},具體取決於字符串是否被接受。而轉換機在每條邊上有 2 個標籤 —— 輸入標籤和輸出標籤。加權狀態轉換機,則更進一步,具備對應於每一個邊和每一個最終狀態的權重。算法

所以,WFST 是從字符串對到權重和的映射。該字符串對由沿着 WFST 的任何路徑的輸入/輸出標籤造成。對於圖中不可達的節點對,對應邊的權重是無窮大。後端

實際上,絕大部分語言都有對應的實現 WFST 的庫。在 C++ 中,OpenFST 是個較爲流行的庫,在 Kaldi 語音識別工具中也有用到。數據結構

原則上,咱們能夠不使用 WFST 實現語音識別算法。可是,這種數據結構具備多種通過驗證的結果和算法,可直接用於 ASR,而無需擔憂正確性和複雜度。這些優勢使得 WFST 在語音識別中幾乎無可匹敵。接下來我會總結 WFST 上的一些算法。架構

WFST 中的基礎算法

合併

顧名思義,合併是指將 2 個 WFST 組合造成單個 WFST 的過程。若是咱們有發音和單詞級語法的轉換機,這種算法將使咱們可以輕鬆地搭建一個語音轉文字的系統。

合併遵循如下 3 個原則:

  1. 將原先的 WFST 的初始狀態結合成對,造成新 WFST 的初始狀態。
  2. 相似地,將最終狀態結合成對。
  3. 若是存在第一個 WFST 的輸出標籤等於第二個 WFST 的輸入標籤這種狀況,從起點對添加一條邊到終點對。邊的權重爲原始權重之「和」。

如下是一個合併示例:

對於邊的權重來講,「總和」的定義很重要。藉助於半環的概念,WFST 能夠接受廣義上的「語言」。從基本概念上來說,它是一組具備 2 個運算符的元素,即 ⊕ 和 ⊗。根據半環的類型,這些運算符能夠有不一樣的定義。例如,在熱帶半環中,⊕ 表示取最小值,⊗ 表示相加。此外,在任意 WFST 中,一整條路徑的權重之和等於沿路徑的各條邊的權重相 ⊗(注意:對於熱帶半環來講這裏的「相乘」意味着相加),多條路徑的權重之和等於具備相同的符號序列的路徑相 ⊕。

這裏是 OpenFST 中對於合併的實現。

肯定化

肯定自動機是每一個狀態中每種標籤只有一個轉移的自動機。經過這樣的表達式,肯定化的 WFST 消除了全部冗餘並大大下降了基礎語法的複雜性。那麼,是否是全部 WFST 均可以肯定化呢?

孿生屬性:假設有一個自動機 A,A 中有兩個狀態 pq。若是 pq 都具備相同的字符串輸入 x,並有相同標籤的循環 y,則稱 pq 爲兄弟狀態。從概念上講,到該狀態爲止的路徑(包括循環在內)的總權重相等,則這兩個兄弟狀態是孿生的。

當全部兄弟狀態是孿生的時,這個 WFST 是能夠被肯定化的。

這是我以前所說的關於 WFST 是 ASR 中使用的算法的有效實現的一個例子。有幾種方法能夠肯定化 WFST。其中一種算法以下所示:

該算法簡化後的步驟以下:

  • 在每一個狀態下,對於每一個輸出標籤,若是該標籤有多個輸出邊,則將其替換爲單個邊,其權重爲包含該標籤的全部邊的權重的 ⊕ 總和。

因爲這是一種本地算法,所以能夠高效地在內存中實現。要了解如何在 OpenFST 中進行肯定化,請參閱此處

最小化

儘管最小化不如肯定化那樣重要,但它仍然是一種很好的優化技術。它用於最小化肯定的 WFST 中的狀態和轉移的數量。

最小化的步驟分爲兩步:

  1. 權重推移:全部權重都被推往開始狀態。請參閱如下示例。

  1. 完成此操做後,咱們將到最終狀態的路徑相同的狀態組合。例如,在上述 WFST 中,狀態 1 和 2 在權重推移後變得相同,所以它們被組合成了一個狀態。

在 OpenFST 中,能夠在這裏找到最小化的具體實現。

下圖(來自[3])展現了 WFST 優化的完整流程:

WFST 在語音識別中的應用

在語音識別中,多個 WFST 會被串行組合,順序以下:

  1. 語法(G):使用大型語料庫訓練的語言模型。
  2. 詞彙表(L):用於將不包含上下文的語音的似然度的信息編碼。
  3. 依賴上下文的語音處理(C):相似 n 元語言模型,惟一的不一樣點是它做用於語音處理。
  4. HMM 架構(H):用於處理波形的模型。

整體上,將轉換機按 H o C o L o G 組合能夠表示完整的語音識別的流程。其中每一個部分均可以單獨改進,從而改善整個 ASR 系統。

WFST 是 ASR 系統的重要組成部分,這篇文章只是簡要地對 WFST 做了介紹。在其它與語音相關的帖子中,我會討論諸如特徵提取,流行的 GMM-HMM 模型和最新的深度學習進展之類的事情。我也在閱讀這些論文,以便更好地瞭解 ASR 多年來的發展歷程。

參考文獻

  • [1] Gales、Mark 和 Steve Young 著《隱馬爾可夫模型在語音識別中的應用》,Foundations and Trends® in Signal Processing 1.3 (2008): 195–304.
  • [2] Mohri、 Mehryar、Fernando Pereira 和 Michael Riley 著《語音識別中的加權有限狀態機》,Computer Speech & Language 16.1 (2002): 69–88.
  • [3] 江輝教授(約克大學)的課堂講義

若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索