郭 嘉,彭太樂
(淮北師范大學(xué)計算機科學(xué)與技術(shù)學(xué)院,安徽 淮北 235065)
通過大量數(shù)據(jù)預(yù)訓(xùn)練的語音模型[1]在各種語音處理下游任務(wù)[2-5]中展現(xiàn)出卓越的性能。預(yù)訓(xùn)練模型通過學(xué)習(xí)語音特征表示,在處理各種下游任務(wù)時能夠保持較高的準(zhǔn)確度。盡管這些模型的表現(xiàn)出色,但是在應(yīng)用于下游任務(wù)時需要引入額外參數(shù)并使用任務(wù)特定的目標(biāo)函數(shù)對預(yù)訓(xùn)練的模型[6-7]進(jìn)行微調(diào)。這導(dǎo)致隨著下游任務(wù)數(shù)量的增加,需要投入大量的人力和物力資源[8]。為了解決這一問題,本文提出一種新的范式,以實現(xiàn)高效且高精度地將語音模型應(yīng)用于下游任務(wù)。提示方法[9-11]的興起提供了另一條可供選擇的道路,無須為每一個任務(wù)建立獨立的下游模型。
提示方法最初在自然語言處理領(lǐng)域[12]引起了研究者關(guān)注。研究者發(fā)現(xiàn)通過大規(guī)模預(yù)訓(xùn)練的語言模型[13-15]在很多自然語言處理任務(wù)上都展現(xiàn)出了小樣本學(xué)習(xí)(few-shot)的能力。具體來說,在模型的嵌入中添加一些有著特定模板的演示和一個新的問題,模型會根據(jù)這幾個演示來輸出新問題的答案。這些演示通常采用文本—提示—答案的形式,這種提示方法可以使預(yù)訓(xùn)練模型在不改變模型結(jié)構(gòu)及參數(shù)的情況下,同時應(yīng)用在多個下游任務(wù)上,并且擁有不錯的精度。對于每個下游任務(wù),提示方法只需要找到特定于這個任務(wù)的模板或有限數(shù)量的參數(shù)。這些模板或參數(shù)可以幫助模型在不做出改變的情況下為任務(wù)生成需要的結(jié)果。后續(xù)的研究[16-18]表明,這些提示甚至可以是人類無法理解的表達(dá)形式,如向量表示。研究者提出了在模型的嵌入中使用連續(xù)提示的提示調(diào)整方法[16-18]。這種提示方法可以將大多數(shù)自然語言處理任務(wù)重新定義為生成問題,具有相當(dāng)高的準(zhǔn)確度,并且還可以進(jìn)一步提升。
目前提示方法已廣泛應(yīng)用于文本、圖像、語音等多個領(lǐng)域[19-23],并取得了顯著的成果。盡管提示方法在拓展模型應(yīng)用于下游任務(wù)方面提供了便利,但與預(yù)訓(xùn)練加微調(diào)的方法相比,其準(zhǔn)確度仍稍遜一籌。因此,研究者致力于提高提示方法在下游任務(wù)上的表現(xiàn)[24-26],使其可以在快速調(diào)整模型的同時也可以提供更高的精度。
在語音識別領(lǐng)域,研究者通過語音編碼器將語音轉(zhuǎn)換為語言模型可以理解的文本嵌入形式,實現(xiàn)了小樣本學(xué)習(xí)的能力。通過這種方式實現(xiàn)的語音識別模型通常需要由語音模型和語言模型組成。受到知識蒸餾方法[27-31]的啟發(fā),本文提出了一種基于提示方法與知識蒸餾方法的語音識別模型(SpokenPrompt-KD 模型)。SpokenPrompt-KD 模型由語音模型Wav2Vec2.0 和語言模型GPT-2 組成,通過將訓(xùn)練有素的教師語言模型的知識傳遞給學(xué)生語音模型,改善了學(xué)生語音模型的預(yù)測性能,從而提高整體模型的性能。通過知識蒸餾,教師模型的豐富知識可以傳遞給學(xué)生模型,使學(xué)生模型能夠受益于教師模型的經(jīng)驗和泛化能力,從而提高模型的精度。這種知識傳遞的過程可以彌補語音資源匱乏的問題,從而提高模型在資源受限情況下的性能表現(xiàn)。本文通過最小化文本和語音特征之間的差異來完成知識的傳遞。具體而言,本文選擇通過縮小語言模型和語音模型輸出之間的邏輯距離來提取語言模型的知識[32]。為了減少文本和語音兩種模式之間固有的差異,本文采用了可學(xué)習(xí)的線性層、最近鄰插值和收縮機制等方法。這些技術(shù)手段能夠更好地實現(xiàn)語音模型知識的提取,從而在訓(xùn)練過程中增強整體模型的性能表現(xiàn)。
本文對SpokenPrompt-KD 模型進(jìn)行了語音分類任務(wù)的評估,以證明這種小樣本學(xué)習(xí)能力的模型在語音識別領(lǐng)域的有效性。此外,通過進(jìn)行對比實驗,進(jìn)一步證明知識蒸餾方法對于模型的積極作用。特別是在資源受限的情況下,知識蒸餾方法的優(yōu)勢更加明顯,能夠顯著提升模型的性能。
如圖1 所示,SpokenPrompt-KD 模型由一個語音編碼器和一個自回歸的語言模型組成。語音編碼器負(fù)責(zé)將輸入的語音轉(zhuǎn)換為語言模型可以理解的文本嵌入形式。語音編碼器(speech encoder)fsm使用的模型是基于Transformer 架構(gòu)的Wav2-Vec2.0[33-34],它用于將輸入的語音信號轉(zhuǎn)換為連續(xù)的語音嵌入。語言模型是使用GPT-2 模型作為基礎(chǔ)模型。它包含文本編碼器(text encoder)和基于Transformer 的神經(jīng)網(wǎng)絡(luò)(language model)fgpt2。該模型通過利用之前的單詞信息來預(yù)測下一個單詞,這種逐詞預(yù)測的方式被稱為自回歸。語音編碼器fsm將語音wav 編碼為連續(xù)語音嵌入w=[w1,w2,···,wm]=fsm(wav)。語言模型中的文本編碼器負(fù)責(zé)將文本s=[s1,s2,···,sk]轉(zhuǎn)換為文本嵌入序列,神經(jīng)網(wǎng)絡(luò)fgpt2對于文本分布p(s)的建模為
圖1 SpokenPrompt-KD 預(yù)訓(xùn)練界面Fig.1 SpokenPrompt-KD pre-training interface
即自回歸語言模型fgpt2進(jìn)行預(yù)測時,基于已經(jīng)生成的文本嵌入t1,···,ti-1,輸出下一個單詞ti的概率分布p。
本文使用LibriSpeech ASR 語料庫[35]進(jìn)行SpokenPrompt-KD 模型的預(yù)訓(xùn)練。LibriSpeech ASR語料庫是一個包含公共領(lǐng)域有聲書的大規(guī)模英語語音數(shù)據(jù)集,共包含約1 000 h 的語音數(shù)據(jù)。選擇100hour-train-clean 的訓(xùn)練集進(jìn)行預(yù)訓(xùn)練,并從中隨機采樣10 h 和5 h 的數(shù)據(jù)集,以模擬低資源條件。在預(yù)訓(xùn)練期間,使用已經(jīng)訓(xùn)練好的GPT-2 模型作為語言模型,并將其參數(shù)固定,不進(jìn)行反向傳播,只更新語音編碼器Wav2Vec2.0 的參數(shù)。圖1 展示了SpokenPrompt-KD 模型的預(yù)訓(xùn)練界面,其中雙向箭頭表示梯度的反向傳播方向。模型同時使用了CTC 損失和知識蒸餾損失來進(jìn)行預(yù)訓(xùn)練。在預(yù)訓(xùn)練過程中,模型輸入的形式是文本—提示—答案。使用的問題提示是“what did the speaker say?”(演講者說了什么?)。預(yù)訓(xùn)練中,首先將問題提示Sq通過文本嵌入器轉(zhuǎn)換為文本嵌入序列,然后將語音輸入wav 通過語音編碼器fsm轉(zhuǎn)換為連續(xù)語音嵌入w,最后將w與tq進(jìn)行簡單拼接后作為最終的輸入,傳入到語言模型fgpt2進(jìn)行預(yù)訓(xùn)練。語言模型基于語音wav 和問題提示Sq得到問題答案Sa的概率建模為
即語言模型在接收原始語音wav 以及問題提示Sq后輸出答案Sa的概率分布。其中w=[w1,w2,···,wm]為原始語音wav 解碼后的連續(xù)語音嵌入,tq為問題提示Sq的文本嵌入序列,是自回歸語言模型訓(xùn)練過程中已經(jīng)生成的部分答案,作為生成下一個答案的前提條件。它與w和tq進(jìn)行拼接,然后作為輸入傳遞給模型。
本文在小樣本二進(jìn)制分類任務(wù)上來評估SpokenPrompt-KD 模型。在評估期間,模型不會更新其參數(shù),同時給模型提供一個提示序列。這個提示序列包含了0~9 個不同的任務(wù)演示,然后將演示中使用的提示模板作為提示序列的結(jié)尾。圖2展示了評估期間的推理界面。如圖2 所示,任務(wù)演示由語音和文本組成,并采用特定的提示模板。語音和文本分別通過語音編碼器和文本編碼器進(jìn)行編碼,再進(jìn)行簡單的拼接,以生成任務(wù)演示嵌入。最后,在需要進(jìn)行分類的語音演示末端留有一個輸出答案標(biāo)簽的位置,用于生成最終的分類結(jié)果。SpokenPrompt-KD 模型會根據(jù)輸入的內(nèi)容來填補空白,從而將分類任務(wù)轉(zhuǎn)化為生成任務(wù)。實驗輸出的答案是預(yù)先設(shè)置好的標(biāo)簽,這些標(biāo)簽的數(shù)量在0 到9 之間。
圖2 SpokenPrompt-KD 推理界面Fig.2 SpokenPrompt-KD inference interface
CTC(connectionist temporal classification)是文本和語音識別等領(lǐng)域常用的算法之一,用來解決輸入和輸出序列長度不同無法對齊的問題。本文使用pytorch 中封裝的ctc_loss 接口來計算CTC 損失。首先將原始語音wav 通過語音編碼器fsm進(jìn)行處理,以獲取包含序列級時間信息的隱藏層狀態(tài)(hidden state)fi,j,同時提供對應(yīng)的真實文本text 作為參考,從而計算CTC 損失。
知識蒸餾方法旨在通過減小語音特征和文本特征之間的差異來實現(xiàn)知識的傳遞。本文通過時間和特征維度對齊語音和文本的隱藏層輸出,并利用均方誤差損失(MSE)來度量對齊后的語音和文本特征之間的差異,從而縮短兩者之間的距離,以實現(xiàn)知識的傳遞目標(biāo)。
1.4.1 語音特征提取
原始語音wav 通過語音編碼器fsm產(chǎn)生隱藏層序列fi,j。本文將fi,j的特征維度通過一個可學(xué)習(xí)的線性層linear1改變?yōu)檎Z言模型標(biāo)記器的詞匯大小,獲得最終的語音特征的序列級隱藏狀態(tài)Hwav。
其中l(wèi)inear1與式(3)中的linear1相同,由一個形狀為的權(quán)重和形狀為的偏差組成。
1.4.2 文本特征提取
式中:Dt是文本通過語言模型標(biāo)記器標(biāo)記后的長度;是語言模型文本編碼器最后一層隱藏層輸出的特征維度。
1.4.3 對齊語音特征和文本特征
為了計算知識蒸餾損失,需要對齊語音編碼器輸出Hwav和語言模型輸出Htext的時間維度和特征維度。
1)時間維度對齊。
語音和文本之間存在固有差異,導(dǎo)致它們在時間維度上的對齊一直是一個挑戰(zhàn)。模型使用CTC 損失函數(shù)訓(xùn)練時會產(chǎn)生稀疏預(yù)測,語音特征中會含有許多“?”特征,也稱為空白標(biāo)記。而被標(biāo)記的文本T被輸入到語言模型時并不會產(chǎn)生“?”的文本特征。為了解決這個問題,本文使用對齊語音和文本特征[37-38]時常用的收縮機制(shrink)[39],刪除語音特征中的“?”,并在相鄰且相同的預(yù)測之間使用它們的平均值進(jìn)行替代。語音特征Hwav通過shrink 方法在時間維度上進(jìn)行收縮后得到語音特征。
由于文本標(biāo)記器的詞匯表通常很大,所以標(biāo)記后的文本在時間維度上通常比提取的語音特征的時間維度?。矗?。為了解決這個問題,本文采用常用于圖像處理的最近鄰插值方法(interpolate)來拓展文本特征的時間維度。這種方法通過多次復(fù)制特征來增加文本特征的時間維度。通過擴展文本特征的時間維度,確保了文本特征Htext與縮小時間維度后的語音特征具有相同的時間維度。
至此,通過收縮機制和最近鄰插值方法,成功地使語音和文本特征具有了相同的時間維度。
2)特征維度對齊。
至此,語音特征和文本特征在時間和特征維度都實現(xiàn)了對齊。
1.4.4 知識蒸餾損失
為了評估知識蒸餾對提示方法的影響,訓(xùn)練了2 個版本的模型:一個是沒有使用知識蒸餾方法的SpokenPrompt-KD 模型,稱為基準(zhǔn)模型(base 模型);另一個是SpokenPrompt-KD 模型。本文使用2 種經(jīng)過簡單處理的數(shù)據(jù)集(Flickr8k 音頻字幕語料庫(Flickr8k)[40]、流利的語音命令語料庫(Fluent)[41])來評估。
本文在使用Flickr8k 和Fluent 時,針對不同數(shù)據(jù)庫的特點采取了不同的提示策略,并對數(shù)據(jù)庫的標(biāo)簽進(jìn)行了適當(dāng)?shù)男薷摹?/p>
Flickr8k 音頻字幕語料庫是Flickr 8k 的拓展,它包含了8 000 張自然圖像的 40 000 條語音字幕。本文丟棄圖像部分,只使用語音數(shù)據(jù)以及其對應(yīng)的文本翻譯,從中隨機抽取2 000 條字幕,并為其分配man-woman、male-female、black-white、darklight 這4 個標(biāo)簽。對于顏色標(biāo)簽,問題提示使用了“The speaker is describing a person in”。對于性別標(biāo)簽,問題提示使用了“The speaker is describing a”。
Fluent 數(shù)據(jù)集包含與智能設(shè)備交互的語音命令,例如“播放歌曲”“增加音量”,每個命令都標(biāo)有動作、對象和位置。本文將涉及語言操作的標(biāo)簽統(tǒng)一改為“語言”,而不是使用數(shù)據(jù)集原本的具體語言作為標(biāo)簽。其他標(biāo)簽與數(shù)據(jù)集的標(biāo)簽保持一致。在訓(xùn)練過程中,本文使用“the topic is”作為問題提示。
在SpokenPrompt-KD 模型中,使用fairseq 的Wav2Vec2.0 作為語音編碼器,并使用Huggingface實現(xiàn)的具有1.17 億個參數(shù)的GPT-2 模型作為語言模型。在預(yù)訓(xùn)練階段,本文使用了5、10 和100 h 的Librispeech 數(shù)據(jù)對SpokenPrompt-KD 模型進(jìn)行訓(xùn)練,并與base 模型進(jìn)行對比實驗。
base 模型與本文提出的SpokenPrompt-KD 模型具有相同的模型結(jié)構(gòu)以及訓(xùn)練細(xì)節(jié),唯一區(qū)別在于它沒有使用知識蒸餾方法來提高語音識別的性能,即在模型預(yù)訓(xùn)練過程中不使用知識蒸餾損失函數(shù)(kd_loss)。為了驗證知識蒸餾對基于提示方法的語音識別模型的影響,本文從不同的訓(xùn)練資源環(huán)境和不同的驗證數(shù)據(jù)集角度對SpokenPrompt-KD 模型和base 模型進(jìn)行對比。
在評估過程中,本文從測試集中隨機抽取幾個樣本及其正確的標(biāo)簽作為提示。經(jīng)過預(yù)處理后,將這些提示與需要進(jìn)行推理的語音和一個新的問題提示簡單拼接,并傳入語言模型進(jìn)行推斷。本文從測試集的其余部分中抽取300 個樣本和它們的答案標(biāo)簽作為一個評估批次。由于是隨機抽取樣本,某些類別的樣本數(shù)量可能會遠(yuǎn)多于其他類別。為了平衡評估批次中每個類別標(biāo)簽的樣本數(shù)量,刪除具有過多樣本的類別中的樣本。在進(jìn)行提示模型時,本文使用的提示是轉(zhuǎn)錄的文本嵌入而不是語音嵌入。為了增強實驗的可靠性,每次評估時都使用了隨機種子的方法進(jìn)行5 次采樣,報告的分類精度是這5 個結(jié)果的平均值。
表1 展示了SpokenPrompt-KD 模型和base 模型分別在不同規(guī)模語音資源預(yù)訓(xùn)練之后在2 個語音理解任務(wù)上的表現(xiàn)。
表1 語音識別任務(wù)結(jié)果準(zhǔn)確率Tab.1 results of speech recognition task
本文使用在所有提示數(shù)量上獲得的最佳精度來表示模型在單個標(biāo)簽對上的性能,以此來排除提示數(shù)量對模型小樣本學(xué)習(xí)能力的影響。同時將數(shù)據(jù)集所有標(biāo)簽對的準(zhǔn)確率求平均后作為最終的結(jié)果。本文在3 種預(yù)訓(xùn)練資源下分別進(jìn)行了3 個語音理解任務(wù)。實驗結(jié)果表示,SpokenPrompt-KD 模型和base 模型均在語音理解任務(wù)中表現(xiàn)出顯著高于偶然成功率(50%概率)的準(zhǔn)確性,這進(jìn)一步驗證了提示方法在語音識別領(lǐng)域是有效的。同時,在相同的前提條件下,SpokenPrompt-KD 模型在語音理解任務(wù)中的精度相比base 模型都有所提升。在10 h的預(yù)訓(xùn)練資源下,知識蒸餾對模型的語音識別精度提升最為顯著,SpokenPrompt-KD 模型的語音分類精度相比base 模型最高提升了2.8%。在5 h 和100 h 數(shù)據(jù)集預(yù)訓(xùn)練的情況下,SpokenPrompt-KD模型相比base 模型語音識別的精度最高,分別提高了0.8%和1.9%。這進(jìn)一步驗證了知識蒸餾方法對基于提示方法的語音識別模型的積極作用。而且隨著預(yù)訓(xùn)練時使用數(shù)據(jù)集規(guī)模的增加,模型語音識別的性能也會更高。推測使用更大的語言模型和更大的數(shù)據(jù)集進(jìn)行預(yù)訓(xùn)練可能會使模型能夠擁有更高的精度。
本文還通過對比試驗研究了知識蒸餾方法在不同提示數(shù)量上對模型的影響。對于同一個數(shù)據(jù)集,將所有標(biāo)簽的同一提示數(shù)量的精度取平均作為評估標(biāo)準(zhǔn)。圖3 示出了100 h 的LibriSpeech 數(shù)據(jù)集預(yù)訓(xùn)練下的SpokenPrompt-KD 模型和base 模型在2 個不同數(shù)據(jù)集上使用不同提示數(shù)量時的分類精度(誤差在±1 之間)。經(jīng)過多次實驗,發(fā)現(xiàn)增加提示數(shù)量并不一定帶來性能的提升,甚至在某些情況下可能導(dǎo)致性能下降。雖然SpokenPrompt-KD模型在模型評估綜合性能時要優(yōu)于base 模型,但在使用相同提示數(shù)量比較時,并不是所有情況下都優(yōu)于后者。在提示數(shù)量≥4 時,SpokenPrompt-KD模型的性能優(yōu)于base 模型,在提示數(shù)量較少時其性能比后者要略低??傮w來說,在多數(shù)的情況下SpokenPrompt-KD 模型的性能是更加優(yōu)越的。
圖3 不同提示數(shù)量的準(zhǔn)確率Fig.3 Accuracy at different numbers of prompts
本文構(gòu)建了一個基于提示方法和知識蒸餾方法的口語語音識別模型(SpokenPrompt-KD 模型),并通過實驗證明了自然語言處理領(lǐng)域的小樣本學(xué)習(xí)能力可以擴展到語音識別領(lǐng)域。通過對比實驗,發(fā)現(xiàn)知識蒸餾方法的使用對提示方法的應(yīng)用具有積極的作用,使得模型在低資源情況下仍能表現(xiàn)出良好的性能。這項研究結(jié)果為口語語音識別領(lǐng)域的小樣本學(xué)習(xí)提供了新的思路,并為在資源受限的情況下實現(xiàn)高效語音識別提供了有益的參考。