Chapter1-3_Speech_Recognition(CTC, RNN-T and more)
文章目錄
- 1 CTC
- 2 RNN-T
- 3 Neural Transducer
- 4 Monotonic Chunkwise Attention
- 5 小結(jié)
本文為李弘毅老師【Speech Recognition - CTC, RNN-T and more】的課程筆記,課程視頻youtube地址,點這里👈(需翻墻)。
下文中用到的圖片均來自于李宏毅老師的PPT,若有侵權(quán),必定刪除。
文章索引:
上篇 - 1-2 LAS
下篇 - 1-4 HMM
總目錄
1 CTC
CTC源于論文Connectionist Temporal Classification: Labelling Unsegmented
Sequence Data with Recurrent Neural Networks,是用來訓(xùn)練RNN的一種方法,它被廣泛應(yīng)用于一些標(biāo)簽未與輸入對齊的任務(wù)中,如語音識別、圖像文本識別等等。說簡單點,就比如我們今天有一段語音"Hello",然后我們的標(biāo)簽一般來說只會是"Hello"這樣幾個字符,從標(biāo)簽中,我們無法知道語音的哪幾秒對應(yīng)了"H",哪幾秒對應(yīng)了"e"。所以當(dāng)我們的Encoder輸出一個長度和輸入相等為TTT的序列時,我們沒法和標(biāo)簽對齊,也就沒法去算這個loss。當(dāng)然,我們可以再加一個RNN的decoder來解決問題,但我們也可以減小一些模型的大小,直接利用CTC來處理Encoder的輸出。
沒錯,利用CTC來計算loss的話,我們只需要Encoder就可以了。不過這個時候,我們每個time step的輸出要比vocabulary的size大1,這多出來的一個就是CTC需要的間隔符,這里記作?\phi?。
這個?\phi?是我們?nèi)藶榧舆M去的,出現(xiàn)在模型輸出的結(jié)果中,但不應(yīng)該出現(xiàn)在最終得到的結(jié)果當(dāng)中,因為vacabulary里是沒有這個?\phi?的。所以,在解析模型輸出結(jié)果的時候,我們定義了如下兩條規(guī)則:
- 首先合并所有的相鄰重復(fù)字符
- 然后去除掉所有的?\phi?
哦,對了,還有一條規(guī)則,這個是在構(gòu)建模型和數(shù)據(jù)集的時候需要注意的:
- label的長度必須不大于模型輸出的長度
實際情況下,label的長度最好是遠小于模型輸出的長度,因為label中有重復(fù)字符的話,模型的輸出就必須加入額外的?\phi?才可能解析出和label一樣的結(jié)果。
如下是幾個轉(zhuǎn)化的例子:
從上面的例子也不難推斷出,模型不同的輸出也可以得到相同的結(jié)果,比如下圖左邊的三種輸出都可以解析得到相同的文字。CTC在訓(xùn)練的時候會去窮舉所有可能的對齊方式。
也正是因為CTC的這些特性,模型classifier(第一張圖??)的每一個time step的最終輸出結(jié)果是獨立的,在面對有很多重復(fù)的輸入時,CTC很容易壞掉。
為了解決這個問題,有人提出了一種叫做RNA(Recurrent Neural Aligner)的方法。它就是把CTC獨立的classifier換成了一個RNN就結(jié)束了。這樣模型在輸出token的時候,就可以參考前面的輸出了。
不過,這樣還有一個問題,就是面對一個輸入,需要有多個輸出的時候,該怎么辦?比如“th”的發(fā)音只有一個音節(jié),但是輸出卻有兩個字母。這個時候就輪到RNN-T出場了。
2 RNN-T
RNN-T出自論文Sequence Transduction with Recurrent Neural Networks。它在RNA的基礎(chǔ)上做了改進,解決了上述一對多的問題。它的改進在于,每個time step產(chǎn)生輸出的時候,一直要等到模型輸出了?\phi?,才會繼續(xù)去看下一個time step的內(nèi)容,如下圖所示。
所以,RNN-T的運算流程是長這個樣子的。輸入sequence的長度有多長,那么就會產(chǎn)生多少個?\phi?。
而實際的RNN-T,還會再多做一步,就是它會以輸出的token為輸入,加了一個RNN的模型去影響輸出的token,如下圖所示。不過,這個RNN會無視?\phi?。
這里多加入的RNN模型可以看成一個language model,可以先單獨train好再拿進來。
3 Neural Transducer
Neural Transducer又繼續(xù)做了優(yōu)化,就是每次不是只看一個time step的hidden state來進行輸出,而是看一個長度為www的窗口內(nèi)的hidden states來做attention,之后再塞進RNN里去得到token,輸出?\phi?后再看下一個窗口。這個有些細節(jié)我也沒去細看,李老師也只是略講了一下,這里就當(dāng)了解一下吧。
4 Monotonic Chunkwise Attention
MoCha(Monotonic Chunkwise Attention)也是略講了一下,它就是一個窗口可以自由選擇移動的Neural Transducer,這里我也偷下懶不說了。
5 小結(jié)
結(jié)合上篇所講的LAS,現(xiàn)在一共講了6個模型。
- LAS:就是seq2seq的標(biāo)準(zhǔn)模型
- CTC:decoder是linear classifier的seq2seq模型
- RNA:輸入一個東西就要輸出一個東西的seq2seq模型
- RNN-T:輸入一個東西,可以輸出多個東西的seq2seq模型
- Neural Transducer:每次輸入一個window的RNN-T
- MoCha:window移動伸縮自如的Neural Transducer
總結(jié)
以上是生活随笔為你收集整理的Chapter1-3_Speech_Recognition(CTC, RNN-T and more)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1801. 积压订单中
- 下一篇: LeetCode 1894. 找到需要补