聽(tīng)聽(tīng)百度工程師聊聊聲紋識(shí)別的原理
百度大腦最近參加了綜藝節(jié)目《最強(qiáng)大腦》,就是那個(gè)請(qǐng)一堆人類(lèi)記憶大師和神童上去挑戰(zhàn)的節(jié)目。
此前第一期節(jié)目里面,搭載了百度大腦的小度以3:2在人臉識(shí)別的比賽中贏了人類(lèi)選手王峰。第二期的節(jié)目比的則是聲紋識(shí)別,大概就是從一堆人中找出說(shuō)某句話的人是誰(shuí),不過(guò),做為“最強(qiáng)道具組”的《最強(qiáng)大腦》,為了節(jié)目效果,當(dāng)然不會(huì)讓項(xiàng)目那么簡(jiǎn)單。
節(jié)目中的名人堂選手申一帆甚至表示,這個(gè)題目太變態(tài)了。確實(shí),對(duì)于普通人來(lái)說(shuō),這樣的題目基本靠瞎蒙……
具體來(lái)說(shuō),節(jié)目組請(qǐng)來(lái)了一組專(zhuān)業(yè)的高校合唱團(tuán)(21人),嘉賓周杰倫從中選出了聲線相近的三個(gè)人,分別對(duì)周杰倫說(shuō)一句話,節(jié)目從中截取三秒不連續(xù)的只言片語(yǔ)。兩位選手聽(tīng)過(guò)三個(gè)人的說(shuō)話片段之后,現(xiàn)場(chǎng)聽(tīng)合唱團(tuán)合唱一曲,然后從中選出嘉賓選的三個(gè)人分別是誰(shuí)。
這次百度大腦的對(duì)手是聽(tīng)音神童孫亦廷。結(jié)果,兩位選手都分別只對(duì)了一題,因此打平,其中第一道題中兩位選手都錯(cuò)了,而且寫(xiě)錯(cuò)的答案一樣。
跟上次一樣,我們來(lái)關(guān)注一下,機(jī)器是怎么辨認(rèn)出說(shuō)這句話的人是誰(shuí)的呢?我們來(lái)聽(tīng)百度工程師們講解一下。
聲紋識(shí)別要回答什么問(wèn)題
本次比賽對(duì)機(jī)器來(lái)說(shuō)是聲紋識(shí)別。聲紋識(shí)別和語(yǔ)音識(shí)別的不同之處在于,它的目的不是識(shí)別語(yǔ)音的內(nèi)容,而是識(shí)別說(shuō)話人的身份。
聲紋識(shí)別
據(jù)百度方面介紹,聲紋的理論基礎(chǔ)是“每個(gè)人的說(shuō)話特性都具有其獨(dú)特的特征”,而決定這種獨(dú)特特征的主要因素有:
1) 聲腔的差異,其包括咽喉、鼻腔、口腔以及胸腔等,這些器官的形狀、尺寸和位置決定了聲腔的差異,不同的人說(shuō)話,其聲音的頻率分布是不同的。
2) 發(fā)聲的操作方式,主要是指唇、口齒、舌頭等部位在發(fā)聲時(shí)的相互作用。
一般而言,人正常說(shuō)話時(shí)的聲紋狀態(tài)還是相對(duì)穩(wěn)定的。但兩個(gè)因素非常容易受身體狀況、年齡、情緒等情況的干擾,從而導(dǎo)致聲紋特性的變化。比如如果一個(gè)人感冒了,因?yàn)楸乔欢氯矊?dǎo)致聲紋特性不一致。總而言之,聲紋特征是類(lèi)似于虹膜、指紋等一種具有獨(dú)特性的生物特征。
跟上次介紹過(guò)的人臉識(shí)別類(lèi)似,聲紋識(shí)別的任務(wù)主要分成兩類(lèi):聲紋確認(rèn)技術(shù)(1:1)和聲紋識(shí)別技術(shù)(1:N)兩類(lèi)。前者回答的是兩句話到底是不是一個(gè)人說(shuō)的,比如微信登陸中使用的聲紋識(shí)別技術(shù),回答的就是類(lèi)似的問(wèn)題;而后者回答的則是”給定的一句話屬于樣本庫(kù)中誰(shuí)說(shuō)的”問(wèn)題。這次節(jié)目中要回答的就是第二類(lèi)問(wèn)題,從21個(gè)個(gè)合唱團(tuán)成員中找出嘉賓指定的三個(gè)人。
不過(guò),百度方面也指出,這次節(jié)目中聲紋識(shí)別的比賽比一般的聲紋識(shí)別要難。
一是因?yàn)榻o定的樣本(注冊(cè)語(yǔ)音)是屬于唱歌的聲音,但要識(shí)別的(測(cè)試語(yǔ)音)則是正常說(shuō)話的聲音,兩種情況下同一個(gè)人的發(fā)生方式可能是不同的。二是因?yàn)楹铣蟪蓡T的聲音不能過(guò)于突出,這使得注冊(cè)語(yǔ)音趨同。三是測(cè)試聲音是斷續(xù)的。四是因?yàn)闇y(cè)試聲音時(shí)長(zhǎng)過(guò)短,不超過(guò)10個(gè)字,有效時(shí)間不大于3秒。“我們需要更為魯棒(Robust)地來(lái)提取出短時(shí)的、斷斷續(xù)續(xù)的線人說(shuō)話聲音所能夠表征的線人特性。”
聲紋識(shí)別的過(guò)程
百度方面介紹,一個(gè)基本的聲紋識(shí)別過(guò)程主要包括聲紋注冊(cè)和聲紋測(cè)試階段:
在聲紋注冊(cè)階段,每個(gè)可能的用戶都會(huì)錄制足夠的語(yǔ)音然后進(jìn)行說(shuō)話人特征的提取,從而形成聲紋模型庫(kù)。這個(gè)模型庫(kù)就像字典,所有可能的字都會(huì)在該字典中被收錄。節(jié)目中的大合唱階段就是聲紋注冊(cè)階段。
在聲紋測(cè)試階段,測(cè)試者也會(huì)錄制一定的語(yǔ)音,然后進(jìn)行說(shuō)話人特征提取,提取完成后,就會(huì)與聲紋模型庫(kù)中的所有注冊(cè)者進(jìn)行相似度計(jì)算。相似度最高的注冊(cè)者即為機(jī)器認(rèn)為的測(cè)試者身份。節(jié)目中斷斷續(xù)續(xù)的語(yǔ)音,即可以看成是線人的測(cè)試語(yǔ)音。
聲紋識(shí)別的一般步驟
那百度大腦如何提取聲紋特征,其中又用了什么算法?聽(tīng)百度工程師聊聊具體過(guò)程。以下為百度工程師撰寫(xiě)的內(nèi)容,將采用工程師第一人稱(chēng)(想要看簡(jiǎn)單版的同學(xué)可以直接跳到最后):
1) 聲學(xué)特征提取
語(yǔ)音信號(hào)可以認(rèn)為是一種短時(shí)平穩(wěn)信號(hào)和長(zhǎng)時(shí)非平穩(wěn)信號(hào),其長(zhǎng)時(shí)的非平穩(wěn)特性是由于發(fā)音器官的物理運(yùn)動(dòng)過(guò)程變化而產(chǎn)生的。從發(fā)音機(jī)理上來(lái)說(shuō),人在發(fā)出不同種類(lèi)的聲音時(shí),聲道的情況是不一樣的,各種器官的相互作用,會(huì)形成不同的聲道模型,而這種相互作用的變化所形成的不同發(fā)聲差異是非線性的。但是,發(fā)聲器官的運(yùn)動(dòng)又存在一定的慣性,所以在短時(shí)間內(nèi),我們認(rèn)為語(yǔ)音信號(hào)還是可以當(dāng)成平穩(wěn)信號(hào)來(lái)處理,這個(gè)短時(shí)一般范圍在10到30毫秒之間。
這個(gè)意思就是說(shuō)語(yǔ)音信號(hào)的相關(guān)特征參數(shù)的分布規(guī)律在短時(shí)間(10-30ms)內(nèi)可以認(rèn)為是一致的,而在長(zhǎng)時(shí)間來(lái)看則是有明顯變化的。在數(shù)字信號(hào)處理時(shí),一般而言我們都期望對(duì)平穩(wěn)信號(hào)進(jìn)行時(shí)頻分析,從而提取特征。因此,在對(duì)語(yǔ)音信號(hào)進(jìn)行特征提取的時(shí)候,我們會(huì)有一個(gè)20ms左右的時(shí)間窗,在這個(gè)時(shí)間窗內(nèi)我們認(rèn)為語(yǔ)音信號(hào)是平穩(wěn)的。然后以這個(gè)窗為單位在語(yǔ)音信號(hào)上進(jìn)行滑動(dòng),每一個(gè)時(shí)間窗都可以提取出一個(gè)能夠表征這個(gè)時(shí)間窗內(nèi)信號(hào)的特征,從而就得到了語(yǔ)音信號(hào)的特征序列。這個(gè)過(guò)程,我們稱(chēng)之為聲學(xué)特征提取。這個(gè)特征能夠表征出在這個(gè)時(shí)間窗內(nèi)的語(yǔ)音信號(hào)相關(guān)信息。如下圖所示:
這樣,我們就能夠?qū)⒁欢握Z(yǔ)音轉(zhuǎn)化得到一個(gè)以幀為單位的特征序列。由于人在說(shuō)話時(shí)的隨機(jī)性,不可能得到兩段完全一模一樣的語(yǔ)音,即便是同一個(gè)人連續(xù)說(shuō)同樣的內(nèi)容時(shí),其語(yǔ)音時(shí)長(zhǎng)和特性都不能完全一致。因此,一般而言每段語(yǔ)音得到的特征序列長(zhǎng)度是不一樣的。
在時(shí)間窗里采取的不同的信號(hào)處理方式,就會(huì)得到不同的特征,目前常用的特征有濾波器組fbank,梅爾頻率倒譜系數(shù)MFCC以及感知線性預(yù)測(cè)系數(shù)PLP特征等。然而這些特征所含有的信息較為冗余,我們還需要進(jìn)一步的方法將這些特征中所含有的說(shuō)話人信息進(jìn)行提純。
2) 說(shuō)話人特征提取
我們?cè)谔崛≌f(shuō)話人特征的過(guò)程中采用了經(jīng)典的DNN-ivector系統(tǒng)以及基于端到端深度神經(jīng)網(wǎng)絡(luò)的說(shuō)話人特征(Dvector)提取系統(tǒng)。兩套系統(tǒng)從不同的角度實(shí)現(xiàn)了對(duì)說(shuō)話人特征的抓取。
A. 算法1 DNN-ivector
這是目前被廣泛采用的聲紋識(shí)別系統(tǒng)。其主要特點(diǎn)就是將之前提取的聲學(xué)特征通過(guò)按照一定的發(fā)聲單元對(duì)齊后投影到一個(gè)較低的線性空間中,然后進(jìn)行說(shuō)話人信息的挖掘。直觀上來(lái)說(shuō),可以理解成是在挖掘“不同的人在發(fā)同一個(gè)音時(shí)的區(qū)別是什么”。
首先我們會(huì)用大量的數(shù)據(jù)訓(xùn)練一個(gè)能夠?qū)⒙晫W(xué)特征很好的對(duì)應(yīng)到某一發(fā)聲單元的神經(jīng)網(wǎng)絡(luò),如下圖所示:
這樣,每一幀特征通過(guò)神經(jīng)網(wǎng)絡(luò)后,就會(huì)被分配到某一發(fā)聲單元上去。然后,我們會(huì)對(duì)每一句話在所有的發(fā)聲單元進(jìn)行逐個(gè)統(tǒng)計(jì),按照每個(gè)發(fā)聲單元沒(méi)單位統(tǒng)計(jì)得到相應(yīng)的信息。這樣,對(duì)于每一句話我們就會(huì)得到一個(gè)高維的特征矢量。
在得到高維的特征矢量后,我們就會(huì)采用一種稱(chēng)之為total variability的建模方法對(duì)高維特征進(jìn)行建模:
M=m+Tw
其中m是所有訓(xùn)練數(shù)據(jù)得到的均值超矢量,M則是每一句話的超矢量,T是奇通過(guò)大量數(shù)據(jù)訓(xùn)練得到的載荷空間矩陣,w則是降維后得到的ivector特征矢量,根據(jù)任務(wù)情況而言,一般取幾百維。最后,對(duì)這個(gè)ivector采用概率線性判別分析PLDA建模,從而挖掘出說(shuō)話人的信息。
在實(shí)際中,我們依托百度領(lǐng)先的語(yǔ)音識(shí)別技術(shù)訓(xùn)練了一個(gè)高精度的深度神經(jīng)網(wǎng)絡(luò)來(lái)進(jìn)行發(fā)聲單元的對(duì)齊,然后依托海量數(shù)據(jù)訓(xùn)練得到了載荷矩陣空間T,最后創(chuàng)造性地采用了自適應(yīng)方法來(lái)進(jìn)行調(diào)整T空間和PLDA空間,大大增強(qiáng)了模型在唱歌和說(shuō)話跨方式以及短時(shí)上的聲紋識(shí)別魯棒性。
B. 算法2 基于端到端深度學(xué)習(xí)的說(shuō)話人信息提取
如果說(shuō)上一套方法還借鑒了一些語(yǔ)音學(xué)的知識(shí)(采用了語(yǔ)音識(shí)別中的發(fā)聲單元分類(lèi)網(wǎng)絡(luò)),那么基于端到端深度學(xué)習(xí)的說(shuō)話人信息提取則是一個(gè)純粹的數(shù)據(jù)驅(qū)動(dòng)的方式。通過(guò)百度的海量數(shù)據(jù)樣本以及非常深的卷積神經(jīng)網(wǎng)絡(luò)來(lái)讓機(jī)器自動(dòng)的去發(fā)掘聲學(xué)特征中的說(shuō)話人信息差異,從而提取出聲學(xué)特征中的說(shuō)話人信息表示。
我們首先通過(guò)海量的聲紋數(shù)據(jù)訓(xùn)練一個(gè)深度卷積神經(jīng)網(wǎng)絡(luò),其輸出的類(lèi)別就是說(shuō)話人的ID,實(shí)際訓(xùn)練中我們使用了數(shù)萬(wàn)個(gè)ID來(lái)進(jìn)行網(wǎng)絡(luò)的訓(xùn)練。從而得到了能夠有效表征說(shuō)話人特性底座網(wǎng)絡(luò)。在根據(jù)特定場(chǎng)景的任務(wù)進(jìn)行自適應(yīng)調(diào)優(yōu)。具體過(guò)程如下圖所示:
在完成網(wǎng)絡(luò)的訓(xùn)練后,我們就得到了一個(gè)能夠提取說(shuō)話人差異信息的網(wǎng)絡(luò),對(duì)每一句話我們通過(guò)該網(wǎng)絡(luò)就得到了說(shuō)話人的特征。
兩套系統(tǒng)我們最后在得分域上進(jìn)行了加權(quán)融合,從而給出最后的判決結(jié)果。
以上是百度工程師對(duì)百度聲紋識(shí)別過(guò)程的分享,在百度首席科學(xué)家吳恩達(dá)和深度學(xué)習(xí)研究院主任林元慶接受媒體采訪時(shí),也表示百度的聲紋識(shí)別其實(shí)訓(xùn)練了兩個(gè)模型,最后通過(guò)兩個(gè)模型分?jǐn)?shù)相加得出最后的結(jié)果。吳恩達(dá)用非常通俗解釋了兩個(gè)模型:
第一種算法則是從一段語(yǔ)音中提取大概五千個(gè)特征,這些特征就包括兩種情況。一種情況就是你在說(shuō)什么?第二種情況是你的聲音是什么樣的?你的特征是什么?在這五千個(gè)特征里面,其中90%是說(shuō)話的內(nèi)容,10%是聲音的特征,百度從中提取400個(gè)特征。輸入兩端人聲對(duì)比的時(shí)候就比對(duì)這400個(gè)特征。
另一種是端對(duì)端的系統(tǒng),通過(guò)深度學(xué)習(xí)讓機(jī)器自動(dòng)挖掘聲學(xué)特征中說(shuō)話人的信息差異,用了2萬(wàn)個(gè)人、共5千個(gè)小時(shí)左右的數(shù)據(jù)去訓(xùn)練。該端對(duì)端網(wǎng)絡(luò)會(huì)分析每段語(yǔ)音中的1020個(gè)特征,分析不同語(yǔ)音下同一特征像不像。這個(gè)端對(duì)端的網(wǎng)絡(luò)的目標(biāo)是輸入兩段聲音,判斷是不是同一個(gè)人說(shuō)的話。
兩位科學(xué)家也說(shuō)出了一個(gè)比賽現(xiàn)場(chǎng)很有意思的事。比賽中,兩個(gè)模型其實(shí)各自做對(duì)了兩道題,但分?jǐn)?shù)加起來(lái)之后,最后反而只對(duì)了一道題。他們解釋?zhuān)@就像兩個(gè)模型投票一樣,“其實(shí)這兩個(gè)模型,你哪一個(gè)模型是比較自信的,比較有信心的你就會(huì)選擇(它)”。
吳恩達(dá)表示,這個(gè)細(xì)節(jié)也會(huì)讓團(tuán)隊(duì)發(fā)現(xiàn)進(jìn)步的可能。團(tuán)隊(duì)未來(lái)除了用更多的數(shù)據(jù)訓(xùn)練模型,很有可能選擇多個(gè)模型投票的辦法。