【筆記】DLHLP - 李宏毅 - 3 - 語音識別 - Part 2 LAS


語音識別模型

語音識別模型主要分為兩種,一種是基於seq2seq的,一種是基於HMM的。
seq2seq的模型主要有LAS,CTC,RNN-T,Neural Transducer,MoChA。

本節講最流行的LAS,就是Listen,Atten,and Spell,典型的seq2seq+attention的自編碼模型。

1. Listen

編碼器會把輸入的一串聲學特征,轉換為高維隱層嵌入。它的主要目標是提取出內容信息,過濾掉說話者的嗓音變化和環境噪音。
編碼器我們可以用CNN和RNN,也可以是CNN+RNN,也可以用self-attention。

Down Sampling

因為一段聲音訊號太長了,而且相鄰向量間,帶有重復的信息。為了節省計算量 ,我們可以用:
1)Pyramid RNN: 在每一層的RNN輸出后,都做一個聚合操作。把兩個向量加起來,變成一個向量。
2)Pooling Over time: 兩個time step的向量,只選其中一個,輸入到下一層。
3)Time-delay DNN: 是CNN常用的一個變形。通常CNN是計算一個窗口內每個元素的加權之和,而TDDNN則只計算第一個和最后一個元素。
4)Truncated self-attention: 是自注意力的一個變形。通常自注意力會對一個序列中每個元素都去注意,而Truncated的做法是只讓當前元素去注意一個窗口內的元素。

2. Attention

在編碼器和解碼器中間的Attention層中,有個\(z^0\)的參數是query,而Encoder輸出的隱層嵌入的每個位置的向量\(h^i\)都是key,注意力的計算方式就是這兩者經過線性變換后的點積。
如果采用的是Additive Attention,則是這兩個向量線性變換后相加再通過tanh,再經一次線性變換后得到注意力分數。
每個位置的注意力分數經過softmax,對\(h^i\)加權求和,就可以得到一個歸一化的分布\(c^0\)

3. Spell

這個歸一化的分布向量和之前的\(z^0\)會作為解碼器RNN的輸入,輸出是隱層\(z^1\),和一個對詞表V中所有可能詞預測的概率分布向量。我們取max就可以解碼得到最可能的第一個token。
再拿\(z^1\)與原編碼器的隱層向量做注意力,得到一個新的注意力分布\(z^2\)。它與\(c^1\)一同輸入給RNN,同樣的方式就能解碼得到第二個token。
以此類推,直到解碼得到的token是一個終止符 ,就結束。

Beam Search:

如果我們每次都選擇最大概率的方向,貪心策略並不能保證生成整個序列的概率是最優的。而且在實際中,詞表通常很大,沒有辦法去搜索窮盡所有的可能路徑。
解決這個問題的一種策略就是使用Beam Search,它是窗口大小為K的貪心搜索。從每個節點我們都保留K個最好的路徑,一直往下。

Teacher Forcing

訓練時,我們的標簽是序列長度為N的one-hot向量。它會與解碼器RNN第一步輸出的大小為詞表V的概率分布計算交叉熵損失。
在進行下一步RNN解碼時,上一步的正確標簽c會替代最大概率的\(c^0\)進行解碼。這個技術叫作Teacher Forcing。

為什么要這么做?因為最開始的時候模型是從隨機開始訓練的,解碼器的表現很差,輸出的東西是亂的,會影響后續解碼步驟的效果。
也就是說,前面解碼的結果會影響后面,如果前面的結果很長時間都不正確,這會導致后面的解碼步驟很難學到真正正確的信息。
所以最好的方式就是不要理睬RNN的輸出,用正確標簽去指導它去做下一步的預測。

兩種注意力

之前的注意力階段,我們每次是用解碼器的輸出隱層去與編碼器的輸出做注意力。
除此以外,還有另一種做注意力的方式。
我們把解碼器的隱層\(z^t\)拿出來與\(h^i\)做注意力得到\(c^t\)。這個\(c^t\)不是保留到下一個時間才使用,而是在當前時間點立刻使用。我們把\(z^t\)\(c^t\)丟給解碼器RNN,得到新分布\(z^{t+1}\)
這兩種注意力的區別在,注意力得到的結果是下一個時間使用還是當前時間使用。第一篇拿Seq2Seq做語音識別的論文,用的是二者的合體版本。

語音識別是否非要用注意力不可呢?
注意力最早是用在Seq2Seq翻譯上解決源語言與目標語言的對齊問題。
這個彈性很大的注意力,在語音上用會有種殺雞焉用牛刀的趕腳。因為語音上,每次注意跳躍是有限的。而不會出現像機器翻譯那樣,開頭注意到結尾的的大跳躍情況。
我們可以用Location-aware attention來優化。我們的注意力不能夠隨便亂跳,而是要考慮前一個時間步得到的注意力權重影響。
我們把t之前的注意力權重\(α^0\)\(α^{t-1}\)的向量,做一個線性映射后再輸入給解碼RNN。這樣模型就能學到,每解碼出一個token,注意力就要往右移動一點。

LAS模型需要在海量數據集上訓練,和一些調參技巧,與傳統方法相比才會有顯著提升。但LAS有另一個好處是,它的模型參數可以比傳統方法變得很小。

LAS的注意力可視化出來發現,即便沒有用Location-aware attention,模型也可以自己學到這樣的注意規律。
還有一個有趣的發現,模型能夠自動識別出aaa和triple a是對應一樣的聲音訊號。這可以解釋為,二者的上下文經常一樣。 LAS可以學到復雜的輸入訊號和輸出訊號的關系。

LAS模型也可以用語言模型LM來提升。不過LAS本身很強,在給足訓練集的情況下,不用LM來優化也是能表現很好的。
我們還可以用LAS模型來訓練把閩南話語音翻譯成中文字幕,或者是很多電影里面自動把英語語音翻譯成中文字幕。
即便背景音存在音樂和音效,語音和字幕有時沒有對齊,我們都可以無需去管。直接海量數據,深度學習模型硬train一發,以上問題統統都能自動解決。

LAS的局限

LAS雖然神通廣大,但它也有一些問題。我們期待我們的模型可以做online的識別,即能夠一邊聽,一邊做語音識別。而不是模型聽完整句話后,等上一秒,模型才輸出辨識結果。
之后要講的模型,就是解決LAS的這個問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM