文章來自知乎,原文連結:https://zhuanlan.zhihu.com/p/152672250
自監督學習也可以用在語音處理中。我們很容易收集到很多無標註的語音數據。把它用去噪自編碼器的方法去做預訓練,再在有標註的數據上微調。這便是自監督學習的核心精神。這一期,我們來講講所有自監督學習方法在語音處理上的應用。大概會有 24 個不同的方法。保證都是最近的,最強的,最飽眼福的。
最開始,人類新生兒的學習是不需要父母監督的。它們會自己去"體驗"周邊世界感官帶來的刺激,以純白的狀態去觀察沒有任何指示的人和事物,見識各種各樣的圖畫書,敲擊各種物件發出聲響,專注地聽著對面人說著自己還不能理解的對話。純粹,簡單而開放,對一切事物保持好奇的姿態。接著,這些嬰兒才開始接受到父母的一些指導,去理解它所觸及的事物是什麼,為什麼,然後是怎麼辦。
我們不禁覺得神奇,嬰兒究竟是怎麼學習的呢?沒錯,我們把嬰兒四周接觸的聲音、光影、觸覺作為輸入,嬰兒作為模型,父母的指導作為標籤。會發現,嬰兒在大部分的時候,都是沒有監督標籤的。但它依然能夠根據輸入的刺激來漸漸地熟悉、理解外部的世界。這就像是一個預訓練的過程。而父母給出的指導,則是在他們已有的建立好的世界認識上,再進行微調。這便是模型在下遊任務的微調。
自監督學習,有兩個主流門派,CPC 對比學習,和APC重構學習。二者差別主要在其學習模板,即損失的設計上。
先來大致了解一下對比學習。它最早是由 DeepMind 提出的方法,比較經典的模型有 wav2vec,Bidir CPC 以及 Modified CPC。它的做法很簡單。輸入是一排的聲音信號,會被拆分為若干個 frame輸入給一個 CNN 編碼器。
編碼出特徵後,上面會有一個負責上下文編碼的 GRU,考慮把一段序列編碼成特徵向量,如圖中橙紅色的Ct。然後模型要做的是根據 Ct 預測後面下方CNN 編碼出的藍色的向量,是不是屬於同一個句子。它在訓練的時候,會隨機採樣一些假的藍色向量給紅色做預測。訓練目標希望屬於同一個句子的橙色和藍色向量之間的距離越近越好。
但如果是不同的句子,或不同的說話者,就要讓它們的距離越遠越好。數學上可以證明,這樣做實際上是在最大化它們的互信息熵。它最重要的是學到橙色的向量。這個向量最終作為預訓練好的模型,去做微調就能得到表現的提升。
CPC 有兩個比較有名的實驗分別是做電話/說話者的分類。後續的研究也是基於這兩個實驗作為 Performance 的比較。CPC 也可以做在非語音處理領域上,像圖片和文本。但今天我們只要側重於語音部分。wav2vec 也是參照以上方法去預訓練的。它把橙色向量作為 ASR模型 的輸入,輸出是識別出的文字。
之前的 CPC 是單向的。我們也可以把它變成雙向的,即在 CNN 上面再加一個反向的GRU。推斷的時候,把正向和反向的橙色向量接起來再去預訓練。模型的評估也是用 ASR任務,效果會比之前提升。
Amazon 還做了另一個 APC 的變體 DeCoAR。它把 APC 和 ELMO 的做法合在一起,在語音數據上應用了。它把輸入的語音聲學特徵,餵給雙向 LSTM,最後隱層相接後,要預測的是一個窗口的 token。這個窗口會從開頭掃到結尾。每個部分都要計算一次重構損失。
BERT 要如何應用到語音上呢?這裡先對要講的模型做一個全局概覽。上面模型,是兩階段的,主要用到了CPC損失。下面模型是一階段的,主要用到APC的損失。中間的 SLU BERT,則比較特別。
這個有限向量集可以與文字版的BERT的詞彙相對齊,大概2-3萬左右。相當於我們用 vq-wav2vec 訓練一個語音版的向量表示,這樣就可以訓練一個文字版的 BERT。這個 BERT 預訓練好後,就可以做 ASR。
SLU BERT 的輸入是聲學特徵,它會先用有標註數據訓練一個CNN+GRU 的 CTC 模型。這個模型輸出的是 Phoneme posterior,音素生成概率矩陣。它用音素作為像文本中 token 一樣的表示語音的單位,去訓練BERT。它的MASK是一個帶有[PAD]的向量。這個模型不是純粹的自監督學習。
目前2019年-2020年的主流都是一階段的模型,它們主要用的是重構損失。我們先來講講tutor自研的 Mockinglay 。
語音版BERT輸入的幀是音素級別的頻譜。我們會有一個MASK策略來隨機把一些幀變成0。MASK為零之後,會通過Transformer Encoders 編碼成嵌入,再通過線性層去預測出這些MASK掉的幀,計算重構還原的損失。
這個在語音頻譜上看起來就是大約有80-dim的頻譜加上它的一階微分,數據是全為0。
我們把這個重構的過程可視化出來,發現模型學到的重構頻譜幀和原來是非常像的。
它的下遊任務微調有三種做法。一種是直接用它來抽特徵。用抽出來的特徵和線性分類器去進行分類。這相當於把前面的參數凍結住。
從結論上看,也是模型參數越大越好。這個和文字版的BERT一致。
有了預訓練語音版的BERT之後。我們的訓練數據從360個小時降到36分鐘。我們可以看不同的表徵可以怎樣被少量數據的數量影響表現。排序模型大致是 Mel < BASE < LARGE < LARGE-WS < BASE-FT2。後面兩個分別是加權求和,微調。
Mockingjay 往後又做了一個改進版本 TERA。
它不同在,預訓練這裡,它會在不同的軸上去做MASK。它新加了多種預訓練目標。比如沿著channel軸和時序軸都做MASK。再比如用一些隨機採樣去替換。這樣多樣的折騰,讓最終訓練出的模型在下遊任務都能有所提升,而且魯棒性更強。
這裡是各個模型的最終總結。
最近幾個月InterSpeech上又提交了很多Mockingjay的變體。我們也會一一介紹。
第一個是對抗防禦。它與對抗攻擊是同時出現的。在圖像中,我們知道,一個熊貓圖像加上了一些肉眼不可見的小噪音之後,可以讓模型把熊貓誤識別成長臂猿。這種對人臉來說無差別,但對機器而言卻有天壤之別的噪音加入,就是一種對抗攻擊。
在語音中,對抗攻擊可以攻破聲紋識別安全系統。我們可以用TTS去合成一個人的聲音來破解別人的聲紋鎖。為此,我們的聲紋識別安全系統,需要有一個 Anti-Spoofing 的模塊去防禦這種對抗攻擊。