編者按
近年來,許多智慧語音技術服務商開始佈局聲紋識別領域,聲紋識別逐漸進入大眾視野。隨著技術的發展和在產業內的不斷滲透,聲紋識別的市場佔比也逐年上升,但目前聲紋識別需要解決的關鍵問題還有很多。本文中,百分點感知智慧實驗室梳理了聲紋識別技術的發展歷史,並分析了每一階段的關鍵技術原理,以及遇到的困難與挑戰,希望能夠讓大家對聲紋識別技術有進一步瞭解。
聲紋(Voiceprint),是用電聲學儀器顯示的攜帶言語資訊的聲波頻譜。人類語言的產生是人體語言中樞與發音器官之間一個複雜的生理物理過程,不同的人在講話時使用的發聲器官(舌、牙齒、喉頭、肺、鼻腔)在尺寸和形態方面有著很大的差異,所以任何兩個人的聲紋圖譜都是不同的。每個人的語音聲學特徵既有相對穩定性,又有變異性,不是絕對的、一成不變的。這種變異可來自生理、病理、心理、模擬、偽裝,也與環境干擾有關。儘管如此,由於每個人的發音器官都不盡相同,因此在一般情況下,人們仍能區別不同的人的聲音或判斷是否是同一人的聲音。因此聲紋也就成為一種鑑別說話人身份的識別手段。
圖一 發聲器官示意圖
所謂聲紋識別,是生物識別技術的一種,也叫做說話人識別,是一項根據語音波形中反映說話人生理和行為特徵的語音引數,自動識別語音說話者身份的技術。首先需要對發音人進行註冊,即輸入發音人的一段說話音訊,系統提取特徵後存入模型庫中,然後輸入待識別音訊,系統提取特徵後經過比對打分從而判斷所輸入音訊中說話人的身份。從功能上來講,聲紋識別技術應有兩類,分別為“1:N”和“1:1”。前者是判斷某段音訊是若干人中的哪一個人所說;後者則是確認某段音訊是否為某個人所說。因此不同的功能適用於不同的應用領域,比如公安領域中重點人員布控、偵查破案、反電信欺詐、治安防控、司法鑑定等經常用到的是“1:N”功能,即辨認音訊若干人中的哪一個人所說;而“1:1”功能則更多應用於金融領域的交易確認、賬戶登入、身份核驗等。
從技術發展角度來說,聲紋識別技術經歷了三個大階段:
第一階段,基於模板匹配的聲紋識別技術;
第二階段,基於統計機器學習的聲紋識別技術;
第三階段,基於深度學習框架的聲紋識別技術。
一、模板匹配的聲紋識別
下圖是最早的聲紋識別技術框架,是一種非引數模型。特點:基於訊號比對差別,通常要求註冊和待識別的說話內容相同,屬於文字相關,因此侷限性很強。
圖二 兩人對於同一數字發音與譜圖
此方法將訓練特徵引數和測試的特徵引數進行比較,兩者之間的失真(Distortion)作為相似度。例如VQ(Vector Quantization向量量化)模型和動態時間規整法DTW(Dynamic Time Warping)模型。
DTW 透過將輸入待識別的特徵向量序列與訓練時提取的特徵向量進行比較,透過最優路徑匹配的方法來進行識別。而VQ 方法則是透過聚類、量化的方法生成碼本,識別時對測試資料進行量化編碼,以失真度的大小作為判決的標準。
二、基於統計機器學習的技術框架
但由於第一階段只能用於文字相關的識別,即註冊語音的內容需要跟識別語音內容一致,因此具有很強的侷限性,同時受益於統計機器學習的快速發展,聲紋識別技術也迎來了第二階段。此階段可細分為四個小階段,即GMM > GMM-UBM/GMM-SVM > JFA > GMM-iVector-PLDA。
1. 高斯混合模型(GMM)
特點:採用大量資料為每個說話人訓練(註冊)模型。註冊要求很長的有效說話人語音。
高斯混合模型(Gaussian Mixture Model, GMM)是統計學中一個極為重要的模型,其中機器學習、計算機視覺和語音識別等領域均有廣泛的應用,甚至可以算是神經網路和深度學習普及之前的主流模型。
GMM之所以強大,在於其能夠透過對多個簡單的正態分佈進行加權平均,從而用較少的引數模擬出十分複雜的機率分佈。
在聲紋識別領域,高斯混合模型的核心設定是:將每個說話人的音訊特徵用一個高斯混合模型來表示。採用高斯混合模型的動機也可以直觀的理解為:每個說話人的聲紋特徵可以分解為一系列簡單的子機率分佈,例如發出的某個音節的機率、該音節的頻率分佈等。這些簡單的機率分佈可以近似的認為是正態分佈(高斯分佈)。但是由於GMM規模越龐大,表徵力越強,其負面效應也會越明顯:引數規模也會等比例膨脹,需要更多的資料來驅動GMM的引數訓練才能得到一個更加通用(或泛化)的GMM模型。
假設對維度為50的聲學特徵進行建模,GMM包含1024個高斯分量,並簡化多維高斯的協方差為對角矩陣,則一個GMM待估引數總量為1024(高斯分量的總權重數)+1024×50(高斯分量的總均值數)+1024×50(高斯分量的總方差數)=103424,超過10萬個引數需要估計。
這種規模的變數就算是將目標使用者的訓練資料量增大到幾個小時,都遠遠無法滿足GMM的充分訓練要求,而資料量的稀缺又容易讓GMM陷入到一個過擬合(Over-fitting)的陷阱中,導致泛化能力急劇衰退。因此,儘管一開始GMM在小規模的文字無關資料集合上表現出了超越傳統技術框架的效能,但它卻遠遠無法滿足實際場景下的需求。
2. 高斯混合背景模型(GMM-UBM)和支援向量機(GMM-SVM)
特點:使用適應模型的方法減少建模註冊所需要的有效語音資料量,但對跨通道分辨能力不強。
圖三 GMM-UBM)
由於前邊使用GMM模型對資料需求量很大,因此2000年前後,DA Reynolds的團隊提出了一種改進的方案:既然沒法從目標使用者那裡收集到足夠的語音,那就換一種思路,可以從其他地方收集到大量非目標使用者的聲音,積少成多,我們將這些非目標使用者資料(聲紋識別領域稱為背景資料)混合起來充分訓練出一個GMM,這個GMM可以看作是對語音的表徵,但由於它是從大量身份的混雜資料中訓練而成,因此不具備表徵具體身份的能力。
它對語音特徵在空間分佈的機率模型給出了一個良好的預先估計,我們不必再像過去那樣從頭開始計算GMM的引數(GMM的引數估計是一種稱為EM的迭代式估計算法),只需要基於目標使用者的資料在這個混合GMM上進行引數的微調即可實現目標使用者引數的估計,這個混合GMM就叫通用背景模型(Universal Background Model,UBM)。
圖四 模型訓練原理
UBM的一個重要優勢在於它是透過最大後驗估計(Maximum A Posterior,MAP)的演算法對模型引數進行估計,避免了過擬合的發生。MAP演算法的另外一個優勢是我們不必再去調整目標使用者GMM的所有引數(權重、均值、方差),只需要對各個高斯成分的均值引數進行估計,就能實現最好的識別效能。這樣待估的引數一下減少了一半多(103424 -> 51200),越少的引數也意味著更快的收斂,不需要那麼多的目標使用者資料即可完成對模型的良好訓練。
GMM-UBM系統框架,是GMM模型的一個推廣,是用於解決當前目標說話人資料量不夠的問題的一種方式。透過收集其他說話人資料來進行一個預先的訓練。透過MAP演算法的自適應,將預先訓練過的模型向目標說話人模型進行微調。這種方式可以大大減少訓練所需要的樣本量和訓練時間(透過減少訓練引數)。
但是GMM-UBM缺乏對應於通道多變性的補償能力,因此後來WM Campbell將支援向量機(Support Vector Machine,SVM)引入了GMM-UBM的建模中,透過將GMM每個高斯分量的均值單獨拎出來,構建一個高斯超向量(Gaussian SuperVector,GSV)作為SVM的樣本,利用SVM核函式的強大非線性分類能力,在原始GMM-UBM的基礎上大幅提升了識別的效能,同時基於GSV的一些規整演算法,例如擾動屬性投影(Nuisance Attribute Projection, NAP),類內方差規整(Within Class Covariance Normalization,WCCN)等,都在一定程度上補償了由於通道易變形對聲紋建模帶來的影響。
3. 聯合因子分析法(JFA)
特點:分別建模說話人空間、通道空間以及殘差噪聲,但每一步都會引入誤差。
在傳統的基於GMM-UBM的識別系統中,由於訓練環境和測試環境的失配問題,導致系統性能不穩定。於是Patrick Kenny在05年左右提出了一個設想:既然聲紋資訊可以用一個低秩的超向量子空間來表示,那噪聲和其他通道效應是不是也能用一個不相關的超向量子空間進行表達呢?
基於這個假設,Kenny提出了聯合因子分析(Joint Factor Analysis,JFA)的理論分析框架,將說話人所處的空間和通道所處的空間做了獨立不相關的假設,在JFA的假設下,與聲紋相關的資訊全部可以由特徵音空間(Eigenvoice)進行表達,並且同一個說話人的多段語音在這個特徵音空間上都能得到相同的引數對映,之所以實際的GMM模型引數有差異,這個差異資訊是由說話人差異和通道差異這兩個不可觀測的部分組成的公式如下:
M=s+c
其中,s為說話人相關的超向量,表示說話人之間的差異;c為通道相關的超向量,表示同一個說話人不同語音段的差異;M為GMM均值超向量,表述為說話人相關部分s和通道相關部分c的疊加。
圖五 均值超向量
如上圖所示,聯合因子分析實際上是用GMM超向量空間的子空間對說話人差異及通道差異進行建模,從而可以去除通道的干擾,得到對說話人身份更精確的描述。JFA定義公式如下:
s = m + Vy + dZ
c = Ux
其中,s為說話人相關的超向量,表示說話人之間的差異;m為與說話人以及通道無關的均值超向量;V為低秩的本徵音矩陣;y為說話人相關因子;D為對角的殘差矩陣;z為殘差因子;c為通道相關的超向量,表示同一個說話人不同語音段的差異;U為本徵通道矩陣;x為與特定說話人的某一段語音相關的因子。這裡的超引數集合{V,D,U}即為需要評估的模型引數。有了上面的定義公式,我們可以將均值超向量重新改寫為如下形式:
M = m + Vy + Ux + Dz
為了得到JFA模型的超引數,我們可以使用EM演算法訓練出UBM模型,使用UBM模型提取Baum-Welch統計量。
儘管JFA對於特徵音空間與特徵通道空間的獨立假設看似合理,但絕對的獨立同分布的假設是一個過於強的假設,這種獨立同分布的假設往往為數學的推導提供了便利,卻限制了模型的泛化能力。
4. 基於GMM的i-vector方法及PLDA
特點:統一建模所有空間,進一步減少註冊和識別所需語音時長,使用PLDA分辨說話人特徵,但噪聲對GMM仍然有很大影響。
N.Dehak提出了一個更加寬鬆的假設:既然聲紋資訊與通道資訊不能做到完全獨立,那就用一個超向量子空間對兩種資訊同時建模。即用一個子空間同時描述說話人資訊和通道資訊。這時候,同一個說話人,不管怎麼採集語音,採集了多少段語音,在這個子空間上的對映座標都會有差異,這也更符合實際的情況。這個既模擬說話人差異性又模擬通道差異性的空間稱為全因子空間(Total Factor Matrix),每段語音在這個空間上的對映座標稱作身份向量(IdentityVector, i-vector),i-vector向量通常維度也不會太高,一般在400-600左右。
i-vector方法採用一個空間來代替這兩個空間,這個新的空間可以成為全域性差異空間,它既包含了說話人之間的差異又包含了通道間的差異。所以i-vector的建模過程在GMM均值超向量中不嚴格區分說話人的影響和通道的影響。這一建模方法動機來源於Dehak的又一研究:JFA建模後的通道因子不僅包含了通道效應也夾雜著說話人的資訊。
i-vector中Total Variability的做法(M = m + Tw),將JFA複雜的訓練過程以及對語料的複雜要求,瞬間降到了極致,尤其是將Length-Variable Speech對映到了一個fixed- andlow-dimension的vector(IdentityVector,即i-vector)上。於是,所有機器學習的演算法都可以用來解決聲紋識別的問題了。
現在,主要用的特徵是i-vector。這是透過高斯超向量基於因子分析而得到的。是基於單一空間的跨通道演算法,該空間既包含了說話人空間的資訊也包含了通道空間資訊,相當於用因子分析方法將語音從高位空間投影到低維。
可以把i-vector看作是一種特徵,也可以看作是簡單的模型。最後,在測試階段,我們只要計算測試語音i-vector和模型的i-vector之間的consine距離,就可以作為最後的得分。這種方法也通常被作為基於i-vector說話人識別系統的基線系統。
i-vector簡潔的背後是它捨棄了太多的東西,其中就包括了文字差異性,在文字無關識別中,由於註冊和訓練的語音在內容上的差異性比較大,因此我們需要抑制這種差異性。但在文字相關識別中,我們又需要放大訓練和識別語音在內容上的相似性,這時候牽一髮而動全身的i-vector就顯得不是那麼合適了。雖然i-vector在文字無關聲紋識別上表現非常好,但在看似更簡單的文字相關聲紋識別任務上,i-vector表現得卻並不比傳統的GMM-UBM框架更好。
i-vector的出現使得說話人識別的研究一下子簡化抽象為了一個數值分析與資料分析的問題:任意的一段音訊,不管長度怎樣,內容如何,最後都會被對映為一段低維度的定長i-vector。只需要找到一些最佳化手段與測量方法,在海量資料中能夠將同一個說話人的幾段i-vector儘可能分類得近一些,將不同說話人的i-vector儘可能分得遠一些。並且Dehak在實驗中還發現i-vector具有良好的空間方向區分性,即便上SVM做區分,也只需要選擇一個簡單的餘弦核就能實現非常好的區分性。
i-vector在大多數情況下仍然是文字無關聲紋識別中表現效能最好的建模框架,學者們後續的改進都是基於對i-vector進行最佳化,包括線性區分分析(Linear DiscriminantAnalysis,LDA),基於機率的線性預測區分分析(Probabilisticlinear Discriminant Analysis,PLDA)甚至是度量學習(Metric Learning)等。
機率線性判別分析(PLDA)是一種通道補償演算法,被用於對i-vector進行建模、分類,實驗證明其效果最好。因為i-vector中,既包含說話人的資訊,也包含通道資訊,而我們只關心說話人資訊,所以才需要做通道補償。我們假設訓練資料語音由 i 個說話人的語音組成,其中每個說話人有 j 段自己不同的語音。那麼,我們定義第 i 個人的第 j 條語音為 Xij 。根據因子分析,我們定義 Xij 的生成模型為:
PLDA模型訓練的目標就是輸入一堆資料Xij,輸出可以最大程度上表示該資料集的引數θ = [μ,F,G,Σ]。由於我們現在不知道隱藏變數 hi 和 Wij ,所以我們還是使用EM演算法來進行求解。在PLDA中,我們計算兩條語音是否由說話人空間中的特徵hi生成,或者由hi生成的似然程度,而不用去管類內空間的差異。下面給出得分公式:
如上公式中,n1和n2分別是兩個語音的i-vector向量,這兩條語音來自同一空間的假設為Hs,來自不同的空間的假設為Hd。其中p(n1, n2 | hs)為兩條語音來自同一空間的似然函式;p(n1 | hd),p(n2 | hd)分別為n1和n2來自不同空間的似然函式。透過計算對數似然比,就能衡量兩條語音的相似程度。比值越高,得分越高,兩條語音屬於同一說話人的可能性越大;比值越低,得分越低,則兩條語音屬於同一說話人的可能性越小。
三、基於深度神經網路的技術框架
隨著深度神經網路技術的迅速發展,聲紋識別技術也逐漸採用了基於深度神經網路的技術框架,目前有DNN-iVector-PLDA和最新的End-2-End。
1. 基於深度神經網路(DNN)的方法(D-Vector)
特點:DNN可以從大量樣本中學習到高度抽象的音素特徵,同時它具有很強的抗噪能力,可以排除噪聲對聲紋識別的干擾。
在論文《Deep Neural Networks for SmallFootprint Text-Dependent Speaker Verification》中,作者對DNN在聲紋識別中的應用做了研究。
圖六 d-vector
DNN經過訓練,可以在幀級別對說話人進行分類。在說話人錄入階段,使用訓練好的的DNN用於提取來自最後隱藏層的語音特徵。這些說話人特徵或平均值,即d-vector,用作說話人特徵模型。在評估階段,為每個話語提取d-vector與錄入的說話人模型相比較,進行驗證。實驗結果表明基於DNN的d-vector與常用的i-vector在一個小的聲音文字相關的聲紋驗證集上相比,具有更良好的效能表現。
深度網路的特徵提取層(隱藏層)輸出幀級別的說話人特徵,將其以合併平均的方式得到句子級別的表示,這種utterance-level的表示即深度說話人向量,簡稱d-vector。計算兩個d-vectors之間的餘弦距離,得到判決打分。類似主流的機率統計模型i-vector,可以透過引入一些正則化方法 (線性判別分析 LDA、機率線性判別分析 PLDA等),以提高 d-vector的說話人區分性。
此外,基於DNN的系統在噪聲環境中更加穩健,並且在低錯誤拒絕上優於i-vector系統。最後,d-vector-SV系統在進行安靜和嘈雜的條件分別以14%和25%的相對錯誤率(EER)優於i-vector系統。
2. 端到端深度神經網路(End-to-End)
特點:由神經網路自動提取高階說話人特徵並進行分類。
隨著端到端技術的不斷髮展,聲紋識別技術也進行了相應的嘗試,百度在論文《an End-to-End Neural Speaker Embedding System》中提出了一種端到端的聲紋識別系統。
圖七 Deep Speaker
Deep Speaker 是一個系統,所以包含的是一個說話人識別的流程。包括:語音前端處理 + 特徵提取網路(模型) + 損失函式訓練(策略) + 預訓練(演算法)。
圖八ResBlock
文中設定一個ResBlock:3*3的卷積核 + Relu啟用 + 3*3的卷積核。
ResBlock 最後啟用函式的輸出:a[L+1] = g ( z[L+1] + a[L] ),殘差的核心就體現在這個 +a[L] 了其中,z[L+1] 為在輸入資料經過塊中的(Cov 、 ReLU 、 Cov)得到的輸出。
圖九 ResCNN
conv64-s:單純的卷積層。
卷積核尺寸為5*5(卷積核實際上是5*5*c,其中c為輸入資料的通道數);個數為64,也就代表著輸出資料的第三維了;步長為2*2,會改變資料維度的前2維,也就是高和寬。
res64:是一個ResBlock(殘差塊),並不是一層網路,實際層數是這個ResBlock中包含的層數,這裡殘差塊中包含2個卷積層:卷積核尺寸3*3;個數64;步長為1*1(也就是上文的 Cov+ReLU+Cov,也就是2層,中間啟用不算)。後面的乘3是指有三個ResBlock。所以說這個res64部分是指經過3個ResBlock,而且每一個ResBlock中包含2個卷積層,其實是6層網路。
Average層,本來資料是三維的,分別代表(時間幀數 * 每幀特徵維度 * 通道數),通道數也就是經過不同方式提取的每幀的特徵(Fbank或MFCC這種)。將時間平均,這樣一段語音就對應一段特徵了,而不是每一幀都對應一段特徵。
Affine層:仿射層,就是將維度2048的特徵變為512維。
ln層(length normalization layer):標準化層,特徵標準化之後,得到的向量來表示說話者語音。
關於dim 維度這一列,開始時輸入語音資料是三維:(時間幀數 * 每幀特徵維度 * 通道數)。本文中,時間幀數根據語音長度可變,每幀特徵維度為64,通道數為3(代表Fbank、一階、二階)。所以輸入維度:時間幀數 * 64 * 3。經過第一層conv64-s後:因為卷積層步長2*2,所以時間幀數 和每幀特徵維度都減半了,特徵維度變為了32,通道數變為了卷積核個數64。32*64=2048,也就是dim的值。所以,這裡的dim維度指的是除去時間維的頻率特徵維度。
訓練的時候,使用Triplet loss作為損失函式。透過隨機梯度下降,使得來自同一個人的向量相似度儘可能大,不是同一個說話者的向量相似度儘可能小。
圖十 Triplet loss
該論文在三個不同的資料集上演示了 Deep Speaker 的有效性,其中既包括依賴於文字的任務,也包含獨立於文字的任務。其中一個數據集 UIDs 包含大約 250,000 個說話人,這是目前所知文獻中最大規模的。實驗表明 Deep Speaker 的表現顯著優於基於 DNN 的 i-vector 方法。
比如,在一個獨立於文字的資料集上,Deep Speaker 在說話人驗證任務上達到了 1.83% 的等錯誤率(EER),並且還在有 100 個隨機取樣的候選者的說話人識別任務上得到了 92.58% 的準確度。相比基於 DNN 的 i-vector 方法,Deep Speaker 的 EER 下降了 50%,準確度提高了 60%。
圖十一 Deep Speaker實驗結果
總結
從聲紋識別技術發展綜述中,我們不難看出,聲紋識別的研究趨勢正在快速朝著深度學習和端到端方向發展,其中最典型的就是基於句子層面的做法。在網路結構設計、資料增強、損失函式設計等方面還有很多的工作去做,還有很大的提升空間,此外,聲紋識別系統在保持高效能的情況下對語音長度的需求在不斷減小。
聲紋識別是百分點科技一直關注和研究的技術領域之一。目前,百分點科技的聲紋識別系統使用大規模資料訓練,準確度可達95%以上,1:N支援萬級以上聲紋庫建設,在國內數字政府、公共安全等多個領域已有實際專案落地。未來,我們將繼續朝著聲紋識別技術的深度學習方向進行重點研究。
參考資料
[1]《A study of computationspeed-UPS of the GMM-UBM speaker recognition system》
[2]《Joint Factor AnalysisVersus Eigenchannels in Speaker Recognition》
[3]《Front-End Factor Analysis forSpeaker Verification》
[4]《Deep Neural Networksfor Small Footprint Text-Dependent Speaker Verification》
[5]《an End-to-End Neural Speaker Embedding System》[6]https://www.cnblogs.com/wuxian11/p/6498699.html
[7]https://blog.csdn.net/weixin_38206214/article/details/81096092
[8]https://blog.csdn.net/KevinBetterQ/article/details/85476575