陳秉沃 張二華 唐振民
(南京理工大學計算機科學與工程學院 南京 210094)
傳統說話人識別技術是通過采集說話人語音數據,然后從語音數據中提取特征參數,并代入到訓練好的高斯混合模型中進行逐一打分,得分最高的即是所匹配的說話人。隨著說話人識別技術的廣泛應用,說話人模型數量不斷增長,若依然采用傳統的說話人識別方法,就會造成兩個問題。其一是說話人識別的耗時過長,效率低下;其二是說話人識別的準確性大大降低。為了解決這兩個問題,本文對不同距離定義的聚類效果進行對比,選取一種最佳的聚類方法,將其應用于說話人識別中。使得識別效率大大提高,識別準確率也有所提高。
傳統的說話人識別技術分為兩個部分。第一部分是利用所有說話人的訓練語音建立各人的高斯混合模型,作為后端模型數據庫。第二部分是前端處理,采集說話人的語音,進而提取特征參數,再將數據逐一代入后端說話人模型中,取得最高分模型,如果此模型對應的說話人與前端所采集的說話人為同一人,則表明識別準確。
大規模條件下的說話人識別,采用傳統的逐一匹配方式會使單人識別耗時隨后端說話人數量成正比增長,即當說話人規模擴大時,單人識別耗時也會隨之大幅提升,這嚴重影響系統的實用性。另外,隨著說話人規模的不斷擴大,說話人識別準確率也隨之降低。
本文的傳統說話人識別中,使用N 階高斯混合模型,其中N 為32,訓練語音為10s,測試語音為10s。在不同規模下的說話人識別的平均單人識別耗時,以及識別的準確率,如表1所示。

表1 不同說話人規模的識別耗時以及總體識別準確率
由表1 可見,當說話人規模(Speaker Count,SPKC)為數百人的時候,單人識別時長僅需數秒,總體識別耗時為數百秒,說話人識別的準確率也尚可。但是當說話人規模達到近千級別時,單人識別耗時已經達到了十幾秒,總體識別耗時達到上萬秒,識別準確率也明顯降低,這嚴重影響了說話人識別系統的實用性。一個好的說話人識別系統,不僅要考慮高效性,而且需要考慮準確性。在大規模說話人的背景下,顯然使用傳統的說話人識別系統無法滿足系統的實用性要求。因此本文考慮采用模型聚類的方法,對傳統識別方法進行改進。
簡單來說,聚類思想就是把一些相似的對象歸為到同一簇中。簇內的對象越相似,并且不同簇之間的距離越遠,那么聚類的效果就越好。在說話人識別中也是如此,將聚類思想應用于說話人識別就是進行兩步判別,第一步,先判別待識別的說話人對象最接近哪一類的類中心,其中,類中心指的是某一類的代表。第二步,對類中所包含的說話人模型再使用傳統方法進行逐一判別。由此可見,聚類的效果以及聚類的數目直接影響到說話人識別系統的總體性能。
由于聚類算法的局限,聚類結果中每一類的規模可能大小不一,因此,在識別中的第二步所對應的最近一類的說話人規模大小也呈現不確定性。因此,引入搜索率的概念。搜索率,指的就是此次識別搜索的說話人規模Q1與總體說話人規模Q 的比例,那么搜索率Z如式(1)所示。
每次搜索,都由距離由近及遠進行搜索,先從距離模型最近的類開始搜索,直到搜索的說話人規模占比達到預先給定的搜索率。從林文勇[3]的論文可知,在說話人模型匹配中,有十分之一的模型得分比較高,說明每次匹配具有十分之一的模型比較相似,因此,本文設置搜索率為10%。在基于聚類的說話人識別中,聚類效果的好壞使用命中率來衡量。一次命中指的是,在一次搜索中,所搜索的說話人模型中,正好包含著與測試說話人相對應的說話人模型。命中率(Accuracy Rate,AR)則是說話人測試集合中,命中個數的占比。命中率越高,說明聚類的效果就越好。命中率公式如式(2)所示。
其中,AR為命中率,AC為說話人測試集中命中的個數(Accuracy Count,AC),SPKC 為說話人規模(Speaker Count,SPKC)的縮寫。
基于模型聚類的說話人識別的第二步識別步驟和傳統說話人識別方式一樣,都是進行傳統的逐一匹配,但經過聚類后所需匹配的說話人模型規模大為減少。由此可見,第一步聚類效果的好壞直接影響到最后識別的效果。在聚類過程中,常用并且高效的算法為k-means 算法,可以適用于大規模條件下的說話人識別系統。因此,本文采用k-means算法作為說話人模型聚類的算法,總體流程如下:
1)初始化類,確定聚類數目,并隨機選取k 類作為初始類。
2)求剩余的說話人與每一類的類中心的距離,并并入最近的一類。
3)更新每一類的類中心Ci,并令D 等于目前的說話人數量。
4)而后隨機抽取任意一類的任意樣本,即某一說話人模型,求得模型離本類中心的距離以及和其他類的類中心的距離。如果離本類的類中心距離是最近的,則讓D 自減1,當自減至0 時退出循環。如果不是則將此說話人歸入最近的一類中,然后跳到3)重新循環3)~4)步驟。
2.3.1 基于KL散度的聚類方法
相對熵又稱為交叉熵,Kullback-Leible 散度(即KL 散度)等。設p(x)和q(x)是兩個概率分布,則p對q的K-L散度如式(3)所示。
KL 散度是兩個概率分布P 和Q 差別的非對稱性的度量,在一定程度上可以來衡量兩個分布之間的距離。但是,盡管KL 散度從直觀上是個度量或距離函數,但它實際上并不是一個真正的距離尺度,因為它并不具備對稱性,如式(4)所示。
因此在聚類中,將KL 散度運用到高斯混合模型的KL距離時,可以采用加權公式來計算,如此兩個模型之間的距離便變為固定值,如式(5)所示。
目前已經有兩個多元高斯混合模型的KL散度數學解析形式。如式(6)所示。
其中,Sm和um分別是第m個說話人的一階高斯混合模型的協方差和均值向量。但是,說話人識別所用的是N 階高斯混合模型S={ai,μi,Σi},如式(7)所示。

表2 基于KL散度的模型聚類方法
由表2 可以看出,命中率并不理想,原因是KL散度并不具備對稱性,即使采用了加權的算法,也依然不是一個很好的距離定義。并且隨著聚類數目增多,命中率逐漸降低。原因是使用一個并不精準的距離定義進行聚類,隨著聚類數目越多,聚類效果就越差,因此命中率會隨著聚類數目的增多而下降。因此KL散度并不適用于作為模型聚類的距離定義。
2.3.2 基于替代模型Wasserstein distance 的聚類方法
因為KL散度不具備對稱性,所以KL散度并不適用于計算兩個分布之間的距離。通常,可以使用具有對稱性的Wasserstein 距離來計算兩個分布之間的代價距離。Wasserstein 距離也叫做推土機距離(Earth Mover's distance),這是因為該距離定義中由一個分布轉變為另一個分布所需要的代價和挖土填土的過程十分相似。目前已經有兩個一階多元高斯混合模型之間的Wasserstein 距離的數學解析形式[16],如式(8)所示。
其中Sm和um分別是第m 個說話人的一階高斯混合模型的協方差和均值向量,F是Frobenius范式。
得到第m 個說話人模型S={ai,ui,Σi}的替代模型后,就可以直接使用Wasserstein distance 在多元高斯混合模型的解析公式進行計算,解析公式見式(8)。并且在聚類過程中,某一個類的類中心同樣采用加權的算法,假設第k 類的說話人個數為Lk,那么第k 類的類中心Ck={uk,Sk}的加權平均向量uk和加權協方差Sk計算公式則如式(11)以及式(12)所示。
得到第k 類的類中心的參數后,用該參數對應的一階多元高模型來作為該類的類中心模型,可以得到說話人替代模型與第k 類的類中心的替代模型Ck={uk,Sk}之間的距離d2(,Ck),如式(13)所示。
采用423 人份1min 訓練時長的電話語音對N階高斯混合模型進行訓練,測試時長也為1min,搜索率設置為10%,基于近似模型Wasserstein distance的聚類方法的命中率如表3所示。

表3 基于替代模型Wasserstein distance的聚類方法的命中率(%)
從表3 得知,在不同的聚類數目下,命中率都相當高且沒有太大的變化,說明基于替代模型Wasserstein distance 的聚類方法的聚類效果比較好。
本文將兩種方案進行對比,方案一為基于KL散度的聚類方法,方案二為基于替代模型Wasserstein distance 的聚類方法。兩種方案都采用423人,信道為固定電話信道,并且設置搜索率為10%,使用的訓練語音以及測試語音所用的時長都為1min。所得的兩種聚類方案的命中率對比如表4所示。

表4 兩種方案的聚類命中率對比(%)
從表4 可得,相對于第一種方案,第二種方案聚類效果較佳,并且計算量較小,因此本文選擇第二種方案作為說話人聚類所使用的距離定義。
實驗在Window10系統下,基于VS2020中MFC框架完成。主機配置為CPU 為Intel(R)Core(TM)i7-9750H CPU @ 2.60GHz,RAM 為32GB。采用的是945 人電話信道下的說話人語音。采用N 階多元高斯混合模型,其中N 為32。并且訓練時長為10s,測試語音也為10s。為了對比傳統說話人識別和基于模型聚類的說話人識別的差異,首先要得出傳統說話人識別系統下的識別準確率和識別耗時,如表5所示。

表5 傳統GMM模型說話人識別系統的識別準確率和識別耗時
聚類后,可以得到在不同搜索率下的說話人識別準確率如表6所示。

表6 不同搜索率下的說話人識別準確率(%)
如表6 所示,在聚類數目一定的時候,從低往高設定遞增的搜索率,基于近似模型Wasserstein distance聚類算法的說話人識別的識別準確率總能在搜索率為10%左右時達到峰值,并在達到峰值后再提升搜索率,識別準確率反而下降。這是因為,設定搜索率為峰值所對應的搜索率時,被搜索的說話人模型中正巧包含與測試說話人相對應的說話人模型。在此基礎上繼續擴大搜索范圍,就多增加了不相匹配的干擾項,因此說話人識別的準確率反而降低。本文通過設置不同的聚類數目以及搜索率,可以得出當聚類數目為100 的時候,最佳識別準確率為89.81%。顯然,對比傳統的說話人識別,在相同的說話人規模、訓練語音以及測試語音情況下,基于聚類方法的識別準確率有著較高的提升,即從85.08%提升至89.81%。
另一方面,由于搜索率為10%左右時,識別準確率達到峰值,因此,我們可以獲取在同樣實驗情況下,基于聚類算法的說話人識別耗時以及模型訓練的耗時,如表7 所示。并且可以得到傳統GMM識別與聚類識別的耗時對比如表8所示。

表7 建模耗時以及識別耗時(s)

表8 傳統GMM識別與聚類識別的耗時對比
如表7 及表8 所示,說話人建模與說話人匹配分別需要耗時1845s 與1465s,即聚類后的識別過程一共需要耗時3310s,比起傳統說話人識別所需的12984s,識別效率有著顯著的提升。
本文針對傳統說話人識別在大規模說話人規模下的識別準確率下降,以及識別耗時過長的情況,提出了一種基于模型聚類的說話人識別方法,對傳統的說話人識別方法進行改進。相比于傳統說話人識別方法,該方法的識別準確率提升了近4.7%,并且識別耗時僅為傳統識別方法的25.5%,大大提升了說話人識別系統的實用性。