- 原文地址:An Introduction to Speech Recognition using WFSTs
- 原文做者:Desh Raj
- 譯文出自:掘金翻譯計劃
- 本文永久連接:github.com/xitu/gold-m…
- 譯者:sisibeloved
- 校對者:xionglong58, JackEggie
以前,個人博客文章都是關於深度學習方法或者它們在 NLP 中的應用。而從幾周前,我開始研究自動語音識別(ASR)。所以,我如今也會發布一些語音相關的文章。html
ASR 的邏輯很是簡單(就是貝葉斯理論,如同機器學習領域的其它算法同樣)。本質上,ASR 就是對給定的語音波形進行轉換,好比識別與波形對應的文本。假設 Y 表示從波形中得到的特徵向量(注意:這個「特徵提取」自己是一個十分複雜的過程,我將在另外一篇文章中詳述),w 表示任意字符串的話,能夠得出如下公式:前端
公式中的兩個似然率是分開訓練的。第一個份量,稱爲聲學建模,使用包含話語和語音波形的平行語料庫進行訓練。第二個份量,稱爲語言建模,經過無監督的方式從大量文本中進行訓練。android
雖然 ASR 訓練從抽象層面看起來很簡單,但實現它的實現卻遠要複雜得多。咱們一般會使用加權有限狀態轉換機(WFST)來實現。在這篇文章中,我將介紹 WFST 及其基礎算法,並簡要介紹如何將它用於語音識別。ios
若是你以前上過計算機理論課程(譯者注:大多數人多是在編譯原理這門課上學的),你可能已經瞭解了自動機的概念。從概念上來講,有限自動機接受一種語言(一組字符串)做爲輸入。它們由有向圖表示,以下所示。git
每一個自動機由一個開始狀態,一個或多個最終狀態,以及用於鏈接狀態的帶有標號的邊組成。若是字符串在遍歷圖中的某個路徑後以最終狀態結束,則接受該字符串。例如,在上述 DFA(deterministic finite automata,肯定有限狀態自動機)中,a、ac 和 ae 會被接受。github
所以接受器將任何輸入字符串映射成二進制類 {0,1},具體取決於字符串是否被接受。而轉換機在每條邊上有 2 個標籤 —— 輸入標籤和輸出標籤。加權狀態轉換機,則更進一步,具備對應於每一個邊和每一個最終狀態的權重。算法
所以,WFST 是從字符串對到權重和的映射。該字符串對由沿着 WFST 的任何路徑的輸入/輸出標籤造成。對於圖中不可達的節點對,對應邊的權重是無窮大。後端
實際上,絕大部分語言都有對應的實現 WFST 的庫。在 C++ 中,OpenFST 是個較爲流行的庫,在 Kaldi 語音識別工具中也有用到。數據結構
原則上,咱們能夠不使用 WFST 實現語音識別算法。可是,這種數據結構具備多種通過驗證的結果和算法,可直接用於 ASR,而無需擔憂正確性和複雜度。這些優勢使得 WFST 在語音識別中幾乎無可匹敵。接下來我會總結 WFST 上的一些算法。架構
顧名思義,合併是指將 2 個 WFST 組合造成單個 WFST 的過程。若是咱們有發音和單詞級語法的轉換機,這種算法將使咱們可以輕鬆地搭建一個語音轉文字的系統。
合併遵循如下 3 個原則:
如下是一個合併示例:
對於邊的權重來講,「總和」的定義很重要。藉助於半環的概念,WFST 能夠接受廣義上的「語言」。從基本概念上來說,它是一組具備 2 個運算符的元素,即 ⊕ 和 ⊗。根據半環的類型,這些運算符能夠有不一樣的定義。例如,在熱帶半環中,⊕ 表示取最小值,⊗ 表示相加。此外,在任意 WFST 中,一整條路徑的權重之和等於沿路徑的各條邊的權重相 ⊗(注意:對於熱帶半環來講這裏的「相乘」意味着相加),多條路徑的權重之和等於具備相同的符號序列的路徑相 ⊕。
這裏是 OpenFST 中對於合併的實現。
肯定自動機是每一個狀態中每種標籤只有一個轉移的自動機。經過這樣的表達式,肯定化的 WFST 消除了全部冗餘並大大下降了基礎語法的複雜性。那麼,是否是全部 WFST 均可以肯定化呢?
孿生屬性:假設有一個自動機 A,A 中有兩個狀態 p 和 q。若是 p 和 q 都具備相同的字符串輸入 x,並有相同標籤的循環 y,則稱 p 和 q 爲兄弟狀態。從概念上講,到該狀態爲止的路徑(包括循環在內)的總權重相等,則這兩個兄弟狀態是孿生的。
當全部兄弟狀態是孿生的時,這個 WFST 是能夠被肯定化的。
這是我以前所說的關於 WFST 是 ASR 中使用的算法的有效實現的一個例子。有幾種方法能夠肯定化 WFST。其中一種算法以下所示:
該算法簡化後的步驟以下:
因爲這是一種本地算法,所以能夠高效地在內存中實現。要了解如何在 OpenFST 中進行肯定化,請參閱此處。
儘管最小化不如肯定化那樣重要,但它仍然是一種很好的優化技術。它用於最小化肯定的 WFST 中的狀態和轉移的數量。
最小化的步驟分爲兩步:
在 OpenFST 中,能夠在這裏找到最小化的具體實現。
下圖(來自[3])展現了 WFST 優化的完整流程:
在語音識別中,多個 WFST 會被串行組合,順序以下:
整體上,將轉換機按 H o C o L o G 組合能夠表示完整的語音識別的流程。其中每一個部分均可以單獨改進,從而改善整個 ASR 系統。
WFST 是 ASR 系統的重要組成部分,這篇文章只是簡要地對 WFST 做了介紹。在其它與語音相關的帖子中,我會討論諸如特徵提取,流行的 GMM-HMM 模型和最新的深度學習進展之類的事情。我也在閱讀這些論文,以便更好地瞭解 ASR 多年來的發展歷程。
若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。
掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。