語音處理中的自監督學習

2021-02-15 談人工智慧

文章來自知乎,原文連結: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任務,效果會比之前提升。

往後一個 Modified CPC 對原版有三個改進。一個是把批次歸一化 BN 變成了 channel-wise 歸一化。第二個是把線性映射預測層替換成了一個 Transformer。第三個是把 GRU 替換成了 LSTM。這些改進能讓它比原版的 CPC 好上一些。另一種自監督學習的方法是用重構損失。它其實就是語音版的語言模型。它也是做 Phone / Speaker 的分類實驗來驗證它學到的表徵質量好壞。multi-Target APC 的思想也簡單。它把只有前向的 APC 變成了 雙向的。它的最後隱層要預測未來的 token,也需要預測過去的 token。

Amazon 還做了另一個 APC 的變體 DeCoAR。它把 APC 和 ELMO 的做法合在一起,在語音數據上應用了。它把輸入的語音聲學特徵,餵給雙向 LSTM,最後隱層相接後,要預測的是一個窗口的 token。這個窗口會從開頭掃到結尾。每個部分都要計算一次重構損失。

AutoEncoder 和 Phase 都是相似的做法。ASR系統會作為編碼器把聲學特徵編碼成中間嵌入,而 TTS 系統會作為解碼器把這份嵌入解碼成原來的聲學特徵。它會與一開始輸入的聲音計算重構損失。而 Phase 的不同之處在,它還原的不是聲學特徵,而是 Phase。它們通過不同的重構目標,希望中間嵌入得到有意義的信息。它可以幫助 ASR 和 TTS 下遊任務。這個架構和音色轉換的做法是相似的。Audio2Vec 其實就是語音版本的詞向量。比如,CBoW 就變成了需要通過過去語音幀和未來幀去預測當前幀。而Skip-gram則是需要通過當前的幀去預測過去和未來的幀。Audio2Vec 還提出了第三個任務,叫 temporal gap。它的目標是讓編碼器看過去和未來的兩段語音幀,去預測二者時間上差了多少。它的目標是學出好的編碼器。這個編碼器可以作為 ASR 編碼器的初始化。

BERT 要如何應用到語音上呢?這裡先對要講的模型做一個全局概覽。上面模型,是兩階段的,主要用到了CPC損失。下面模型是一階段的,主要用到APC的損失。中間的 SLU BERT,則比較特別。

       我們先來看 vq-wav2vec。它是一個兩階段的過程。第一階段,它先用CNN和GRU,算CPC 損失。中間的部分,先是把紫色部分的 logits 通過 Gumbel 得到其概率,然後 argmax 得到其獨熱編碼向量。它和設定好的向量集相乘就可以取出one-hot部分的其嵌入向量。它的 vq 指的是 Vector-Quantized ,即把一個連續的向量做量化,變成有限個。

這個有限向量集可以與文字版的BERT的詞彙相對齊,大概2-3萬左右。相當於我們用 vq-wav2vec 訓練一個語音版的向量表示,這樣就可以訓練一個文字版的 BERT。這個 BERT 預訓練好後,就可以做 ASR。

SLU BERT 的輸入是聲學特徵,它會先用有標註數據訓練一個CNN+GRU 的 CTC 模型。這個模型輸出的是 Phoneme posterior,音素生成概率矩陣。它用音素作為像文本中 token 一樣的表示語音的單位,去訓練BERT。它的MASK是一個帶有[PAD]的向量。這個模型不是純粹的自監督學習。

目前2019年-2020年的主流都是一階段的模型,它們主要用的是重構損失。我們先來講講tutor自研的 Mockinglay 。

先來看語音版的 BERT,其實就是把文字的token,換成了聲學的幀,輸入給模型。

語音版BERT輸入的幀是音素級別的頻譜。我們會有一個MASK策略來隨機把一些幀變成0。MASK為零之後,會通過Transformer Encoders 編碼成嵌入,再通過線性層去預測出這些MASK掉的幀,計算重構還原的損失。

它的MASK策略和文本原版的BERT一致。80% 中的15%遮掉,10%中的15%替換,剩下的10%中什麼也不變。

這個在語音頻譜上看起來就是大約有80-dim的頻譜加上它的一階微分,數據是全為0。

我們把這個重構的過程可視化出來,發現模型學到的重構頻譜幀和原來是非常像的。

文字版的BERT和語音版的BERT處理起來還是有些不一樣的。語音的輸入是連續的,所以我們需要做一些特殊的處理,來把連續的語音聲學特徵變得更平滑,讓MASK考慮的幀的範圍更長。前者可以用下採樣來做,即設定一個窗口,把窗口內的幀向量接起來變成一個幀。這樣就能保證沒有丟失任何信息的情況下,做到把長度變短。如果輸入長度很長的話,自注意力的矩陣就會非常大,佔用很多顯存。模型的架構會比BERT精簡些。一是它的Transformer疊加的數量更少了。但它的中間層特徵會更多一些3072。比原版的BERT寬,但沒它深。它的訓練語料有 360多個小時,預訓練了500k個步。

它的下遊任務微調有三種做法。一種是直接用它來抽特徵。用抽出來的特徵和線性分類器去進行分類。這相當於把前面的參數凍結住。

第二種是把每一層的輸出特徵做加權。我們用一個學出來的加權求和,得到它的最終輸出嵌入,再用一個線性層去做分類。這個時候所有層的特徵也都是凍住的。第三種就是正常的微調了。我們直接拿預訓練好的模型去做參數初始化,然後端對端地訓練。所有模型的參數都更新。

       

從結論上看,也是模型參數越大越好。這個和文字版的BERT一致。

有了預訓練語音版的BERT之後。我們的訓練數據從360個小時降到36分鐘。我們可以看不同的表徵可以怎樣被少量數據的數量影響表現。排序模型大致是 Mel < BASE < LARGE < LARGE-WS < BASE-FT2。後面兩個分別是加權求和,微調。

 Mockingjay 往後又做了一個改進版本 TERA。

首先比起用梅爾頻譜,它用了fMLLR 頻譜特徵。

它不同在,預訓練這裡,它會在不同的軸上去做MASK。它新加了多種預訓練目標。比如沿著channel軸和時序軸都做MASK。再比如用一些隨機採樣去替換。這樣多樣的折騰,讓最終訓練出的模型在下遊任務都能有所提升,而且魯棒性更強。

  這裡是各個模型的最終總結。

最近幾個月InterSpeech上又提交了很多Mockingjay的變體。我們也會一一介紹。

第一個是對抗防禦。它與對抗攻擊是同時出現的。在圖像中,我們知道,一個熊貓圖像加上了一些肉眼不可見的小噪音之後,可以讓模型把熊貓誤識別成長臂猿。這種對人臉來說無差別,但對機器而言卻有天壤之別的噪音加入,就是一種對抗攻擊。

在語音中,對抗攻擊可以攻破聲紋識別安全系統。我們可以用TTS去合成一個人的聲音來破解別人的聲紋鎖。為此,我們的聲紋識別安全系統,需要有一個 Anti-Spoofing 的模塊去防禦這種對抗攻擊。

       

Anti-Spoofing 會先去識別輸入的語音有無被人為改動過。若識別出被人改動過,就不會把他丟給聲紋驗證系統去解鎖。我們希望對抗防禦模型對非人工修改的語音和人工修改過的語音的辨識度越高越好。因此模型需要去學加入的對抗噪音是如何影響聲紋驗證系統的。我們可以直接把 Mockingjay 作為預訓練模型,就可以做對抗防禦了。橫軸表示對抗攻擊的強度,縱軸表示聲紋驗證系統的正確率。我們可以發現,在不同程度的對抗攻擊下,Mockingjay 表現都是可以持平的。說明魯棒性強。對於梅爾頻譜特徵,則比較容易被攻擊。橘色和紅色線的差異是有無預訓練。還有另一個實驗是算 LNSR,即每一層中對抗信號的數量。我們可以可視化出對抗噪音在不同層中遞減的情況。也就是說Mockingjay 對對抗噪音是有一個過濾的效果的。

相關焦點

  • DeepMind無監督表示學習重大突破:語音、圖像、文本、強化學習全能...
    因此,無監督學習是實現強健的、通用的表示學習的重要基石。  儘管無監督學習很重要,但無監督學習尚未得到類似監督學習的突破:從原始觀察中建模高級表示仍然難以實現。此外,並不總是很清楚理想的表示是什麼,以及是否可以在沒有對特定的數據模態進行額外的監督學習或專門化的情況下學習這樣的表示。
  • 清華CVer 對自監督學習的一些思考
    但標籤仍然存在,只不過標籤是從輸入數據中生成的,通常是使用啟發式算法生成。自監督學習的流行是勢在必然的。在各種主流有監督學習任務都做到很成熟之後,數據成了最重要的瓶頸。從無標註數據中學習有效信息一直是一個很重要的研究課題,其中自監督學習提供了非常豐富的想像空間。
  • 【深度】自監督學習,如何從數據困境中拯救深度學習?
    Yann LeCun 在關於自監督學習的研究中,認為至少有3種獲取知識的方法。這可能是人類比當前機器更高效處理數據的主要原因之一。正如 LeCun 所說,強化學習就像蛋糕上的櫻桃。監督學習是錦上添花,而自監督學習才是蛋糕!
  • 德克薩斯A&M大學在讀博士遊宇寧:自監督學習在圖卷積網絡中的研究...
    自監督學習是一種介於無監督和有監督學習之間的新範式,可以有效減少對大量帶注釋數據的需求。在數據訓練的過程中,生成帶有無噪聲標籤的數據集的成本很高,而無標籤的數據又一直在不斷產生。為了有效利用大量的無標籤數據,自監督學習通過設置合理的學習目標和定義前置任務,從數據本身中得到了監督信號。
  • 自監督學習蛋白質序列, 自然語言處理助力蛋白質工程新飛躍
    在自然語言處理成功的啟發下,研究蛋白質的專家也在嘗試著將自然語言處理的方法應用於蛋白質的結構預測中。那麼目前自然語言處理的前沿方法能夠如何改善蛋白質預測任務呢?讓我們來一探究竟。蛋白質對於生物的運轉必不可少,從運輸氧氣的血紅蛋白到人眼中的感光蛋白,從運輸離子的輸運蛋白到肌肉中的肌肉蛋白,它們的存在為生命造就多姿多彩的發展。
  • 人工智慧的下半場,一定少不了自監督學習
    :深度學習在計算機視覺、自然語言處理、語音識別等領域的廣泛應用催生了人工智慧的第四次爆發。然而,當前主流的監督式學習任務往往過度依賴於人工標註,即所謂「有多少人工就有多少智能」。因此,通過自監督的方式自動生成監督信號成為了越來越多人工智慧從業者的選擇。本文從圖像、視頻、控制三個角度分別介紹了自監督表徵學習的最新進展,值得一讀!對於給定的任務,在擁有足夠的標籤的情況下,監督式學習可以很好地解決該問題。
  • 【源頭活水】淺談圖上的自監督學習——對比學習
    當筆者初識自監督學習時,通過他人的介紹,僅理解為了一種利用自身性質,標註更多標籤的一種手段,但隨著論文閱讀的增加,對自監督本質的理解越來越迷惑。個人理解,其實任意挖掘對象之間聯繫、探索不同對象共同本質的方法,都或多或少算是自監督學習的思想。
  • 自監督、半監督和有監督全涵蓋,四篇論文遍歷對比學習的研究進展
    機器之心分析師網絡作者:仵冀穎編輯:Joni本文通過四篇相關論文對自監督學習中的對比學習(Contrastive Learning)進行了深入的探討。自監督學習意思是使用非人工標記數據進行學習。在機器學習中,比較著名的自監督方法就是自然語言處理中的word2vec。
  • BYOL:輕鬆進行自監督學習
    自監督學習在深度學習中,經常遇到的問題是沒有足夠的標記數據,而手工標記數據耗費大量時間且人工成本高昂。基於此,自我監督學習成為深度學習的研究熱點,旨在從未標記樣本中進行學習,以緩解數據標註困難的問題。子監督學習的目標很簡單,即訓練一個模型使得相似的樣本具有相似的表示,然而具體實現卻困難重重。
  • 今日論文|視頻節奏預測助力自監督視頻表示學習&排序增強的對話生成框架&連續語音分離&常識知識圖譜推理&MORE
    其中包含計算機視覺論文19篇[1-19],自然語言處理論文5篇[20-24],方法論論文2篇[28-29],語音技術論文9篇[30-38],點擊文末閱讀原文即可下載。首先來看計算機視覺論文:- 對大型注釋數據集的要求限制了深度卷積神經網絡(CNNs)在許多實際應用中的使用。
  • NeurIPS-21遷移學習、元學習、自監督學習新數據集概覽
    我們對論文進行了概覽,挑選出了其中與 「遷移學習」、「預訓練」、「自監督學習」、「領域自適應」、「元學習 等話題相關的數據集和評測方案,其中不乏有來自牛津大學VGG組的數據集id=Uk2mymgn_LZDABS是由史丹福大學從多個數據集中收集整理的,其被用於進行領域無關(Domain-agnostic)的自監督學習。其包括6個模態的數據:自然圖像、語音、文本、醫學圖像、傳感器、帶有標註的圖片。
  • 試試自監督學習
    給你個秘密武器——自監督學習。數據科學家 Jeremy Howard 發布一條Twitter:在醫學圖像領域,我們經常需要靠一點點的數據來做很多工作。在這個問題上,有一種被低估的方法,正是自監督學習,簡直太神奇!還附上了與之相關的最新fast.ai教程。
  • 「半監督學習系列」2. 半監督學習概述
    在許多任務中,有標記數據非常缺乏。因為標記數據需要人工的註解、以及特殊的設備或昂貴而緩慢的實驗,所以標籤y可能很難獲得。比如:· 在語音識別中,實例 x 是一句語音,標籤 y 是這句語音對應的副本記錄。下邊列舉了一些單詞發音時的詳細語音記錄:
  • 清華 CVer 對自監督學習的一些思考(文末福利)
    自監督學習是指用於機器學習的標註(ground truth)源於數據本身,而非來自人工標註。如下圖,自監督學習首先屬於無監督學習,因此其學習的目標無需人工標註。其次,目前的自監督學習領域可大致分為兩個分支。
  • 無監督學習的魅力
    無監督學習是機器學習算法裡非常撲朔迷離的一個類別,負責解決這些「沒有真實值 (no-ground-truth) 」的數據。本文會講到,無監督學習到底是什麼,和機器學習的其他算法有何本質區別,用的時候有哪些難點,以及推薦閱讀的傳送門。最簡單的理解方式,就是把算法想像成考試。
  • 什麼是無監督學習?
    這時有人可能會想,難道有監督學習和無監督學習就是非黑即白的關係嗎?有沒有灰呢?Good idea。從原理上來說,PCA等數據降維算法同樣適用於深度學習,但是這些數據降維方法複雜度較高,所以現在深度學習中採用的無監督學習方法通常採用較為簡單的算法和直觀的評價標準。比如無監督學習中最常用的方法——聚類。聚類,就是將觀察值聚成一個一個的組,每一個組都含有一個或者幾個特徵。
  • 復旦大學黃萱菁:自然語言處理中的表示學習
    自然語言處理中的表示學習首先,黃萱菁教授介紹了語言表示學習的內容。語言表示學習是一個非常主觀性的概念,可以從很多角度給一個定義。從認知科學角度,語言表示是語言在人腦中的表現形式,關係到人們如何理解和產生語言;從人工智慧角度,語言表示是語言的形式化或者數學描述,以便在計算機中表示語言,並且能夠讓電腦程式進行自動處理。
  • 自訓練和半監督學習介紹
    在監督學習中,這些數據必須根據目標類進行標記,否則,這些算法將無法學習獨立變量和目標變量之間的關係。但是,在構建用於分類的大型標記數據集時,會出現兩個問題:「標記數據可能很耗時」。假設我們有1000000張狗圖像,我們想將它們輸入到分類算法中,目的是預測每個圖像是否包含波士頓狗。
  • 對比自監督學習浪潮迅猛來襲,你準備好了嗎?
    ,科研人員在基於對比學習的自監督方法方面進行了大量研究。本文是 PyTorch Lightning 創始人 William Falcon 的對比學習綜述,對自監督學習、對比學習等基礎概念進行了簡要的回顧,介紹了 CPC、AMDIM、BYOL、SimCLR、Swav等最近較為著名的對比學習方法,並提出了一種名為 YADIM 的新型對比學習算法。
  • 從自監督學習主流方法、最新工作進展,看未來前景研究方向
    對於自編碼器,可能僅僅是做了維度的降低而已,我們希望學習的目的不僅僅是維度更低,還可以包含更多的語義特徵,讓模型懂的輸入究竟是什麼,從而幫助下遊任務。而自監督學習最主要的目的就是學習到更豐富的語義表徵。自監督學習主要是利用輔助任務(pretext)從大規模的無監督數據中挖掘自身的監督信息,通過這種構造的監督信息對網絡進行訓練,從而可以學習到對下遊任務有價值的表徵。