構建CTC語音識別解碼網絡


物聯網

  本文介紹 kaldi-ctc 構建 CTC[1, 2, 3, 4] 語音識別加權有限狀態機(WFST)解碼網絡的方式。

  示例相關資源 lifeiteng/codingmath/CTC-decoding-graph

  構建語言模型

  以 單句 “how are you are” 作為文本語料,訓練 bi-gram(order=2)語言模型

物聯網

  生成 G.fst [data/lang_2/G.pdf],如下圖

物聯網

  准備"發音" 詞典

  不同單元 phone[1, 2] / character[3, 4],都可以抽象為“發音”詞典的形式,以 phone 詞典為例

物聯網

  其中 !SIL SIL 為額外添加,作為 OOV 的替換符號使用,亦可使用其他記號 e.g. UNK NSN 。

物聯網

  其中 --num-sil-states 1 --num-nonsil-states 1 用於構建單狀態TransitionModel(HMM)。

  生成 L.fst [data/lang_2/L.pdf]

物聯網

  Optinal 的 SIL( SIL : / 2_1 )使得發音詞典與語言模型 Composition 之后的搜索空間允許單詞間停頓而不影響語言模型概率計算。

  構建HCLG

  像 DNN-HMM hybrid 系統一樣構建HCLG[5]:

物聯網

  kaldi-ctc 可以方便構建CI[1] phone / CD[2] phone / character[3, 4] 的 CTC 系統,只需構建相應 CI-phone / CD-phone / character 的決策樹和訓練數據即可。

  HCLG [exp/mono_ctc_decoding_graph/HCLG.pdf] 網絡:

物聯網

  修改HCLG 構建CTC解碼網絡

  修改 HCLG 的 input label(即 TransitionId)並插入 blank loop 構建CTC解碼網絡。

  arc.ilabel++, 添加 blank loop

物聯網

  最終 CTC 解碼網絡如下: [exp/mono_ctc_decoding_graph/CTC.pdf]

物聯網

  解碼時從解碼網絡獲得TransitionId轉為對應的PdfId做為 RNN 輸出層索引獲得

  log_likelihood = log(RNN output[pdf_id]) - log(prior[pdf_id])

  尖峰現象

  以 CTC 准則訓練的 RNN 模型輸出概率有明顯的尖峰現象[1]: [images/pink.png]

物聯網

 

  解碼時跳過blank概率接近1的幀可以極大提升實時率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM