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

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

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

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