用wfst來表徵asr中的模型(hclg),可以更方便的對這些模型進行融合和優化,於是可以作為乙個簡單而靈活的asr的解碼器(****** and flexible asr decoder design)。
利用wfts,我們可以吧ctc label,lexicon(字典),language models(語言模型)等模型結合起來,生成乙個簡單的search graph用於解碼。
wfts主要由composition、determinization和minimization這三大演算法來實現。
composition可以用於合併不同級別的representation,例如可以將乙個pronunciation lixicon(發音字典模型,可能是由音素到聲母和韻母的模型)和乙個word-level grammar(例如把聲母和韻母翻譯成字)字級別的模型結合起來生成乙個phone-to-word (直接由音素到字)的模型。效果圖如下:
上圖是將a模型和b模型結合成c模型的示意圖,例如(a)模型中的第一步有倆種方式,第一種0->1,a到b的權重為0.1(表示成a:b/0.1),第二種0->2,b:a/0.2,而(b)模型中的第一步只有一種情況,即0->1,b:c/0.3,我們可以看出,能吧(a),(b)倆個模型結合起來的只有一條路徑,a->b->c,即(a)模型走的那條路徑為0->1,a:b/0.1,(b)模型走的那條路徑為0->1,b:c/0.3,結合起來即重(0,0)->(1,1),a:c/0.4,如圖c所示,(權重為什麼要相加呢?這裡可能是因為我們要找出一條最優路徑來解碼,顯然結合倆個模型的代價肯定與倆個模型分別的代價的總量有關,意會就行哈哈哈~),接下來怎麼走呢?到達(1,1)後代表a模型中到達1位置了,此時又有倆條路徑可以走,分別為①1->1,c:a/0.3,②1->3,a:a/0.4,b此時也是在位置1,又只有一條路可以走,即1->2,a:b/0.4,我們可以發現這倆條路的標籤都可以結合起來,c:a可以與a:b結合起來,a:a也可以與a:b結合起來,分別到的倆個新目的地為(1,1)->(1,2) c:b/0.3+0.4=0.7和(1,1)->(3,2) a:b/0.4+0.4(感覺可以理解成這個」音素模型」(a)我把」120125410….」這一串東西成」nihao」,然後又有乙個模型(b)將」nihao」翻譯成」你好」,這倆個要能連起來才可以翻譯,感覺示意圖在語音識別的過程中大概就是這個意思吧?)同樣的,把其餘位置填完就可以把a和b結合起來組成模型c。
1. wfst
determinization的功能其實就是當離開某個狀態的轉移上的輸入標籤相同時,採取某種機制只保留其中的一條而不影響整個系統的結果,這樣離開某個狀態的轉移就是確定的了,因為每輸入乙個標籤,它都會到達唯一乙個確定的狀態。
找最優路徑即要找權重值和最小的那一條路徑,這也是為什麼保留權重值小的那個標籤的原因。
效果演示圖如下:
這裡0->1,0->2時的轉移標籤都為a,我只保留那條權重值比較小的標籤,即a/1,這樣到達1的a標籤的權重值只剩下0了,記成(1,0)儲存在下個狀態中,到達2的權重值還剩下a/2 - a/1 乙個權重值,記作(2,1),這個剩下來的權重在後面的路徑上還會加上去的,例如d/6 在圖b中就變成d/7了,是把之前的那個權重加進去了,這樣倆個模型中得到每個標籤的代價還是一樣的,不會變。
2. wfsa
wfst與前面wfsa不同的是,wfst的每個狀態轉移上都含有輸出標籤。同樣的,determinzation演示圖如下:
第一幅圖中,a:x/0.5,a表示輸入標籤,x表示輸出標籤,第一步輸入標籤為a的還是有倆個a:x/0.5,a:y/1.2,我們還是想要把他合併成乙個來簡化搜尋路徑,但是輸出分別為x和y,不一致,這裡由e表示x和y的的共同的元素,那麼他們的共同輸出就記作a:e/0.5,接下來到達點1的輸出標籤為x的權重還剩下0了,記作(1,x,0),到達點2的輸出標籤為y的還剩下1.2-0.5=0.7,記作(2,y,0.7),同樣的,下一步過程中合併輸入標籤相同的b,即得到右圖。
接著再把所有狀態都renumber一下並新增乙個真正的結束狀態得到下圖:
3.1 權重推移(weight pushing)
在很多序列識別的問題中我們都是通過找到最小的cost來解決問題的,那麼在wfst中我們同樣就是通過找到最大或者最小的權重路徑來解決問題的。
而pushing後權重都集中在前面可以降低整體的搜尋時間因為我們會一步步的把我們不需要的路徑排除掉,這樣一開始就可以排除掉了很多種可能路徑。
把權重推到前面,而每條路徑的總權重不發生改變,效果圖如下圖所示:
可以發現,這倆種不同的push方式在每條路徑上的權重和都不變。
3.2 為了能讓wfst中的狀態數最小,進行minimization效果圖如下:
如上圖,左邊之前由倆個e:z/0,我們想讓狀態數最小,而對應於不同的轉移線,怎麼把他們合併呢?即可以從後面往前面合併,把3,4倆個狀態消除乙個。合併後即得到右圖。
這樣經過composition合併不同的模型,從前往後determinization合併狀態數,再從後往前minimization合併狀態數來優化整個搜尋圖,來用於語音識別。
1 2
簡談python中的 call
最近在思考 call 和類方法的使用場景,雖然功能會有重疊,但凡存在的必是合理的,肯定會有輕微的不同,看了django以及部分框架的設計原始碼,各有各的設計風格,本著功能邊界的看法,所以做個總結。classa def init self,a,b self.a a self.b b defdo sta...
語音識別中的決策樹
1.為什麼需要決策樹 我們在使用htk進行語音識別模型訓練的過程中,首先進行的是單音素 單個高斯的模型訓練。拋開單個高斯不說,單音素模型本身有很大缺點 沒有考慮到本音素前後音素的發音對本音素的影響。比如,同樣是乙個音素iy,如果它前面的音素分別是h和p,那麼iy這個音素在這兩種情況下的發音會有所不同...
語音中的關於語音識別的一些知識
以下內容都是抄的,哈哈哈 1.mel頻率 是模擬人耳對不同頻率語音的感知。人類對不同頻率語音有不同的感知能力 對1khz以下,與頻率成線性關係,對1khz以上,與頻率成對數關係。頻率越高,感知能力就越差了。因此,在應用中常常只使用低頻mfcc,而丟棄中高頻mfcc。在mel頻域內,人對音調的感知能力...