語音識別2 -- Listen,Attend,and Spell (LAS)

周霖發表於2020-11-25

LAS是Listen(Encoder),Attend,和Spell(Decoder)的簡稱

第一個步驟Listen(Encoder)

listen的作用是輸入一段語音訊號,輸出一段向量,去掉語音中的雜序,只保留和語音有關的部分。Listen
上圖中acoustic features表示的是每一幀的聲音訊號。

listen進行encoder

  • RNN
    雙向RNN進行encoder
  • CNN
    將fliter沿著時間的方向掃過每一個acoustic features ,每一個fliter會吃一個範圍的acoustic features進去得到一個數值,不同的fliter會產生不同的數值,最後生成的是一個向量。CNN進行encoder
  • self-attention layers
    self_sttention進行encoder

listen的時候進行down sampling(降取樣)

一段聲音訊號表示成acoustic features的時候太長,1秒鐘的聲音訊號有100個向量,且相鄰的向量之間包含的資訊量也相差不大,所以在做語音識別的過程中,為了保持訓練過程更有效率,就產生了down sampling.

  • 減少RNN的運算量
    down-sampling
    pyramid RNN
    Pooling over time
    上圖中每一層都是RNN。左邊是將相鄰兩個加起來送到下一層,右邊是在相鄰兩個之間選擇一個送到下一層。
  • 減少CNN和self-attention的運算量
    down-sampling在做attention時,每一個時間點的feature都會去attend 整個輸入序列中所有的feature,在做翻譯時可能表現很好,但在語音識別中,一秒鐘就有100個acoustic features,太長了,無法很好的做attention。因此truncated self-attention限制attention的長度,只看未來和過去一段時間的輸入序列。

第二個步驟Attention

兩種常用的attention方式

  • dot-product attention
    dot-product attention
  • additive attention
    additive attention

attntion 的過程

attention 過程上圖中$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後spellspell
    上圖中輸出distribute over all tokens就是對詞典中每一個詞彙生成一個概率,所有概率之和為1。具體輸出什麼詞彙就看那個概率最大,概率最大的即為當前的輸出。

  • 再拿hidden state 中的$z_1$繼續去做attention
    z1進行attention
    算出新的$\alpha$的值,經過softmax後$\hat{\alpha}$值,最後用$\hat{\alpha}$乘以$h$得到$c^1$作為下一次decode的輸入。
    attntion的結果作為decoder的輸入
    上一次spell的輸出(此處是c),上一個hidden state $z1$,和decode的輸入$c1$共同決定了hidden state 的值$z2$,然後將$z2$做一個attention,以此類推,...其示意圖如下:
    整個LAS過程

訓練

teacher forcing

c0進行decoder
在訓練過程中可能會存在一個問題,就是之後的輸出和之前的輸出有關,所以如果前面的輸入錯了的話,後面無論怎麼訓練都無法達到好的訓練效果,因此在訓練時加一個teacher forcing ,直接將上一時刻正確的結果作為下一次的輸入,避免前面一錯全錯。
teacher forcing18.png19.png

attention的一些知識

  • attention的不同用法
    attention的兩種方式左邊和右邊的差異就是,attention得到的結果是在下一個time_step使用還是在這一個time_step使用。到底哪一個好也不好判斷,但第一次用此方法做論文的是兩種方法都使用了。attention得到的結果在當前步和下一步都使用一次。實際處理的方式
  • location-aware attention
    在attention的過程中,按照我們的想法,應該是從左到右,注意力慢慢轉移,但是在實際運算中,注意力可能是隨便亂跳的,這就和我們的初衷相違背。attention可能出現的問題
    現在在attention進行計算的時候,$z0$在和$h2$進行attention計算時,也要考慮與$h^2$相鄰的區域的取值。
    23.png

補充

原始的輸出是尋找當前步驟的最大值(類似於貪心演算法),很容易陷入區域性最優,剛開始很好,但可能最後的一條路徑並不是概率最大的。假設每次只有兩種情況A,B供選擇。貪心演算法beam search不是隻保留當前的最大值,而是保留當前最優的k個值,k的具體取值自己調,k越大,找出最大路徑的可能性越大,但是所需的算力也越大,k越小,所需的算力小,但是找出最大路徑的可能性也越小,當k=1時,beam search 退化為貪心演算法。k=2的beam search

LAS的侷限性

  • 1.LAS包含attention,所以需要encoder將所有的語音聽完,這就導致無法聽一部分就輸出一部分,不能online。

相關文章