陳杰,葉瑤瑤
(上海交通大學(xué)微納電子學(xué)系,上海201100)
說話人識別(Speaker Recognition)屬于生物識別技術(shù)的一種,通過從語音信號中提取聲紋特征進行身份識別,也稱作聲紋識別。說話人識別主要分兩種模式,說話人辨認(Speaker Identification)和說話人驗證(Speaker Verification)。本文的研究方向為說話人驗證,即驗證所給的語音是否屬于所聲稱的說話人。
近年來,為了實現(xiàn)更優(yōu)的性能,DNN已經(jīng)廣泛應(yīng)用于說話人識別領(lǐng)域[1-4]中并取得了良好的效果。通過大規(guī)模據(jù)訓(xùn)練的深度神經(jīng)網(wǎng)絡(luò)在大多數(shù)任務(wù)上已經(jīng)超越了傳統(tǒng)的i-vector[5]說話人識別系統(tǒng),特別是在短語音上表現(xiàn)優(yōu)異。而在諸多基于DNN[6-8]提取說話人向量的研究中,x-vector[3,6]憑借其優(yōu)秀的區(qū)分性和靈活性被應(yīng)用在許多任務(wù)中。
x-vector系統(tǒng)的原理主要通過時延神經(jīng)網(wǎng)絡(luò)(Time-Delay Neural Network,TDNN)從語音段的多個語音幀中提取出說話人嵌入向量,其主要包括3個部分:處理幀級特征的神經(jīng)網(wǎng)絡(luò),將幀級特征池化為句級特征和處理句級特征的神經(jīng)網(wǎng)絡(luò)。通常大多數(shù)的說話人識別系統(tǒng)中會在后端使用概率線性判別分析(Proba-bilistic Linear Discriminant Analysis,PLDA)來對提取的嵌入向量打分。目前的主流技術(shù)框架中,為了增強嵌入向量的區(qū)分性還會在PLDA打分之前使用線性判別分析(Linear Discriminant Analysis,LDA)方法對向量降維。
近年來,為了提升x-vector系統(tǒng)的性能,有許多工作針對系統(tǒng)中的池化層提出了改進。譬如可學(xué)習字典編碼的池化層[9],基于注意力機制的池化方法[10-11],基于交叉卷積層的池化方法[12]。多數(shù)研究人員普遍認為嵌入向量的區(qū)分性與池化層對幀級特征的池化能力有很大關(guān)聯(lián),于是為了改善嵌入向量的性能針對池化層做了許多研究。池化后的特征經(jīng)過句級別網(wǎng)絡(luò)的處理后失去了許多原有說話人特征,更加關(guān)注其區(qū)分性,這便造成了一部分嵌入向量的說話人信息損失。我們提出了一個新方案來解決這一問題,我們在整個網(wǎng)絡(luò)訓(xùn)練完成后拋棄了第三部分的句級別神經(jīng)網(wǎng)絡(luò),轉(zhuǎn)而使用了基于孿生神經(jīng)網(wǎng)絡(luò)的自動編碼器來提取說話人嵌入向量。
目前自動編碼器在說話人識別領(lǐng)域中已經(jīng)有了許多應(yīng)用。例如2019年的一項研究提出使用變分自編碼器通過數(shù)據(jù)增強的方式來產(chǎn)生更具魯棒性的說話人嵌入向量[13],也有一項研究表明經(jīng)過變分自編碼器編碼的嵌入向量由于更近似高斯分布,使得變分自編碼器編碼后的向量針對PLDA打分的方式能達到更高的精度[14]。R.Font提出了一種降噪自編碼器的方法,可以用于獲得更具說話人區(qū)分性能的嵌入向量[15]。自動編碼器也可以用作領(lǐng)域自適應(yīng)[16]。上述的這些研究成果大都使用自動編碼器作為說話人識別系統(tǒng)中的后端處理器,當然也有前端處理的研究例如用作降噪[17]。不過,不同于已有的這些研究成果,我們直接使用自動編碼器來提取嵌入向量。
我們提出的新方案基于x-vector系統(tǒng),針對池化層的輸出特征使用基于孿生網(wǎng)絡(luò)的自動編碼器編碼獲得更具說話人區(qū)分性特征的嵌入向量,同時盡可能地保留原有說話人特征。自動編碼器可以通過訓(xùn)練神經(jīng)網(wǎng)絡(luò)重建輸入來獲得更低維度的隱變量。在我們的系統(tǒng)中,使用統(tǒng)計池化層的輸出特征作為自編碼器的訓(xùn)練數(shù)據(jù),自編碼器的中間層輸出隱變量作為說話人嵌入向量。在基于x-vector的系統(tǒng)中,這種方案實現(xiàn)方式簡單,同時編碼得到的嵌入向量相比基線系統(tǒng)的x-vector更具區(qū)分性和魯棒性。
自從Dan[6]基于深度神經(jīng)網(wǎng)絡(luò)提出了x-vector系統(tǒng)之后,說話人驗證任務(wù)的性能取得了十分顯著的提升[18,19]。在x-vector系統(tǒng)中,時延神經(jīng)網(wǎng)絡(luò)用作幀級別的特征提取網(wǎng)絡(luò),網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
系統(tǒng)中的t代表當前幀,TDNN中的第一層接收從t-2至t+2幀拼接而成的上下文特征;第二層接收上一層輸出的第t-2,t,t+2幀的拼接特征;第三層接受第二層的輸出的第t-3,t,t+3幀的拼接特征;隨后的兩層不包含上下文信息。統(tǒng)計池化層會對TDDN輸出的全部幀進行池化統(tǒng)計,其會計算所有輸出T幀的平均值和標準協(xié)方差,將會輸出2×M(M=1500)維的池化向量用作句級網(wǎng)絡(luò)訓(xùn)練。池化向量隨后傳至全連接層和輸出層。說話人標簽作為訓(xùn)練DNN網(wǎng)絡(luò)的輸出標簽。訓(xùn)練完成之后,提取全連接層第一層的輸出向量作為說話人嵌入向量,隨后其余的神經(jīng)網(wǎng)絡(luò)不需要使用。在我們的實驗中,訓(xùn)練x-vector提取器的具體實現(xiàn)方法參照Kaldi[20]工具完成。
針對基于深度神經(jīng)網(wǎng)絡(luò)提出深度說話人嵌入向量,通常會使用一個后端處理器來補償嵌入向量的信道差異和打分。后端處理方法可以分為:使用LDA算法對嵌入向量降維,其通過最大化類間方差與類內(nèi)方差的比值來保證向量最大可分性[21];隨后對LDA降維后的向量進行向量長度歸一化;使用PLDA根據(jù)說話人不同話語中的類內(nèi)差異性和類間差異性,在嵌入空間中建立相應(yīng)的說話人子空間,并利用子空間中的相似度對不同嵌入向量的相似度打分[22-23]。在這個系統(tǒng)中,LDA的降維維度設(shè)置為200。LDA和PLDA的具體算法實現(xiàn)使用Kaldi工具完成,實現(xiàn)細節(jié)參照“ivectorcompute-lda.cc”和“ivector-compute-lda.cc”這 兩 個程序。
為了增加嵌入向量中包含的說話人信息,同時去除無關(guān)噪聲,我們提出了使用自動編碼器提取說話人的嵌入向量。自動編碼器是一種自監(jiān)督學(xué)習方法,訓(xùn)練時無需額外提供說話人標簽信息,其早在上世紀80年代[24]就已經(jīng)被提出來了。自動編碼器通過自監(jiān)督學(xué)習的方式使得網(wǎng)絡(luò)學(xué)習到能夠重建輸入的網(wǎng)絡(luò)參數(shù),經(jīng)編碼后的隱變量盡可能地保留了原有輸入信息,其網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示。
自動編碼器包含兩個部分:第一部分為把輸入編碼為隱變量的編碼器,其公式可以表示為h=f(x);第二部分為把隱變量重解碼為輸入的解碼器,其公式為=g(h)。?為輸入x經(jīng)過自動編碼器重建后的輸出,我們假設(shè)χ為用作訓(xùn)練的嵌入向量集合。為了最小化重建誤差,我們使用均方誤差作為網(wǎng)絡(luò)訓(xùn)練的損失函數(shù),損失函數(shù)可表示為:
其中|χ|代表樣本的數(shù)量。在我們的實驗設(shè)置中,自動編碼器的結(jié)構(gòu)為“3000-2048-1024-512-1024-2048-3000”,如圖2所示。同時為了使訓(xùn)練過程更加穩(wěn)定,我們分別在編碼器和解碼器的兩層網(wǎng)絡(luò)之間都使用了leaky ReLU激活函數(shù)和批標準化(Batch Nor-malization,BN)。
圖2 自動編碼器結(jié)構(gòu)
孿生神經(jīng)網(wǎng)絡(luò)屬于神經(jīng)網(wǎng)絡(luò)的一種,首次提出于1993年[25]并被應(yīng)用于簽名識別,并于2005年被應(yīng)用于人臉識別[26]。大多數(shù)的工作主要集中在識別任務(wù)上,包括人臉識別、指紋識別、簽名識別,等等。類似于自動編碼器,孿生網(wǎng)絡(luò)同樣將輸入樣本映射到一個隱變量空間,使得新的隱變量同類間的距離小于不同類變量之間的距離。所以其主要想法是找到一個目標空間,這個目標空間中更能體現(xiàn)出輸入樣本之間的內(nèi)在聯(lián)系。當訓(xùn)練數(shù)據(jù)不足以包含分類樣本所需的全部信息時,孿生網(wǎng)絡(luò)能發(fā)揮出巨大的作用,很適合說話人識別任務(wù)中缺少說話人全部信息的問題。其原理圖如圖3所示。
圖3 孿生神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
孿生神經(jīng)網(wǎng)絡(luò)有兩個結(jié)構(gòu)相同,且權(quán)重共享的子網(wǎng)絡(luò),分別接受兩個輸入向量x1和x2,將其映射為X1和X2,計算兩個向量之間的距離來判斷向量的相似度。孿生神經(jīng)網(wǎng)絡(luò)使用對比損失(contrastive loss)作為損失函數(shù),表達式如下:
其中:
代表兩個樣本特征X1、X2的歐氏距離,P表示樣本的特征維數(shù),Y代表兩個樣本的匹配標簽,Y=1代表兩個樣本匹配,Y=0則代表不匹配,m為設(shè)定的閾值,N為樣本個數(shù)。
從上述的對比損失函數(shù)的表達式可以發(fā)現(xiàn),這種損失函數(shù)可以很好地表達成對樣本的匹配程度,也能夠用于訓(xùn)練提取特征的模型。
●當Y=1(即樣本相似時),損失函數(shù)為:
即當樣本相似時,其特征空間的歐氏大的話,損失值增加。
●當Y=0(即樣本相似時),損失函數(shù)為:
即當樣本相似時,其特征空間的歐氏距離反而小的話,損失值也會增加。
為了訓(xùn)練出更具說話人區(qū)分性的編碼器,我們結(jié)合了自動編碼器和孿生網(wǎng)絡(luò)的優(yōu)點,在盡可能保留原有說話人特征的基礎(chǔ)上,我們利用孿生網(wǎng)絡(luò)對自動編碼器進行半監(jiān)督訓(xùn)練,其網(wǎng)絡(luò)結(jié)構(gòu)如圖4。
圖4 基于孿生網(wǎng)絡(luò)的自動編碼器結(jié)構(gòu)
我們使用TDNN和統(tǒng)計池化層提取出來的池化向量作為網(wǎng)絡(luò)的訓(xùn)練數(shù)據(jù),原有說話人標簽作為孿生網(wǎng)絡(luò)的監(jiān)督數(shù)據(jù)。當輸入池化向量x1時,系統(tǒng)會隨機取出樣本集中另一個池化向量x2。如果這對向量來自同一說話人,當距離過大時,其損失值則越大;反之,如果這對向量來自不同說話人,當距離過小時,其損失值也越大。我們綜合原自動編碼器和孿生網(wǎng)絡(luò)的損失函數(shù)作為訓(xùn)練新網(wǎng)絡(luò)的損失函數(shù),其公式如下:
為了調(diào)控孿生網(wǎng)絡(luò)對自編碼器的懲罰力度,我們在總損失函數(shù)中引入懲罰系數(shù)λ。
訓(xùn)練階段結(jié)束后,TDNN網(wǎng)絡(luò)和自動編碼器的結(jié)構(gòu)參數(shù)將會被確定。最終說話人嵌入向量提取器的結(jié)構(gòu)如圖5所示。
圖5 基于孿生網(wǎng)絡(luò)的自動編碼器深度說話人識別系統(tǒng)
我們保留了基線x向量系統(tǒng)的前兩個過程,幀級TDNN網(wǎng)絡(luò)和統(tǒng)計池化層。自動編碼器的編碼器用來將池化向量轉(zhuǎn)換成說話人嵌入向量。最后,系統(tǒng)根據(jù)PLDA的打分分數(shù)判決語音是否來自注冊說話人。
在本次實驗中,基線x-vector系統(tǒng)和我們提出的系統(tǒng)均使用Voxceleb1[27]和Voxceleb2[28]兩個數(shù)據(jù)集的數(shù)據(jù)作為訓(xùn)練集。在訓(xùn)練階段,我們只使用兩個數(shù)據(jù)集的開發(fā)集訓(xùn)練。Voxceleb1的開發(fā)集包含來自1211個不同說話人的148642句語音,Voxceleb2的開發(fā)集包含來自5994個不同說話人的1092009句語音,這些語音均采集自YouTube網(wǎng)站上的視頻。LDA和PLDA的訓(xùn)練數(shù)據(jù)為兩個數(shù)據(jù)集經(jīng)過向量提取器得到的說話人嵌入向量。
在測試階段,我們使用Voxceleb1的TEST集來評估基線系統(tǒng)和新系統(tǒng)的性能。測試集包含4874段語音,平均時長約為8秒,采樣頻率為16KHz,采集自YouTube上40位不同的說話人。測試過程分為兩個階段,注冊和評估。在注冊階段,每個說話人的3句語音被用作注冊語音,用來提取嵌入向量,3條語音的嵌入向量在取平均值后作為代表注冊說話人的說話人向量。在評估階段,剩余的語音將會分別計算出與注冊語音的相似度,根據(jù)相似度判斷是否為本人。
(1)等錯誤率
在說話人識別任務(wù)中,等錯誤率(Equal Error Rate,EER)為最常用的指標,這是一種通過調(diào)整閾值使錯誤接受率和錯誤拒絕率相等時對應(yīng)的比率。調(diào)整后的閾值點可以作為實際使用階段的閾值。
錯誤接受率(False Acceptance Rate,F(xiàn)AR):
其中FP代表錯誤接受樣本數(shù),TN代表正確拒絕樣本數(shù)。
錯誤拒絕率(False Rejection Rate,F(xiàn)RR):
其中TP代表正確接受樣本數(shù),F(xiàn)N代表錯誤拒絕樣本數(shù)。
當通過調(diào)整閾值確定等錯誤率后,EER=FAR=FRR。
(2)最小檢測代價
最小檢測代價(Minimum Detection Cost Function,minDCF)是美國國家標準與技術(shù)研究說話人識別評價(NIST SRE)中定義且常用的一種性能評定方法。其定義為:
其中CFR代表錯誤拒絕的懲罰系數(shù),CFR代表錯誤接受的懲罰系數(shù),Ptarget代表真實說話測試的先驗概率,可以根據(jù)實際環(huán)境分別設(shè)定它們的值。實驗中我們設(shè)定CFR=10,CFA=1,Ptarget=0.01。
系統(tǒng)的輸入特征我們設(shè)置為30維的梅爾頻率倒譜系數(shù),采用幀長為25ms和幀移為10ms的滑動窗口對語音信號進行分幀,同時使用基于能量的語音端點檢測方法去除語音中的靜音幀?;€系統(tǒng)中x-vector提取器的實現(xiàn)方法參照Kaldi中SRE16/V2樣例實現(xiàn)。提取的x-vector維度為512維,池化向量維度為3000維,自動編碼器提取的嵌入向量維度為512維。訓(xùn)練時使用單張NVIDIA RTX 2080TI顯卡。
我們針對3種不同結(jié)構(gòu)的說話人識別系統(tǒng),在Voxceleb1的TEST數(shù)據(jù)集上進行了測試,其實驗結(jié)果見表1。
表1 在Voxceleb1數(shù)據(jù)集中不同說話人識別系統(tǒng)性能的表現(xiàn)
由表1可知,我們提出的自動編碼器提取出的說話人嵌入向量相比基線系統(tǒng)提取的x-vector向量性能得到了提升。在引入孿生神經(jīng)網(wǎng)絡(luò)訓(xùn)練后,系統(tǒng)的等錯誤率進一步下降。說明我們的方法提取出來的說話人嵌入向量更具區(qū)分性和魯棒性。
為了進一步探究λ取值對自編碼器性能的影響,我們通過改變λ來驗證其效果,其中我們設(shè)置閾值m=10,實驗結(jié)果如表2所示。
表2 λ對基于孿生網(wǎng)絡(luò)的自動編碼器說話人識別性能的影響
實驗表明λ權(quán)重對系統(tǒng)性能有著比較顯著的影響,實際應(yīng)用的時候調(diào)整合適的λ參數(shù)需要經(jīng)過詳細的測試,本實驗中選取λ=0.1作為最后的實驗方案??梢钥闯觯黾訉\生網(wǎng)絡(luò)的自動編碼器相比原本的自動編碼器的性能有了更大的提升。
本文針對最新的基于x-vector說話人識別系統(tǒng)進行了改進,在原有框架的基礎(chǔ)上更改了向量提取器的結(jié)構(gòu),增加了自動編碼器作為說話人嵌入向量的提取器。隨后對自動編碼器進行了優(yōu)化,使用了孿生神經(jīng)網(wǎng)絡(luò)監(jiān)督訓(xùn)練自動編碼器,使得到編碼器對說話人更具區(qū)分性,提升了說話人識別系統(tǒng)整體的性能。作為說話人識別系統(tǒng)的新架構(gòu),本文對自動編碼器的優(yōu)化還未能達到最佳,在后續(xù)的研究中還需要對自動編碼器的結(jié)構(gòu)進行進一步的優(yōu)化。