標籤:

語音識別中的Lattice這個概念怎麼理解?

解碼過程中經常出現, 但是感覺對這個概念的理解似是而非, Kaldi中有一小節(Lattices in Kaldi)描述, 還有相關論文, 但是看了之後更迷糊了. 有沒有人能講講自己的理解?


在實際的語音識別系統中,最優路徑不一定與實際字序列匹配,我們一般希望能夠得到得分最靠前的多條候選路徑,即N-best。為了緊湊地保存候選路徑,防止佔用過多內存空間,我們一般採用詞格(Lattice)來保存識別的候選序列。詞格沒有一般的定義,常用的方法是利用有限狀態自動機的數據結構來構建詞格。


詞網格(word lattice),在國內亦被稱作詞圖,本質上是一個有向無環(directed acyclic graph)圖。每個詞網格包含一個開始結點以及一個結束結點,分別用&和&表示,即在每個詞網格中,僅存在一個入度(in-degree)為0的節點和一個出度(out-degree)為0的節點。圖1為一個簡單的詞網格表示:

圖1 信息在節點上的詞網格

圖2 信息在弧上的詞網格

在圖1中,開始節點和結束分別位於圖中的最左端和最右端,每個節點與下一個節點用一有向弧連接,每個節點上存有相應的信息。比如在語音識別的結果表示上,每個節點存放當前位置上語音識別的結果,包括聲學概率、語言概率等信息。有些詞網格會將識別信息放在弧上,如圖2所示,其實本質上與信息存放在結點上是一致的。HTK中會提供選項供用戶選擇其中一種表示方式。我比較傾向於採用信息在節點上(words on nodes)的表示方式,選擇這種方式的最直接原因是基於節省空間的目的,因為在第二種表示方式(words on arcs)中,相同的詞會被重複多次,比如圖2中的「北京」、「背景」等詞,這會造成大量的空間浪費,而在圖1中,每個word僅需保存一次,空間需求較小。但將信息放在弧上也有優勢,在解碼搜索時,直接取出弧上的信息即可,而採用第一種方式,需要查看前驅結點來獲得識別信息,需要一些額外的工作,因此效率沒有第二種方式高,這也是「以空間換時間還是以時間換空間」思想的另一個體現。

在語音識別中,詞網格是識別結果的一種比較緊湊的表示形式,可以用較少的存儲空間來表示較多的識別結果。以圖1的簡單表示為例,就有「&北京歡迎你&」、「&北京換映你&」、「&背景歡迎你&」、「&背景換映你&」這四種結果,隨著結點和弧的增多,最終的結果數量會以指數的形式增長。


推薦閱讀:

語音識別技術的干擾因素有哪些?
做好嘈雜環境的語音識別,目前難點主要在哪裡?
如何理解小米MIX2的雙ADC高清錄音?
科大訊飛一直漲啊,語音就這麼有未來嗎?

TAG:語音識別 |