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