LAS是Listen(Encoder),Attend,和Spell(Decoder)的簡稱
第一個步驟Listen(Encoder)
listen的作用是輸入一段語音訊號,輸出一段向量,去掉語音中的雜序,只保留和語音有關的部分。
上圖中acoustic features表示的是每一幀的聲音訊號。
listen進行encoder
- RNN
- CNN
將fliter沿著時間的方向掃過每一個acoustic features ,每一個fliter會吃一個範圍的acoustic features進去得到一個數值,不同的fliter會產生不同的數值,最後生成的是一個向量。 - self-attention layers
listen的時候進行down sampling(降取樣)
一段聲音訊號表示成acoustic features的時候太長,1秒鐘的聲音訊號有100個向量,且相鄰的向量之間包含的資訊量也相差不大,所以在做語音識別的過程中,為了保持訓練過程更有效率,就產生了down sampling.
- 減少RNN的運算量
pyramid RNN
Pooling over time
上圖中每一層都是RNN。左邊是將相鄰兩個加起來送到下一層,右邊是在相鄰兩個之間選擇一個送到下一層。 - 減少CNN和self-attention的運算量
在做attention時,每一個時間點的feature都會去attend 整個輸入序列中所有的feature,在做翻譯時可能表現很好,但在語音識別中,一秒鐘就有100個acoustic features,太長了,無法很好的做attention。因此truncated self-attention限制attention的長度,只看未來和過去一段時間的輸入序列。
第二個步驟Attention
兩種常用的attention方式
- dot-product attention
- additive attention
attntion 的過程
上圖中$z_0$和encode的每一個$h$進行一個計算,$z_0$和$h1$計算得到$\alpha_01$ , 和$h2$計算得到$\alpha_02$ , ....。Encoder會輸入一串acoustic features ,每一個acoustic features都對應一個輸出,每一個輸出都會得到一個$\alpha$,然後將得到的$\alpha$經過一個softmax層,得到$\hat{\alpha}$,最終$z_0$的attention的值$c0$為最後概率和輸出的乘積形式。$c0$作為下一個decode的輸入,在文獻中$c^0$一般寫成context vector。
第三個步驟Spell
-
初始的$z_0$做attention後spell
上圖中輸出distribute over all tokens就是對詞典中每一個詞彙生成一個概率,所有概率之和為1。具體輸出什麼詞彙就看那個概率最大,概率最大的即為當前的輸出。 -
再拿hidden state 中的$z_1$繼續去做attention
算出新的$\alpha$的值,經過softmax後$\hat{\alpha}$值,最後用$\hat{\alpha}$乘以$h$得到$c^1$作為下一次decode的輸入。
上一次spell的輸出(此處是c),上一個hidden state $z1$,和decode的輸入$c1$共同決定了hidden state 的值$z2$,然後將$z2$做一個attention,以此類推,...其示意圖如下:
訓練
teacher forcing
在訓練過程中可能會存在一個問題,就是之後的輸出和之前的輸出有關,所以如果前面的輸入錯了的話,後面無論怎麼訓練都無法達到好的訓練效果,因此在訓練時加一個teacher forcing ,直接將上一時刻正確的結果作為下一次的輸入,避免前面一錯全錯。
attention的一些知識
- attention的不同用法
左邊和右邊的差異就是,attention得到的結果是在下一個time_step使用還是在這一個time_step使用。到底哪一個好也不好判斷,但第一次用此方法做論文的是兩種方法都使用了。attention得到的結果在當前步和下一步都使用一次。 - location-aware attention
在attention的過程中,按照我們的想法,應該是從左到右,注意力慢慢轉移,但是在實際運算中,注意力可能是隨便亂跳的,這就和我們的初衷相違背。
現在在attention進行計算的時候,$z0$在和$h2$進行attention計算時,也要考慮與$h^2$相鄰的區域的取值。
補充
1.Beam Search
原始的輸出是尋找當前步驟的最大值(類似於貪心演算法),很容易陷入區域性最優,剛開始很好,但可能最後的一條路徑並不是概率最大的。假設每次只有兩種情況A,B供選擇。beam search不是隻保留當前的最大值,而是保留當前最優的k個值,k的具體取值自己調,k越大,找出最大路徑的可能性越大,但是所需的算力也越大,k越小,所需的算力小,但是找出最大路徑的可能性也越小,當k=1時,beam search 退化為貪心演算法。
LAS的侷限性
- 1.LAS包含attention,所以需要encoder將所有的語音聽完,這就導致無法聽一部分就輸出一部分,不能online。