ctc全稱,connectionist temporal classification,可以理解為基於神經網路的時序類分類。語音識別中聲學模型的訓練屬於監督學習,需要知道每一幀對應的label才能進行有效的訓練,在訓練的資料準備階段必須要對語音進行強制對齊。對於語音的一幀資料,很難給出乙個label,但是幾十幀資料就容易判斷出對應的發音label。ctc的引入可以放寬了這種逐一對應的要求,只需要乙個輸入序列和乙個輸出序列即可以訓練。ctc解決這一問題的方法是,在標註符號集中加乙個空白符號blank,然後利用rnn進行標註,最後把blank符號和**出的重複符號消除。比如有可能**除了乙個"--a-bb",就對應序列"ab",這樣就讓rnn可以對長度小於輸入序列的標註序列進行**了。rnn的訓練需要用到前向後向演算法(forward-backward algorithm),大概思路是:對於給定**序列,比如「ab」,在各個字元間插入空白符號,建立起籬笆網路(trellis),然後對將所有可能對映到給定**的序列都窮舉出來求和。
ctc有兩點好處:不需要對資料對齊和一一標註;ctc直接輸出序列**的概率,不需要外部的後處理。
在端到端的語音識別中有以下問題:
1).輸入語音序列和標籤(即文字結果)的長度不一致
2).標籤和輸入序列的位置是不確定的(對齊問題)
即長度問題和對齊問題,多個輸入幀對應乙個輸出或者乙個輸入對多個輸出。
系統可以通過雙向rnn進行建模。rnn用來訓練得到每個時刻不同音素的概率分布。
輸入:按時序輸入的每一幀的特徵。
輸出:每乙個時刻的輸出,是乙個softmax,表示k+1個類別的不同概率,k表示音素的個數,1表示blank。(分類問題,是某個音素or空白)
對於給定時序長度為t的輸入特徵序列和任意乙個輸出標籤序列π=。輸出為該序列的概率為每個時刻相應標籤的概率乘積:
把上式中的pr概率寫成y,就變為**中的原始公式(y表示softmax輸出的概率):
因為輸出序列和最後的訓練標籤一般不等長,我們用x表示輸入序列,y表示對於的標籤,a表示我們之前**的序列:採用乙個many-to-one的對應準則β(去除blank和重複),使上述的輸出序列與給定的標籤序列對應,比如(a,-,b,c,-,-)和(-,-,a,-,b,c)都對映成標籤y(a,b,c)。
表示β的逆過程,即one-to-many,也就是把(a,b,c)對映成有重複和blank的所有可能,所以最終的標籤y為給定輸入序列x在lstm模型下各個序列標籤的概率之和:
所以給定乙個輸入序列x和乙個標註l*,上式為給定輸入x,輸出序列為 l
'>l
的概率。
lstm的目標函式最大化上述概率值(最小化負對數)。
ctc的損失函式定義如下所示:
其中 p(z
|x)'>p(z|x)
p(z|x) 代表給定輸入x,輸出序列 z
'>z
z 的概率,s為訓練集。損失函式可以解釋為:給定樣本後輸出正確label的概率的乘積,再取負對數就是損失函式了。取負號之後我們通過最小化損失函式,就可以使輸出正確的label的概率達到最大了。
由於上述定義的損失函式是可微的,因此我們可以求出它對每乙個權重的導數,然後就可以使用梯度下降、adam等優化演算法來進行求解。
CTC學習筆記(三) 解碼
解碼是對於輸入序列x找出概率最大的輸出序列l,而不是概率最大的一條輸出路徑,因為輸出路徑和輸出序列是多對一關係。l argm axl argmax l arg max最優路徑找出每一幀輸出的最大概率組成的輸出序列即為最後的解碼結果,這種方式會引入問題。對於上圖,這種方法解碼出來的結果是blank,但...
CTC學習筆記(一) 簡介
connectionist temporal classification簡稱ctc,翻譯不太清楚,可以理解為基於神經網路的時序類分類。其中classification比較好理解,表示分類問題 temporal可以理解為時序類問題,比如語音識別的一幀資料,很難給出乙個label,但是幾十幀資料就容易...
CTC學習筆記(三) 解碼
解碼是對於輸入序列x找出概率最大的輸出序列l,而不是概率最大的一條輸出路徑,因為輸出路徑和輸出序列是多對一關係。l ar gmax l argmax 北 b ei京 j ing 當t 1的時候,每個w的前兩個tok被啟用 當t 2的時候,每個w的tok只能在單詞內傳播,對於 北 來說,tok 北,3...