lattice
在實際的語音識別系統中,最優路徑不一定與實際字序列匹配,我們一般希望能夠得到得分最靠前的多條候選路徑,即N-best。為了緊湊地保存候選路徑,我們一般采用lattice(詞圖)來保存識別的候選序列。lattice本質上是一個有向無環圖。圖上的每個節點代表一個詞的結束時間點,每條邊代表一個可能的詞,以及該詞發生的聲學得分和語言模型得分。
在生成one-best結果時,只需要從最優結果處回溯,但是為了生成lattice,我們需要保留更多信息,具體就是生成每一個hist的時候保留多個候選alt,這樣在回溯best hist的時候也訪問alt來生成lattice。可以認為原始hist是有效信息再節點上的lattice,而上圖中的lattice有效信息都在邊上。在lattice上從左往右的任何一條路徑,就構成一個識別結果,路徑上每條邊的聲學得分相加,再加上路徑對應的語言得分,就是整條路經的得分,通常取得分最大的前N條路徑對應的詞串作為識別的N-Best結果輸出。上面lattice的生成用的語言模型往往不夠精確,通常還需要在lattice上用更大的語言模型進行rescore。
原始的lattice可能會非常龐大,上圖給出的只是一個很小的lattice,這是我們可以對lattice進行剪枝但是不影響最終的準確率。一種剪枝方法是對lattice進行前向后向打分,計算每條邊的后驗概率,然后刪除后驗概率很低的邊。對上圖進行剪枝后獲得下圖:
相比原圖,上面的lattice簡化了不少,但是最重要的信息并沒有丟失。通過計算后驗概率,我們可以很容易地知道每條邊在整個lattice中的重要性。
https://www.smwenku.com/a/5b83ca272b71777cb15c1388
latgen-faster-mapped:生成lattice
lattice-scale:對lattice權重縮放。
lattice-add-penalty:lattice中添加單詞插入懲罰
lattice-best-path:通過lattice生成one-best路徑,轉錄或者對齊作為輸出。
lattice-align-words:轉換lattice,使CompactLattice格式的弧與字詞對應。
lattice-align-phones:轉換lattices,使CompactLattice格式的弧與音素對應。
https://pages.harryfyodor.xyz/2017/11/13/decoder-intro/
有了HCLG解碼圖,如何解碼?
首先,假設輸入的語音有T幀,我們將之構建成T+1的狀態WFSA。邊上的信息是上下文相關的HMM模型和相關的loglikelihood。把這一個WFSA和已經有的HCLG進行合并得到一個圖。這個圖叫做搜索圖,而解碼的過程就相當于在這個搜索圖里面尋找最優路徑,可以使用維特比算法加上剪枝來尋找最優路徑。
在kaldi實現中,合成的搜索圖的邊信息需要包括圖損失(graph cost)和語音損失(acoustic cost)。實際操作中,對每一個HCLG的邊,計算每一幀的語音損耗,每過25ms進行一次剪枝。最后得到一個lattice,記為P。把P輸入輸出翻轉,得到Q。翻轉的目的是為了對每個詞序列里的詞都保留最佳的路線(此時的Q輸入是單詞,輸出是一個一個概率分布),保留最好的分割方案。然后再編碼為E。最后講過一些優化,就可以得到最好的L。L的每一條路徑都是當前語音輸入的可能結果。
總結
- 上一篇: 腾讯笔试--前端
- 下一篇: Xshell“所选的用户密钥未在远程主机