1. 程式人生 > 其它 >基於RNN和CTC的語音識別模型,探索語境偏移解決之道

基於RNN和CTC的語音識別模型,探索語境偏移解決之道

摘要:在本文介紹的工作中,我們展示了一個基於RNN和CTC的語音識別模型,在這個模型中,基於WFST的解碼能夠有效地融合詞典和語言模型.

本文分享自華為雲社群《語境偏移如何解決?專有領域端到端ASR之路(三)》,原文作者:xiaoye0829 。

這篇文章我們介紹一個結合CTC與WFST (weighted finite-state transducers) 的工作:《EESEN: END-TO-END SPEECH RECOGNITION USING DEEP RNN MODELS AND WFST-BASED DECODING》。

在這個工作中,聲學模型的建模是利用RNN去預測上下文無關的音素或者字元,然後使用CTC去對齊語音和label。這篇文章與眾不同的一個點是基於WFST提出了一種通用的解碼方法,可以在CTC解碼的時候融入詞典和語言模型。在這個方法中,CTC labels、詞典、以及語言模型被編碼到一個WFST中,然後合成一個綜合的搜尋圖。這種基於WFST的方式可以很方便地處理CTC裡的blank標籤和進行beam search。

在這篇博文中,我們不再敘述關於RNN和CTC的內容。主要關注如何利用WFST進行解碼的模組。一個WFST就是一個有限狀態接收器(finite-state acceptor, FSA),每一個轉換狀態都有一個輸入符號,一個輸出符號,和一個權重。

上圖是一個語言模型WFST的示意圖。弧上的權重是當給定了前面的詞語,發射得到下一個詞的概率。節點0是開始節點,節點4是結束節點。WFST中的一條路徑包含一系列輸入符號到輸出符號的發射序列。我們的解碼方法將CTC labels,詞典(lexicons),以及語言模型表示成分別的WFST,然後利用高度優化的FST庫,比如OpenFST,我們能有效地將這些WFST融合成一個單獨的搜尋圖。下面我們開始介紹,如何開始構建單個的WFST。

  • 1、語法(Grammar).一個語法WFST編碼了語言允許的單詞序列。上圖是一個精簡的語言模型。它有兩條序列:“how are you”和“how is it”。WFST的基本符號單位是word,弧上的權重是語言模型的概率。利用這種WFST形式的表示,CTC解碼原則上可以利用任何能被轉換成WFST的語言模型。按照Kaldi中的表示方式,這個語言模型的WFST被表示為G。
  • 2、詞典(lexicon).一個詞典WFST編碼了從詞典單元序列到單詞的對映。根據RNN的對應的label的建模單元,這個詞典有兩種對應的情況。如果label是音素,那麼這個詞典是與傳統的hybrid模型相同的標準詞典。如果label是character,那麼這個詞典簡單地包含了每個單詞的拼寫。這兩種情況的區別在於拼寫詞典能夠較為容易地拓展到包含任何OOV(詞彙表之外)的單詞。相反,拓展音素詞典不是那麼直觀,它依賴於一些grapheme-to-phoneme的方法或者模型,並且容易產生錯誤。這個詞典WFST被表示成L,下圖展示了兩個詞典構建L的例子:

第一個例子展示了音素詞典的構建,假如音素詞典的條目為“is IH Z”,下面的一個例子展示了拼寫詞典的構建,“is i s”。對於拼寫詞典,有另一個複雜的問題需要處理,當以character為CTC的標籤時,我們通常在兩個word間插入一個額外的空格(space)去建模原始轉寫之前的單詞間隔。在解碼的時候,我們允許空格選擇性地出現在一個單詞的開頭和結尾。這種情況能夠很輕易地被WFST處理。

除了英文之外,我們這裡也展示一箇中文詞典的條目。

  • 3、令牌(token).第三個WFST將幀級別的CTC標籤序列對映到單個詞典單元(音素或者character)上。對一個詞典單元,token級的WFST被用來歸入所有可能的幀級的標籤序列。因此,這個WFST允許空白標籤∅的出現,以及任何非空白標籤的重複。舉例來說,在輸入5幀之後,RNN模型可能輸出3種標籤序列:“AAAAA”,“∅∅AA∅”,“∅AAA∅”。Token wfst將這三個序列對映到一個詞典單元:“A”上。下圖展示了一個音素“IH”的WFST,這個圖中允許空白<blank>標籤的出現,以及非空白標籤“IH”的重複出現。我們將這個token的WFST表示成T。
  • 4、搜尋圖.在分別編譯完三個WFST後,我們將它們合成一個全面的搜尋圖。首先合成詞典WFST L和語法WFST G,在這個過程中,確定性(determinization)和最小化(minimization)被使用,這兩個操作是為了壓縮搜尋空間和加速解碼。這個合成的WFST LG,然後與token的WFST進行合成,最後生成搜尋圖。總得FST操作的順序是:S = T о min(det(LоG))。這個搜尋圖S編碼了從一個由語音幀對應的CTC標籤序列對映到單詞序列的過程。具體來說,就是首先將語言模型中的單詞解析成音素,構成LG圖。然後RNN輸出每幀對應的標籤(音素或者blank),根據這個標籤序列去LG圖中進行搜尋。

當解碼混合DNN模型時,我們需要使用先驗狀態去縮放來自DNN的後驗狀態,這個先驗通常由訓練資料中的強制對齊估計得到的。在解碼由CTC訓練得到的模型時,我們採用一個相似的過程。具體地,我們用最終的RNN模型在整個訓練集上運行了一遍,具有最大後驗的labels被選出來作為幀級的對齊,然後利用這種對齊,我們去估計標籤的先驗。然而,這種方法在我們的實驗中表現得並不好,部分原因是由於利用CTC訓練的模型在softmax層後的輸出表現出高度的巔峰分佈(即CTC模型傾向於輸出單個非空的label,因此整個分佈會出現很多尖峰),表現在大部分的幀對應的label為blank標籤,而非blank的標籤只出現在很狹窄的一個區域內,這使得先驗分佈的估計會被空白幀的數量主導。作為替代,我們從訓練集中的標籤序列裡去估計更魯棒的標籤先驗,即從增強後的標籤序列中去計算先驗。假設原始的標籤為:“IH Z”,那麼增強後的標籤可能為“∅ IH ∅ Z ∅”等。通過統計在每幀上的標籤分佈數量,我們可以得到標籤的先驗資訊。

上面介紹了基於WFST的方法,我們接下來來看一下實驗部分。在進行後驗分佈正則之後,這個聲學模型的分數需要被縮小,縮放因子在0.5~0.9之間,最佳的縮放值通過實驗決定。本文的實驗是WSJ上進行的。本文使用的最佳模型是一個基於音素的RNN模型,在eval92測試集上,在使用詞典與語言模型時,這個模型達到了7.87%的WER,當只用詞典時,WER快速升高到了26.92%。下圖展示了本文的Eesen模型與傳統hybrid模型的效果對比。從這個表中,我們可以看到Eesen模型比混合的HMM/DNN模型較差一些。但是在更大的資料集上,比如Switchboard,CTC訓練的模型能獲得比傳統模型更好的效果。

Eesen的一個顯著的優勢是,相較於混合的HMM/DNN模型,解碼速度大大加快了。這種加速來源於狀態數量的大幅減少。從下表的解碼速度可以看出來,Eesen獲取了3.2倍以上的解碼速度加速。並且,在Eesen模型中用到的TLG圖,也明顯小於HMM/DNN中用到的HCLG圖,這也節約了用於儲存模型的磁碟空間。

總得來說,在本文介紹的工作中,我們展示了一個基於RNN和CTC的語音識別模型,在這個模型中,基於WFST的解碼能夠有效地融合詞典和語言模型.

點選關注,第一時間瞭解華為雲新鮮技術~