Chapter1-3_Speech_Recognition(CTC, RNN-T and more)

本文爲李弘毅老師【Speech Recognition - CTC, RNN-T and more】的課程筆記,課程視頻youtube地址,點這裏👈(需翻牆)。

下文中用到的圖片均來自於李宏毅老師的PPT,若有侵權,必定刪除。

文章索引:

上篇 - 1-2 LAS

下篇 - 1-4 HMM

總目錄

1 CTC

CTC源於論文Connectionist Temporal Classification: Labelling Unsegmented
Sequence Data with Recurrent Neural Networks
,是用來訓練RNN的一種方法,它被廣泛應用於一些標籤未與輸入對齊的任務中,如語音識別、圖像文本識別等等。說簡單點,就比如我們今天有一段語音"Hello",然後我們的標籤一般來說只會是"Hello"這樣幾個字符,從標籤中,我們無法知道語音的哪幾秒對應了"H",哪幾秒對應了"e"。所以當我們的Encoder輸出一個長度和輸入相等爲TT的序列時,我們沒法和標籤對齊,也就沒法去算這個loss。當然,我們可以再加一個RNN的decoder來解決問題,但我們也可以減小一些模型的大小,直接利用CTC來處理Encoder的輸出。

沒錯,利用CTC來計算loss的話,我們只需要Encoder就可以了。不過這個時候,我們每個time step的輸出要比vocabulary的size大1,這多出來的一個就是CTC需要的間隔符,這裏記作ϕ\phi
ch1-3-1
這個ϕ\phi是我們人爲加進去的,出現在模型輸出的結果中,但不應該出現在最終得到的結果當中,因爲vacabulary裏是沒有這個ϕ\phi的。所以,在解析模型輸出結果的時候,我們定義瞭如下兩條規則:

  • 首先合併所有的相鄰重複字符
  • 然後去除掉所有的ϕ\phi

哦,對了,還有一條規則,這個是在構建模型和數據集的時候需要注意的:

  • label的長度必須不大於模型輸出的長度

實際情況下,label的長度最好是遠小於模型輸出的長度,因爲label中有重複字符的話,模型的輸出就必須加入額外的ϕ\phi纔可能解析出和label一樣的結果。

如下是幾個轉化的例子:
ch1-3-2
從上面的例子也不難推斷出,模型不同的輸出也可以得到相同的結果,比如下圖左邊的三種輸出都可以解析得到相同的文字。CTC在訓練的時候回去窮舉所有可能的對齊方式。
ch1-3-3
也正是因爲CTC的這些特性,模型classifier(第一張圖☝️)的每一個time step的最終輸出結果是獨立的,在面對有很多重複的輸入時,CTC很容易壞掉。

爲了解決這個問題,有人提出了一種叫做RNA(Recurrent Neural Aligner)的方法。它就是把CTC獨立的classifier換成了一個RNN就結束了。這樣模型在輸出token的時候,就可以參考前面的輸出了。
ch1-3-4
不過,這樣還有一個問題,就是面對一個輸入,需要有多個輸出的時候,該怎麼辦?比如“th”的發音只有一個音節,但是輸出卻有兩個字母。這個時候就輪到RNN-T出場了。

2 RNN-T

RNN-T出自論文Sequence Transduction with Recurrent Neural Networks。它在RNA的基礎上做了改進,解決了上述一對多的問題。它的改進在於,每個time step產生輸出的時候,一直要等到模型輸出了ϕ\phi,纔會繼續去看下一個time step的內容,如下圖所示。
ch1-3-5
所以,RNN-T的運算流程是長這個樣子的。輸入sequence的長度有多長,那麼就會產生多少個ϕ\phi
ch1-3-6
而實際的RNN-T,還會再多做一步,就是它會以輸出的token爲輸入,加了一個RNN的模型去影響輸出的token,如下圖所示。不過,這個RNN會無視ϕ\phi
ch1-3-7
這裏多加入的RNN模型可以看成一個language model,可以先單獨train好再拿進來。

3 Neural Transducer

Neural Transducer又繼續做了優化,就是每次不是隻看一個time step的hidden state來進行輸出,而是看一個長度爲ww的窗口內的hidden states來做attention,之後再塞進RNN裏去得到token,輸出ϕ\phi後再看下一個窗口。這個有些細節我也沒去細看,李老師也只是略講了一下,這裏就當瞭解一下吧。
ch1-3-8

4 Monotonic Chunkwise Attention

MoCha(Monotonic Chunkwise Attention)也是略講了一下,它就是一個窗口可以自由選擇移動的Neural Transducer,這裏我也偷下懶不說了。

5 小結

結合上篇所講的LAS,現在一共講了6個模型。

  • LAS:就是seq2seq的標準模型
  • CTC:decoder是linear classifier的seq2seq模型
  • RNA:輸入一個東西就要輸出一個東西的seq2seq模型
  • RNN-T:輸入一個東西,可以輸出多個東西的seq2seq模型
  • Neural Transducer:每次輸入一個window的RNN-T
  • MoCha:window移動伸縮自如的Neural Transducer
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章