S(n)=s(n)-a·s(n-1)
其中,權(quán)系數(shù)選取經(jīng)驗值a=0.937 5。短時處理指的是將原始語音信號進行分幀加窗。這樣做的依據(jù)是在很短的一段時間內(nèi),可以假定聲音信號是穩(wěn)定的。
特征提取方面主要采用了在孤立詞語音識別方面有廣泛應(yīng)用的MFCC算法來提取語音信號的特征[4],而最后的距離判定方法采用了DTW算法。之所以采取MFCC算法與DTW算法相結(jié)合來進行相同語音內(nèi)容的說話人識別,是因為語音內(nèi)容相同,則2個語音序列必然開始和結(jié)束于相同的字符,雖然不同人的發(fā)音習(xí)慣導(dǎo)致了語音時間有所差異,但是這種程度上的差異可以通過DTW算法來彌補[5-6]。因此,通過上述過程來進行相同語音內(nèi)容的說話人識別是可行的。具體實施步驟如下:首先對所有的語音樣本進行MFCC特征提取,然后提取測試樣本的MFCC特征,最后使用DTW算法衡量2個MFCC特征序列之間的距離,作為判斷依據(jù)。
本次實驗中,共采用4個實驗組,每組含測試樣本1個和待匹配樣本20個。而在每組的20個待匹配樣本中,有1個來自于和本組測試樣本來源相同的說話人的語音采樣,其余19個均為不同的說話人提供的語音樣本。測試時首先提取本組所有待匹配樣本的MFCC特征,然后用測試樣本的MFCC特征與組內(nèi)所有待匹配樣本的MFCC特征進行DTW算法的距離計算[7],最后根據(jù)距離結(jié)果進行樣本的判定。計算的結(jié)果如表1所示。

表1 相同說話人的識別結(jié)果Tab.1 Result of the speaker recognition of the same speakers
通過4組樣本的距離數(shù)據(jù)對比,選取判斷的閾值為4組的測試樣本與相同來源樣本之間距離平均值的 1.5 倍,即w=41.5 作為判斷閾值。在該閾值的判斷下,相同語音內(nèi)容的說話人識別可以得到較好的判斷結(jié)果。
2 不同語音內(nèi)容的說話人識別
在不同語音內(nèi)容的說話人識別方面,特征提取的部分同上述相同語音內(nèi)容的說話人識別過程。但是對于相同語音內(nèi)容的說話人識別,兩個語音時間序列的主要不同之處體現(xiàn)在人的發(fā)音習(xí)慣上,雖然略有差異,但是這種時間上的差異并不明顯。而在不同語音內(nèi)容的說話人識別方面,由于語音內(nèi)容的不同,因此待區(qū)分的樣本時間長度也不同。由于最終本文采用的是累積距離度量的方式,所以在語音樣本長度大于最低有效長度的情況下,持續(xù)時間越長,兩個樣本之間的距離累積則必然越大。因此,若進行不同語音內(nèi)容的說話人識別,則必須保證無論輸入任何長度大于有效長度的語音內(nèi)容,其輸出的待匹配模板的長度必須是一致的。因此,在依據(jù)不同長度的語音樣本進行距離計算時,應(yīng)首先對樣本的MFCC矩陣進行降維,以保留該矩陣中有效成分最大的幾個維度,再進行聚類以減少其中向量的個數(shù)加快計算的速度。通過上述方式,使得輸入的語音樣本最終都成為維度相同的模板,從而進行模板匹配以完成樣本的分類。此處,降維算法選取主成分分析(principal component analysis, PCA)算法,而聚類算法采用K-means++算法。
根據(jù)前述分析,提取MFCC特征之后需要按照分量的重要性進行加權(quán)[7],然后按照特征值占比規(guī)則進行降維。為了確定降維的程度,首先對所有數(shù)據(jù)按照組別進行降維測試,結(jié)果見圖2。

圖2 不同語音內(nèi)容的降維測試Fig.2 Dimension reduction for distinct speech contents
圖2中所有虛折線代表在處理的過程中,該語音樣本提取MFCC之后的MFCC向量個數(shù),所有實折線表示該語音樣本若要滿足特征值占比原則,至少需要保留的特征值個數(shù)。通過圖2可以發(fā)現(xiàn),要滿足特征值占比原則,特征值個數(shù)至少為5個。因此,在后續(xù)的識別降維過程中,統(tǒng)一取奇異值分解后按大小排序的前5個特征值對應(yīng)的特征向量作為主成分的投影向量對原數(shù)據(jù)進行降維。
之后,對降維后的數(shù)據(jù)進行聚類。由于聲音樣本的MFCC特征向量的個數(shù)均位于200左右,因此選擇聚類中心個數(shù)為50個進行聚類。然后采用DTW算法應(yīng)用于聚類后的聚類中心向量,計算兩個MFCC時間序列之間的距離。測試中,以說話人A作為樣板對象,使用包括A在內(nèi)的4位說話人的聲音樣本依次與A的聲音樣本進行對比。在兩個不同閾值設(shè)定的前提下,計算結(jié)果見表2。

表2 說話人在不同閾值下的識別率Tab.2 Speaker Recognition rates to different thresholds
結(jié)果表明,當(dāng)閾值從 187.325 1 調(diào)節(jié)至 194.085 時,說話人A的識別率從60%上升為80%,而其他幾位說話人的識別率則有一定程度的下降。特別地,D的識別率從50%下降至20%。顯然該方法無法對說話人D進行較好的識別,而對另外2位說話人的識別有一定的效果。
3 結(jié) 論
本文主要針對相同語音內(nèi)容和不同語音內(nèi)容兩個類別的說話人語音識別進行了探究,其中涉及到的所有算法均采用Python語言實現(xiàn),大大的縮短了程序的實現(xiàn)時間,并且便于調(diào)試和維護,同時也具有較強的可移植性。在相同語音內(nèi)容的說話人識別方面,采用MFCC結(jié)合DTW算法完成樣本的分類。在不同語音內(nèi)容說話人識別方面,致力于尋找一種方法,將不同時間長度的語音樣本整合為相同或相近維度的特征模板。在實際探究中發(fā)現(xiàn),先進行降維然后聚類,以保證不同語音樣本特征矩陣維度相近或相同,然后再進行匹配,是一個值得繼續(xù)研究的方向。
在相同語音內(nèi)容的說話人識別方面,MFCC特征結(jié)合DTW算法得到了較好的識別效果。而在不同語音內(nèi)容的說話人識別方面,先進行PCA降維和K-means++聚類,然后進行DTW算法識別,卻未有非常出色的表現(xiàn),總結(jié)原因可能有以下兩點:
(1) K-means++算法中依靠距離聚類的算法不能處理非球形簇的情況[8],而MFCC向量本身的分布有可能不是球形簇。
(2) PCA算法雖然可以使用低維數(shù)據(jù)代替高維數(shù)據(jù),但是畢竟是一種無監(jiān)督學(xué)習(xí)算法,且貢獻(xiàn)率小的主成分也可能含有樣本差異的重要信息。
針對上述兩點,提出日后研究的改進方案如下:
(1) 更換其他聚類算法,例如,采用基于密度的DBSCAN聚類算法[7]。
(2) 采用未降維的原始數(shù)據(jù)進行計算或采用其他降維算法如:監(jiān)督型線性降維算法(linear discriminant analysis, LDA)或者采用非線性降維算法(locally linear embedding, LLE)。