kaldi lattice(網(wǎng)格)

https://shiweipku.gitbooks.io/chinese-doc-of-kaldi/content/lattice.html

一、lattice 基礎(chǔ)

????1、Lattice

????????① 它是一個(gè)FST;

????????② 輸入:transition-ids? ? ? 輸出:詞

????????③ 權(quán)重(weights):圖代價(jià)(graph cost) +? 聲學(xué)代價(jià) (acoustic cost

????2、CompactLattice(本質(zhì)上包含了和Lattice相同的信息)

????????① 它是acceptor(輸入域輸出符號始終相同,均為詞)

????????② 權(quán)重(weights): 一對浮點(diǎn)數(shù)(Lattice中的權(quán)重 )+ 一個(gè)整數(shù)序列(transition-ids)

????3、讀取 Lattice 和 CompactLattice 均可用 SequentialLatticeReader。

? ? ? ????兩者之間轉(zhuǎn)換可使用 ConvertLattice()

????4、Lattice 和 CompactLattice 類型被當(dāng)做數(shù)據(jù)結(jié)構(gòu)來表示傳統(tǒng)的網(wǎng)絡(luò),也用于表示 N-best 列表

????5、網(wǎng)絡(luò)上很多算法(如取最優(yōu)路徑,或剪枝)用Lattice 類型比 CompactLattice 類型效率更高。

? ? ? ????這是因?yàn)?CompactLattice 類型的權(quán)重包括了transition-ids 序列(比較難處理)。

? ? ????? 像取最有路徑的操作,會將權(quán)重相乘,對應(yīng)著序列相加 。

????6、對很多算法來說,時(shí)間復(fù)雜度是網(wǎng)格長度的平方

????7、Lattices 通常以 CompactLattice 的形式存儲在 archive(檔案)

? ? ? ????而且慣例是 acoustic weights 不采用縮放(存儲的時(shí)候不縮放)

? ? ????? 所以當(dāng)對 acoustic weights 做敏感的運(yùn)算(如剪枝),對應(yīng)的命令行會有 --acoustic-scale 選項(xiàng) (在 thch30 ????例子中是0.1 or 0.08333333),并在進(jìn)行運(yùn)算前縮放,運(yùn)算結(jié)束后縮放回來。

????ps: 思考:根據(jù)第7點(diǎn),調(diào)節(jié) --acoustic-scale 參數(shù)對模型調(diào)優(yōu)有沒有幫助?

二、與 weights 相關(guān) (graph cost, acoustic cost)

????1、LexicographicWeight 首先比較第一個(gè)元素并用第二個(gè)元素打破平局

????2、LatticeWeight? 首先比較和值,用差值打破平局

????3、根據(jù) 1和2 可知,LatticeWeight(a,b) 與 LexicographicWeight(a+b, a-b)等價(jià)

????4、LatticeWeight 的意圖是取總代價(jià)(graph+acoustic cost)最小的,同時(shí)分別記住 graph cost 和 acoustic cost

????5、之所以不用 LexicographicWeight 代替 LatticeWeight 是因?yàn)?(graph+acoustic cost, acoustic cost)這樣定義有些混亂

三、生成lattice

????1、目前,生成 lattice 的唯一解碼器是定義在 decoder/lattice-simple-decoder.h 中的類 LatticeSimpleDecoder,它被 gmm-latgen-simple.cc中調(diào)用

????2、LatticeSimpleDecoder 是由 SimpleDecoder 修改得到的

? ? ????? SimpleDecoder 是 Veterbi beam search 算法的一個(gè)直接實(shí)現(xiàn),只有一個(gè)可調(diào)參數(shù) :pruning beam

? ? ????? LatticeSimpleDecoder 有一個(gè)更重要的可調(diào)參數(shù):lattice beam (也可稱為 lattice-delta),一般比 pruning ????beam 小

????3、基本框架是:

????????① LatticeSimpleDecoder 先生成一個(gè)狀態(tài)級網(wǎng)絡(luò);

????????② 然后用 lattice-delta 剪枝;

????????③ 最后執(zhí)行 determinization算法,對每個(gè)詞序列僅保留最優(yōu)路徑

????4、在 SimpleDecoder 中,有引用計(jì)數(shù)的回溯(reference-counted tracebacks)

????????在 LatticeSimpleDecoder 中,單個(gè)回溯是不夠的,因?yàn)榫W(wǎng)格具有更復(fù)雜的結(jié)構(gòu)。

????????實(shí)際上,存儲前向鏈接比后向鏈接更方便。

????????為了釋放 lattice-delta pruning(剪枝) 時(shí)不需要的鏈接,我們需要做的比引用計(jì)數(shù)更多,實(shí)際上也沒有做引用計(jì)數(shù)。

四、一些 lattice 上的操作

????1、pruning lattices (剪枝)

????????網(wǎng)格可以用一個(gè)設(shè)定的 pruning beam 來剪枝。這會去掉和網(wǎng)格中最優(yōu)路徑的代價(jià)相差不夠小的那部分 arcs(弧) 和 states

????2、lattice composition (組合)

????① 組合網(wǎng)格

????????這是在轉(zhuǎn)換器(tansducer)形式下完成的。例如可以把網(wǎng)格看做 transition-ids 到 words 的一個(gè)轉(zhuǎn)換器

????② 組合網(wǎng)格和一個(gè)固定的FST (是指網(wǎng)格和 HCLG.fst 的組合嗎?)

????????為了這個(gè)目的, FST 被動態(tài)地轉(zhuǎn)換為網(wǎng)格;FST的權(quán)重解釋為網(wǎng)格權(quán)重的 "graph part"

????3、有些時(shí)候我們不需要網(wǎng)格結(jié)構(gòu)而是需要最佳路徑或 N-best 路徑

????????N-best 列表的格式和網(wǎng)格一樣,除了每個(gè)句子有多個(gè) FSTs (如果設(shè)定了n,最多 n 個(gè))

????4、如果想要網(wǎng)格的時(shí)間信息

????????① LatticeStateTimes 函數(shù) (for lattice)

????????② CompactLatticeStateTimes 函數(shù) (for CompactLattice)

五、總結(jié)

????根據(jù)之前看的資料,總結(jié)了一個(gè)基于 kaldi 的 ASR 和 KWS 流程,只是個(gè)人見解,可能存在不對的地方。

????1、wav2features 首先提取音頻特征(訓(xùn)練不同的模型需要的特征不一樣)

????2、提取的特征根據(jù)聲學(xué)模型 (final.mdl ?) 得到 phones or HMM states

????3、根據(jù) phones or HMM states 得到 lattices

????4、把 lattice 和 HCLG.fst 組合得到新的 FST,再從中得到 N-best 路徑

????5、根據(jù)最佳路徑得 ASR 解碼結(jié)果;

? ? ? ? ? 根據(jù) N-best 路徑搜索關(guān)鍵詞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容