張文林,劉雪鵬,牛銅,陳琦,屈丹
(信息工程大學信息系統(tǒng)工程學院,河南 鄭州 450001)
語音表示學習是指利用機器學習的方法自動提取語音信號的高層特征表示,該高層特征表示含有音素、說話人、語種等豐富的信息[1],可用于連續(xù)語音識別、說話人識別、語種識別等多種下游任務[2]。自監(jiān)督語音表示學習利用大量無標注數據學習語音表示,可大大降低下游任務對標注數據的依賴。對于大部分的人類語言,標注數據的獲取是十分困難的,一些語言甚至沒有書面文字,而無標注語音的獲取相對容易得多,因此自監(jiān)督語音表示學習具有重要的研究意義和應用前景。
目前,常用的自監(jiān)督語音表示學習方法主要有3 種[3-4]:基于對比預測的方法、基于掩蔽重建的方法和基于多任務學習的方法。基于對比預測的方法采用區(qū)分性模型,以對比預測為輔助任務,通過最小化某種分類損失來得到語音的表示;基于掩蔽重建的方法采用生成式模型,以語音重建為輔助任務,通過最小化某種重建損失來得到語音的表示;基于多任務學習的方法將對比預測任務和語音重建任務相結合,以期達到更好的語音表示效果。從實驗結果來看[4],基于對比預測的方法通常優(yōu)于基于掩蔽重建的方法,是目前研究語音表示學習最熱門的方法。
基于對比預測的方法需要解決的主要問題是模型坍塌問題,即模型所有的表示輸出都為一個常數。為了解決這一問題,現(xiàn)有方法往往需要精心設計某種隨機采樣機制以構造大量的負樣本,將其與正樣本進行對比,從而避免所有樣本的輸出都相同。目前,基于對比預測的自監(jiān)督語音表示學習方法中[5-8],由于沒有語音標注,通常使用相鄰的語音幀作為正樣本,對來自同一批次的數據進行隨機采樣以構造負樣本。這種正負樣本的選擇方法沒有經過很好的設計,不能保證采樣得到的負樣本質量,可能會出現(xiàn)錯誤的正負樣本對,導致訓練不穩(wěn)定。具體實現(xiàn)中往往需要通過增大批次大小來保證訓練的收斂性和模型的性能,因此,這類方法在訓練過程中需要耗費大量的存儲和計算資源,計算成本很高。
近年來,眾多自監(jiān)督圖像對比表示學習的研究表明[9]負樣本并不是訓練所必需的,特別是Chen等[10]提出的SimSiam(simple siamese)模型使用簡單的孿生網絡進行自監(jiān)督訓練,只需要正樣本進行對比學習,通過梯度停止技術有效避免了模型坍塌,在ImageNet 上訓練100 個epoch 即可達到很好的學習效果。
在語音表示學習領域,目前還沒有使用正樣本對比學習方法的相關研究。本文將正樣本對比學習技術應用于語音表示,并提出了一種結合正樣本對比和掩蔽重建的自監(jiān)督語音表示學習方法。SimSiam 模型[10]采用殘差網絡(ResNet,residual network)[11]作為表示學習的主干網絡;與圖像不同,語音信號是一種連續(xù)的變長序列,因此本文方法采用Transformer[12]作為語音表示學習的主干網絡。本文所提語音表示學習方法僅需正樣本進行對比學習,有效避免了大量負樣本帶來的模型訓練困難問題,結合掩蔽重建任務,在低訓練成本下得到了較好的語音表示。本文基于Librispeech 語料庫[13]進行自監(jiān)督表示學習,并在音素分類、說話人分類等下游任務上進行了測試驗證,結果表明與現(xiàn)有模型相比,本文方法得到的模型在所有下游任務中的性能均達到或者超過了現(xiàn)有模型的性能。
目前,自監(jiān)督語音表示學習的主要方法有基于對比預測的方法、基于掩蔽重建的方法和基于多任務學習的方法3 種。
基于對比預測的方法主要基于對比預測編碼(CPC,contrastive predictive coding)[5]的思想對模型進行自監(jiān)督學習,利用編碼器將語音映射到隱藏的表示空間,要求在表示空間可以對正負樣本進行預測分類。這類方法的典型代表是Facebook的研究人員提出的wav2vec 系列模型[6-8]及其相關改進模 型[14-15],其中wav2vec 2.0 模型[8]已經在連續(xù)語音識別等多個下游任務上得到廣泛使用,性能達到甚至超過了有監(jiān)督學習的方法。HuBERT(hidden-unit bidirectional encoder representation from transformers)[14]在wav2vec 2.0 模型的基礎上,通過K-means 聚類迭代生成離散的偽標簽,把預測標簽的任務用于模型的訓練,該方法可視為對比預測編碼的一種改進方法,即通過聚類得到數量固定的負樣本進行對比學習。WavLM[15]沿用了HuBERT的思想,采用了更靈活的位置編碼策略,引入更復雜的加噪和重疊語音數據擴展方法,增大了無標注訓練數據的規(guī)模,使語音表示模型在13 個語音相關下游任務中達到最佳性能。上述方法的一個共同缺點是需要采用較大批次進行訓練,訓練過程中計算復雜度高,容易發(fā)生不穩(wěn)定現(xiàn)象。
基于掩蔽重建的方法主要使用自回歸預測編碼(APC,autoregressive predictive coding)[16]或BERT(bidirectional encoder representation from transformer)掩蔽重構任務[17]等對表示模型進行自監(jiān)督訓練。例如,APC和矢量量化自回歸預測編碼(VQAPC,vector-quantized autoregressive predictive coding)[18]采用自回歸模型,基于過去語音幀的編碼信息來重建未來的語音幀;Mockingjay[19]、TERA(transformer encoder representation from alteration)[20]等模型通過對語音幀進行掩蔽重建來進行模型訓練;pMPC(phoneme-based masked predictive coding)[21]在音素級進行掩蔽重構,以期模型學習到的表示能夠包含更多的音素類別信息。
基于多任務學習的方法將上述2 種自監(jiān)督學習任務進行結合,通過多任務訓練的方式得到更有效的語音表示模型。典型代表有Speech SimCLR[22],它借鑒了圖像自監(jiān)督表示學習中SimCLR 模型[23]的對比訓練任務,并將其與TERA 掩蔽重建任務相結合,證明了對比學習任務和掩蔽重建任務相結合的有效性。Zaiem 等[24]探索了多種自監(jiān)督學習任務相互組合的方法。上述模型在對比學習任務中需要構建大量的負樣本對進行對比學習,因此仍需要較大的訓練批次,訓練復雜度較高。
在圖像表示學習中,基于孿生網絡的表示學習是目前研究的熱門方向。孿生網絡[25]通過對輸入進行2 種不同增強,以最大化2 個分支輸出的相似性進行訓練。然而,如果只是拉近相似樣本之間的距離,模型很容易得到一個退化解,即對于所有的樣本輸出都相同,這就是著名的模型坍塌問題。解決這一問題的一個自然想法是不僅要拉近相似輸入之間的距離,也要使不同輸入之間的距離變大,換句話說就是不僅要有正樣本對,也要有負樣本對。這種方法確實解決了模型崩塌的問題,但是也帶來了一個新的問題,那就是對負樣本對的數量要求較大,只有這樣才能訓練出足夠強的特征表示能力。例如,MoCo(momentum contrast)[26]通過一個記憶庫來存儲所有樣本的特征,從而維護了一個龐大的負樣本隊列。SimCLR[23]通過9 000 以上的批次大小來保證有足夠數量的負樣本供對比學習。
然而,最新的研究結果表明,為了保證圖像表示模型不發(fā)生坍塌,負樣本并不是必需的。例如,BYOL(bootstrap your own latent)[9]基于孿生網絡構造了在線網絡和目標網絡2 個子網絡,2 個子網絡分別通過反向傳播和動量編碼器更新參數,利用在線網絡的輸出預測目標網絡的輸出,從而在不使用負樣本的情況下避免了模型坍塌。SimSiam[10]進一步去除了動量編碼器,將2 個子網絡進行權值共享,對目標網絡使用梯度停止策略,從而僅依靠正樣本使模型學習到有意義的表示。SimSiam 方法的模型構造和訓練過程更簡單,只需要小的訓練批次即可進行表示學習,本文的自監(jiān)督語音表示學習中的對比學習任務即受其啟發(fā)而來。
基于正樣本對比與掩蔽重建的自監(jiān)督語音表示學習模型如圖1 所示。模型采用孿生網絡結構,由2 個分支組成,其中右分支包含一個用于對輸入的語音信號進行編碼表示的編碼器(Enc)、一個用于根據編碼表示對原始語音進行重建的預測器(Pre);左分支除了編碼器和預測器外,還包含一個映射器(Proj)。在模型訓練過程中,首先對輸入的語音幀x進行兩路增強得到正樣本對x1和x2,將其分別送入孿生網絡的2 個分支中。左分支對x1進行編碼得到特征表示z1,右分支對x2進行編碼得到特征表示z2。將z1、z2分別送入左、右分支的預測器,得到重建的語音幀分別計算重建損失函數。對于語音表示z1,還將其送入左分支的映射器得到輸出來對右分支的語音表示z2進行預測,映射器的輸出p1的維度與語音表示z1、z2相同,計算p1與z2之間的余弦距離作為對比預測損失函數,并對其進行最小化以使兩路輸出更相似。將z1、z2的重建損失函數及對比預測損失函數進行求和作為最終的損失函數,采用梯度下降法對其進行優(yōu)化,從而實現(xiàn)語音表示的多任務學習。
圖1 基于正樣本對比與掩蔽重建的自監(jiān)督語音表示學習模型
在圖像的正樣本表示學習中,采用ResNet[11]作為編碼器。與圖像不同,語音信號是一個連續(xù)的變長序列,具有長時相關性,因此在本文方法中左右分支的編碼器均采用多層Transformer 編碼器[12]的堆疊實現(xiàn)。其中每一個編碼器層由一個多頭自注意力層和一個前向層組成,將編碼器的最后一層輸出視為最終的語音表示。模型中的預測器和映射器均采用兩層前向網絡,僅在語音表示學習(即預訓練)階段使用,表示學習結束后僅保留編碼器,將得到的語音表示作為下游任務的輸入特征。
針對語音數據,本文采用加入高斯噪聲、時間掩蔽、頻率掩蔽3 種方式對輸入的語音進行隨機擾動獲得增強后的語音數據,以得到孿生網絡2 個分支的輸入數據。考慮到在測試階段并不會對輸入模型的語音數據進行增強,為了減少訓練與測試的不一致,對左右2 個分支均以概率pa進行隨機增強。
具體地,對于一條輸入語音幀x,根據[0,1]上的均勻分布進行采樣得到p∈[0,1],當p≥pa時進行語音增強,否則不進行語音增強。增強后的語音數據為
其中,Aug(x)表示對輸入語音x進行隨機擾動,實驗中通過Specaugment 工具箱[27]實現(xiàn)。
在模型訓練過程中,左右2 個分支的編碼器和預測器共享相同的權值。最終總的損失函數由重建損失和預測損失兩部分組成。其中,重建損失為使用左右2個分支編碼輸出z1和z2對原始語音幀x進行重建的誤差。借鑒TERA 模型[20]中的做法,本文使用L1 距離來衡量語音幀的重建誤差,總重建損失為
其中,l1為L1 距離分別為左右2 個分支的重建語音幀。
預測損失由左右2 個分支的語音特征表示z1、z2進行相互預測計算得到。由于z1、z2分別對應同一個輸入語音幀x的不同增強x1和x2,可視為正樣本對,因此在訓練預測任務時只需要最大化預測值與預測目標之間的余弦相似度即可。
為防止模型坍塌,在反向傳播過程中,對右分支執(zhí)行梯度停止操作,不對其模型參數進行梯度計算。圖像自監(jiān)督學習方法SimSiam[10]從實驗驗證和理論證明2個角度證明了梯度停止在僅采用正樣本進行對比學習中的重要性。從理論上看,梯度停止操作相當于將語音表示視為隱藏變量,引入除模型參數之外的第二組參數,采用EM(expactation maximization)算法,通過兩組參數的迭代更新得到表示模型參數的近似最優(yōu)估計。
綜上所述,采用梯度停止技術后,根據z1對z2進行預測的損失函數為
其中,stopgrad(?)表示梯度停止操作;Proj(z1)表示z1經過預測器后的輸出;cos(?)表示矢量間的余弦距離,其計算式為
實際中由于左右2 個分支的編碼器參數完全相同,為了更高效地利用訓練樣本,可同時計算根據z2對z1進行預測的損失函數,得到對稱的總預測損失函數為
結合式(2)和式(5),最終訓練總損失函數為
TERA 模型[20]中,將重建損失函數和對比預測損失函數的權重均設置為1。采用上述損失函數進行梯度下降訓練,最終將學習到的編碼器Enc 作為語音表示模型。
實驗中使用公開數據集Librispeech[13]訓練語音表示模型。為了驗證不同數據量下模型的性能,分別使用其中的100 h 無標注數據(train-clean-100)和960 h 無標注數據(包括train-clean-100、train-clean-360、train-other-500)進行自監(jiān)督訓練。編碼器為3 層Transformer 編碼器,隱含層維度為768,注意力頭為12 個,前向層維度為3 072,dropout 概率為0.1。預測頭和投影頭均由2 個線性層構成,隱含層維度為768。編碼器的輸入為80 維美爾譜,幀長為25 ms,幀移為10 ms。
將最后一層編碼器的輸出作為最終的語音表示,后接一個任務相關的分類器或預測器用于下游任務。在下游任務訓練中,語音表示模型有2 種使用方式:一種是將編碼器參數凍結,僅作為特征提取器使用;另一種是將編碼器參數與下游任務相關的模型參數共同在下游任務的標注數據上進行微調訓練。預訓練模型經過微調后更適應具體下游任務的需要,因此在測試中具有更好的效果。
實驗中測試了音素分類、說話人分類及連續(xù)語音識別等下游任務的性能。其中,音素分類任務遵循CPC[5]的實驗設置,使用CPC 給出的數據集劃分方式將train-clean-100 劃分為訓練集和測試集,分別比較了使用單層線性層的分類器和含一個隱含層的分類器的識別性能,下文中將上述2 種分類器的實驗結果分別記為lib-plin和lib-phid;同時實驗中也測試了在TIMIT(Texas Instruments/Massachusetts Institute of Technology)數據集[28]上使用單層線性層作為分類器的實驗結果,記為timit-plin。訓練過程中預訓練模型參數被凍結。
在說話人分類任務中,同樣遵循CPC[5]的實驗設置,使用CPC 給出的數據集劃分方式將train-clean-100 劃分為訓練集和測試集,使用單層線性網絡作為分類器,測試模型的幀級說話人分類準確率,記為spk-fr。訓練過程中預訓練模型參數被凍結。
在連續(xù)語音識別任務中,將語音表示作為特征輸入,以 Conformer 模型[29]為聲學模型,以Transformer 解碼器為語言模型構建連續(xù)語音識別系統(tǒng),分別使用Librispeech的100 h和960 h的有標注數據作為訓練集對模型進行訓練,測試系統(tǒng)在test-clean 子集上的詞錯誤率(WER,word error rate)。訓練過程中預訓練模型參數與語音識別系統(tǒng)一起微調訓練。
本節(jié)使用train-clean-100 對表示模型進行預訓練,測試其在音素分類和說話人分類任務上的性能。同時采用加入高斯噪聲、時間掩蔽和頻率掩蔽3 種數據增強方式,對圖1 中左右2 個分支的輸入均以概率pa進行隨機增強。模型訓練過程中使用4 個1080Ti GPU,總的訓練批次大小為8(約12 s 語音數據),訓練總步數為200 000 步。在訓練下游任務時,語音表示模型的參數被凍結,僅作為特征提取器使用。
首先,對不同的數據增強概率pa進行了對比實驗,分別測試了pa=0.5、pa=0.8、pa=1.0 時的模型性能。不同數據增強概率時模型在下游任務中的實驗結果如表1 所示。表1 中還給出了僅對左分支輸入進行增強(單路增強)的效果。
表1 不同數據增強概率時模型在下游任務中的實驗結果
從表1 可知,在音素分類任務上,pa= 0.5時模型性能最佳;在說話人分類任務中,單路增強的模型結果最佳,pa= 0.5時模型準確率與之接近,僅相差0.04。因此,在后面的實驗中,取pa= 0.5進行增強。
進一步地,分別測試了本文模型在僅使用重建損失、僅使用正樣本對比損失及使用多任務學習時的性能,同時還對比測試了使用相同訓練數據的Mockingjay、TERA 模型的性能。100 h 無標注數據下的實驗結果如表2 所示。
表2 100 h 無標注數據下的實驗結果
表2中,sia 表示本文模型,100 表示訓練數據為100 h,rec、con和mt 分別表示僅使用重建損失、僅使用正樣本對比損失和使用多任務學習時的實驗結果。例如,sia100-rec 表示本文模型在100 h 訓練數據、僅使用重建損失時的實驗結果。
僅使用重建損失的模型(sia100-rec)可以看作對TERA 模型進行了數據增強,從表2 可知,其在各下游任務中的性能均優(yōu)于TERA 模型。僅使用正樣本對比損失的模型(sia100-con)能夠學習到一定的信息,但是性能相對較差,本文推測這是由于模型在訓練過程中僅對單個語音幀進行對比,可供利用的信息較少,導致模型無法得到充分訓練。使用正樣本對比和重建損失進行多任務學習的模型(sia100-mt)在所有下游任務的測試中性能均達到最佳,驗證了本文模型的有效性。
本節(jié)進一步在960 h 無標注數據上對模型進行訓練,參數設置與3.2 節(jié)實驗基本相同。總的訓練批次大小設置為8(約12 s 語音數據),訓練總步數為1000 000。實驗結果如表3 所示。
從表3 可知,本文模型(sia960-mt)在所有下游任務中性能均優(yōu)于TERA 模型。在說話人分類任務(spk-fr)和TIMIT 數據集上的音素分類任務(timit-plin)中,本文模型(sia960-mt)的準確率超過了wav2vec 2.0-Base 模型;在librispeech的音素分類任務(lib-plin和lib-phid)中,性能略低于wav2vec 2.0-Base 模型。出現(xiàn)這一結果的原因在于,本文模型參數量較少,學習的語音表示復雜性相對大模型來說較低,具有更好的線性可分性,因此音素分類任務在單層線性分類器上表現(xiàn)更優(yōu),而在使用多層線性層作為分類器時,測試的準確率相比wav2vec 2.0-Base 模型略低。
表3 960 h 無標注數據的測試結果
本文進一步增大了模型訓練的批次大小,將總的訓練批次增大到32,訓練總步數為1 000 000 步,表示為sia960-mt-bs32。從實驗結果看,增大訓練批次能進一步提高語音表示模型的性能,在所有下游任務測試中均取得了更好的結果。
由于本文模型參數數量僅為wav2vec 2.0-Base模型的且僅使用正樣本進行對比學習,因此可以在僅使用4 個2080Ti GPU、總的訓練批次大小為32(相當于48 s 語音數據)時即取得較好的訓練效果,模型訓練所需時間約為9.5 天。與之相比,相同訓練數據量條件下,wav2vec 2.0-Base 模型在訓練過程中使用了64 個V100 GPU,總的訓練批次大小為1.6 h。如表4 所示,在不考慮不同GPU 性能的情況下,本文模型的預訓練時間相當于使用單個GPU 預訓練38 天,wav2vec 2.0-Base 模型則相當于使用單個GPU 預訓練102 天。因此,本文方法訓練更高效,所需計算資源更少,實際中更有利于模型的推廣應用。表4 中,下游任務訓練速度和推理速度為歸一化結果。在推理時間上,使用單層線性層進行音素分類任務的測試時,wav2vec 2.0-Base 模型在測試集上的推理時間為3.8 min,本文模型僅需要1.7 min,推理速度是wav2vec 2.0-Base 模型的2.2 倍。
表4 本文模型與wav2vec 2.0-Base 模型參數量、訓練資源比較
連續(xù)語音識別任務使用ESPnet 工具箱[30]實現(xiàn),使用960 h 無標注數據對表示模型進行預訓練,本節(jié)分別在100 h和960 h 有標注數據條件下對連續(xù)語音識別模型進行微調,以分別模擬低資源和高資源訓練條件,分別測試模型在test-clean 子集上的WER,測試結果如表5 所示。聲學模型采用Conformer 模型,Trans 表示語言模型采用Transformer 解碼器結構,4-gram 表示采用四元文法語言模型。
從表5的實驗結果可知,在使用100 h 有標注數據進行微調時,與相同規(guī)模參數量的模型相比,sia960-mt 與Speech SimCLR的WER 最低,為5.7%;進一步將訓練批次大小增加至32 后,sia960-mtbs32的WER 進一步降低,為5.5%。這一實驗結果與相同訓練數據量(100 h 有標注數據)下的wav2vec 2.0-Base和HuBERT-Base 相比還有一定的差距。使用960 h 有標注數據進行微調后,sia960-mt與wav2vec 2.0-Base和HuBERT-Base 模型相比,WER 僅差0.3%和0.2%,而參數量僅約為它們的增大訓練批次大小后,sia960-mt-bs32 模型的性能進一步提高,WER 降低到2.3%。
表5 語音識別任務測試結果
SUPERB[4]是一個語音處理通用性能基準排行榜,旨在為語音社區(qū)提供一個標準和全面的測試平臺,用于評估預訓練模型在涵蓋語音所有方面的各種任務上的可推廣性,通過10 多個任務來測試語音表示對語音內容、說話人、語義和副語言4 個方面的表達能力。
本節(jié)主要在SUPERB的6 個任務上對本文模型進行測試,具體如下。
音素識別(PR,phoneme recognition)任務。使用LibriSpeech 數據集的train-clean-100、dev-clean、test-clean 子集分別作為訓練集、驗證集、測試集,測試的評價指標為音素錯誤率(PER,phone error rate)。
關鍵詞識別(KS,keyword spotting)任務。使用Speech Commands v1.0 數據集,包含10 種關鍵詞、靜音和未知,評價指標為準確率(ACC,accuracy)。
意圖分類(IC,Intent classification)任務。在話語級對說話人的意圖進行分類,使用Fluent Speech Commands 數據集[31],評價指標為ACC。
說話人辨認(SID,speaker identification)任務。在話語級進行分類,使用VoxCeleb1 數據集[32]進行訓練和測試,評價指標為ACC。
實例查詢口語術語檢測(QbE,query by example spoken term detection)任務。采用QUESST 2014[33]挑戰(zhàn)賽中的英語子集,評估指標是最大項加權值(MTWV,maximum term weighted value),能更好地平衡漏檢和虛警。
說話人確認(SV,speaker verification)任務。使用VoxCeleb1 數據集,采用x-vecter[34]作為下游模型,評價指標為等錯誤率(EER,equal error rate)。
實驗中采用SUPERB 默認的測試方法對上述6 個任務進行測試,其中預訓練模型僅作為前端的特征提取器,參數保持凍結。
表6中展示了多種自監(jiān)督預訓練模型在SUPERB 基準上的測試結果。從表6 中可以看出,當使用本文自監(jiān)督語音表示模型學習的表示作為下游任務的輸入時,在絕大多數任務上相比log-Mel譜均有明顯提升。本文模型與參數量相近的模型相比,在所有任務上性能都達到最佳;與參數量大得多的wav2vec 2.0-Base和HuBERT-Base 模型相比,在多數任務上也有相當的表現(xiàn),特別是在SID 任務上,性能甚至超過了wav2vec 2.0-Base和HuBERT-Base模型。
表6 多種自監(jiān)督預訓練模型在SUPERB 基準上的測試結果
本文提出了一種新的自監(jiān)督語音表示學習方法,該方法基于孿生網絡結構,將僅使用正樣本的對比學習任務和掩蔽重建任務相結合,以多任務學習的方式實現(xiàn)自監(jiān)督語言表示學習。與現(xiàn)有方法相比,本文方法僅使用了正樣本進行對比學習,通過梯度停止策略防止模型坍塌,僅需要較小的批次大小即可進行訓練。在音素分類、說話人分類和連續(xù)語音識別等下游任務中的實驗測試表明,與TERA等同等參數量下的其他模型相比,本文方法具有更好的性能;同時,與wav2vec2.0-Base 等參數量大得多的表示學習方法相比,本文方法在大大降低模型訓練的存儲和計算開銷的同時達到甚至超過了其性能,具有良好的應用推廣價值。