本發(fā)明涉及一種基于DBSCAN算法的聲紋識別方法,通過計(jì)算機(jī)對說話人進(jìn)行識別,屬于語音識別技術(shù)領(lǐng)域。
背景技術(shù):
隨著網(wǎng)絡(luò)和通信的發(fā)展以及智能手機(jī)的普及,電子商務(wù)及移動支付迅速興起。由于網(wǎng)絡(luò)的不安全性因素,信息安全成了當(dāng)今社會關(guān)注的焦點(diǎn)問題,身份認(rèn)證作為信息安全的一種重要手段也越來越受到人們的重視。
目前使用最廣泛的身份認(rèn)證方式屬于密碼驗(yàn)證存取行為,此類認(rèn)證方式存在著密碼遺忘、易被破解等諸多問題,一旦被非法用戶獲取,將會對個人或單位造成巨大損失。因此人們試圖尋找一種更為安全可靠的身份認(rèn)證方式,而人體所固有的生物特征為此提供了更為便捷的途徑。
人體有許多固有特征,比如指紋、虹膜等,這些生物識別技術(shù)已經(jīng)得到了一定程度的開發(fā)和利用。聲紋同樣也是我們?nèi)祟惷總€人都獨(dú)有的特征,每個人的聲音特點(diǎn)都是獨(dú)一無二的,與指紋一樣,聲紋是說話人獨(dú)一無二的語音特征,即使說出同一句話,在能量、頻譜、語調(diào)等等方面都是不一樣的。但是,在聲紋識別領(lǐng)域目前的利用程度較低,聲紋識別必將是生物識別領(lǐng)域的下一片藍(lán)海。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是:提供一種基于DBSCAN算法的聲紋識別方法,該方法不需要很龐大的訓(xùn)練集,只需要經(jīng)過篩選的訓(xùn)練語音作為訓(xùn)練集即可,識別準(zhǔn)確率較高。
本發(fā)明為解決上述技術(shù)問題采用以下技術(shù)方案:
一種基于DBSCAN算法的聲紋識別方法,包括如下步驟:
步驟1,獲取檢驗(yàn)語音和某說話人的訓(xùn)練集語音,訓(xùn)練集語音包含預(yù)設(shè)的偶數(shù)個訓(xùn)練語音,利用mel倒譜系數(shù)分別對訓(xùn)練集語音和檢驗(yàn)語音進(jìn)行語音特征提取,得到各自對應(yīng)的語音特征向量;
步驟2,對步驟1得到的訓(xùn)練集語音的語音特征向量,利用基于余弦相似度的分組篩選方法進(jìn)行篩選,當(dāng)經(jīng)過篩選后得到的語音特征向量的個數(shù)少于步驟1的預(yù)設(shè)值時(shí),繼續(xù)獲取訓(xùn)練語音,并進(jìn)行語音特征提取和篩選,直至最后得到的語音特征向量的個數(shù)滿足步驟1的預(yù)設(shè)值;
步驟3,利用改進(jìn)的DBSCAN算法對檢驗(yàn)語音進(jìn)行識別,在改進(jìn)的DBSCAN算法中,利用距離參數(shù)計(jì)算檢驗(yàn)語音與訓(xùn)練語音是否相似的閾值時(shí),定義距離參數(shù)為利用區(qū)間估計(jì)計(jì)算該閾值時(shí)的置信區(qū)間的大小。
作為本發(fā)明的一種優(yōu)選方案,所述步驟1的具體過程為:根據(jù)奈奎斯特采樣定律對訓(xùn)練語音進(jìn)行依次采樣并存儲,得到訓(xùn)練集語音;利用mel倒譜系數(shù)分別對訓(xùn)練集語音和檢驗(yàn)語音進(jìn)行語音特征提取,得到各自對應(yīng)的特征系數(shù),將特征系數(shù)矢量化,從而得到各自對應(yīng)的語音特征向量。
作為本發(fā)明的一種優(yōu)選方案,步驟2所述對步驟1得到的訓(xùn)練集語音的語音特征向量,利用基于余弦相似度的分組篩選方法進(jìn)行篩選的具體過程為:將步驟1得到的訓(xùn)練集語音的語音特征向量按順序標(biāo)號,并以標(biāo)號的奇偶分為兩組,計(jì)算每組中各語音特征向量與其他語音特征向量的余弦相似度,并將余弦相似度轉(zhuǎn)化為角度值,判斷每組中各角度值與其他角度值之間的差值,當(dāng)差值小于等于固定閾值時(shí),則將該角度值對應(yīng)的語音特征向量保留;否則,不保留。
作為本發(fā)明的一種優(yōu)選方案,所述步驟3的具體過程為:利用檢驗(yàn)語音的語音特征向量與步驟2得到的各訓(xùn)練語音的語音特征向量,計(jì)算檢驗(yàn)語音與各訓(xùn)練語音的余弦相似度,并將余弦相似度轉(zhuǎn)化為角度值;當(dāng)判斷檢驗(yàn)語音與其中一條訓(xùn)練語音是否相似時(shí),利用距離參數(shù)計(jì)算檢驗(yàn)語音與該訓(xùn)練語音是否相似的閾值,該閾值表示為其中,Y表示閾值,a表示距離參數(shù)對應(yīng)于標(biāo)準(zhǔn)正態(tài)分布的橫坐標(biāo),μ、σ分別表示該訓(xùn)練語音與其他訓(xùn)練語音之間的余弦相似度對應(yīng)的角度值的平均值和標(biāo)準(zhǔn)差,判斷檢驗(yàn)語音與該訓(xùn)練語音的余弦相似度對應(yīng)的角度值是否小于等于該訓(xùn)練語音對應(yīng)的閾值,如果是,則認(rèn)為檢驗(yàn)語音與該訓(xùn)練語音相似,否則不相似;當(dāng)相似的訓(xùn)練語音個數(shù)大于等于設(shè)定閾值時(shí),認(rèn)為檢驗(yàn)語音與訓(xùn)練語音的說話人匹配,否則不匹配。
作為本發(fā)明的一種優(yōu)選方案,所述余弦相似度的計(jì)算公式為:
其中,Ai表示第一個語音特征向量第i維的數(shù)值,Bi表示第二個語音特征向量第i維的數(shù)值,θ表示要計(jì)算的兩條語音之間的余弦相似度對應(yīng)的角度值,m表示各語音特征向量的維度。
本發(fā)明采用以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下技術(shù)效果:
1、本發(fā)明基于DBSCAN算法的聲紋識別方法,不需要很龐大的訓(xùn)練集,只需要一些經(jīng)過篩選的訓(xùn)練語音作為訓(xùn)練集即可,并且利用這些訓(xùn)練語音的分布特性對檢驗(yàn)語音進(jìn)行判別。
2、本發(fā)明基于DBSCAN算法的聲紋識別方法,在實(shí)際使用過程中,靈活方便,使用快捷,具有十分良好的用戶體驗(yàn)和較高的識別率。
附圖說明
圖1是本發(fā)明基于DBSCAN算法的聲紋識別方法的整體架構(gòu)圖。
圖2是本發(fā)明中DBSCAN算法的一般模型圖。
圖3是實(shí)施例中采用本發(fā)明基于DBSCAN算法的聲紋識別方法進(jìn)行識別的流程圖。
圖4是本發(fā)明中利用正態(tài)分布的區(qū)間估計(jì)計(jì)算閾值的示意圖。
具體實(shí)施方式
下面詳細(xì)描述本發(fā)明的實(shí)施方式,所述實(shí)施方式的示例在附圖中示出。下面通過參考附圖描述的實(shí)施方式是示例性的,僅用于解釋本發(fā)明,而不能解釋為對本發(fā)明的限制。
一種基于DBSCAN算法的聲紋識別方法,包括:語音特征的提取,訓(xùn)練集語音的篩選,對檢驗(yàn)語音的判斷算法。所述語音特征提取采用mel倒譜系數(shù)進(jìn)行特征提??;訓(xùn)練語音的篩選采用“基于余弦相似度的分組篩選”方法進(jìn)行篩選;對檢驗(yàn)語音的判斷利用改進(jìn)的DBSCAN算法進(jìn)行判斷。
進(jìn)一步地,所述語音特征提取過程中,根據(jù)經(jīng)典的奈奎斯特采樣定律,以高于兩倍普通人所能發(fā)出的聲音的最高頻率進(jìn)行采樣并存儲,并且利用經(jīng)典的mel倒譜系數(shù)對所獲取的語音信號進(jìn)行特征提取,并把所獲得一系列特征系數(shù)矢量化,得到一組多維向量。
進(jìn)一步地,所述訓(xùn)練語音篩選,一共篩選2n個語音片段數(shù)據(jù)。篩選方法采用“基于余弦相似度的分組篩選”方法。首先,我們需要對訓(xùn)練集語音之間的相似度進(jìn)行評價(jià),采用余弦相似度的方法,計(jì)算兩組語音信號之間的相似度,并且轉(zhuǎn)化成角度值,角度值約束在[0,180]度。
其中,Ai表示第一個語音特征向量第i維的數(shù)值,Bi表示第二個語音特征向量第i維的數(shù)值,θ表示兩條語音之間的余弦相似角度,m表示各語音特征向量的維度。
進(jìn)一步地,對這些語音片段按順序標(biāo)號,然后以標(biāo)號的奇偶性分為兩組,以固定閾值12度來約束組內(nèi)的訓(xùn)練語音,要求每個語音片段與其他語音片段的余弦相似度不能超過12度,進(jìn)而排除組內(nèi)的離群點(diǎn)。12度為實(shí)驗(yàn)的經(jīng)驗(yàn)值,實(shí)際應(yīng)用中這個值可以有所變化。如果組內(nèi)的訓(xùn)練集語音不能滿足這個條件,則需要重新訓(xùn)練,直到組內(nèi)的語音能夠滿足這個條件。如圖1所示,訓(xùn)練集語音的篩選對應(yīng)于系統(tǒng)框架圖核心算法層里的語音篩選模塊,并且篩選工作做完后,把篩選后的訓(xùn)練集語音存儲在圖1中的數(shù)據(jù)層中。如圖3所示,給出了n=3時(shí),對訓(xùn)練集語音進(jìn)行訓(xùn)練的方法。訓(xùn)練集語音數(shù)目里的n可以為任意數(shù)字,但數(shù)字太小誤差較大,數(shù)字太大訓(xùn)練集的獲取比較麻煩,適當(dāng)?shù)拇笮≥^為合適。
“基于余弦相似度的分組篩選”方法通過對訓(xùn)練集進(jìn)行分組,即可以讓訓(xùn)練集組間具有一定的差異性;組內(nèi)通過固定閾值的約束,可以把過分離群的點(diǎn)去除,保證訓(xùn)練集數(shù)據(jù)一定的一致性。利用基于余弦相似度的分組篩選方法篩選之后的訓(xùn)練集語音,基本能夠覆蓋說話人語音的大部分特征,具有較高的代表性。
進(jìn)一步地,在對檢驗(yàn)語音的識別判斷上,采用改進(jìn)的DBCSAN算法。如圖1所示,需要先將數(shù)據(jù)層里的訓(xùn)練集語音讀取出來,然后將檢驗(yàn)語音與2n條訓(xùn)練語音片段進(jìn)行比對,如果與大于等于n條(也可以是其他數(shù)值)語音片段相似則認(rèn)為該檢驗(yàn)語音是訓(xùn)練語音說話人發(fā)出的,即比對成功。
其中改進(jìn)的DBSCAN算法,把距離參數(shù)Eps重新定義為利用區(qū)間估計(jì)計(jì)算閾值時(shí)的置信區(qū)間的大小,如上文所述,該大小可選。同時(shí)我們默認(rèn)特定說話人所發(fā)出的語音為同一個簇族,如果檢驗(yàn)語音在該簇族的核心區(qū)和邊界上,則認(rèn)為檢驗(yàn)語音是該說話人所發(fā)出的,否則,則認(rèn)為該檢驗(yàn)語音不是該說話人所發(fā)出的。如圖2所示,展示了DBSCAN算法的一般思想。圖2中取Eps=1,并且設(shè)定對某個特定的點(diǎn),在Eps距離范圍內(nèi)有0~2個近鄰點(diǎn),則這個點(diǎn)為噪聲點(diǎn);有3~4個近鄰點(diǎn),則這個點(diǎn)是邊界點(diǎn);有5個近鄰點(diǎn)及以上,則這個點(diǎn)為核心點(diǎn)。
進(jìn)一步地,判斷一條語音是否和另一條語音是否相似,仍采用余弦相似度的方法計(jì)算出兩者的余弦角度,當(dāng)這個角度小于某個閾值時(shí)認(rèn)為這兩條語音是相似的,反之不相似。通過不斷實(shí)驗(yàn),發(fā)現(xiàn)一個說話人某個語音片段和其他語音片段之間的余弦相似角度的分布近似滿足正態(tài)分布特性,所以在計(jì)算閾值的時(shí)候,采用正態(tài)分布的單邊估計(jì)進(jìn)行計(jì)算。
首先,計(jì)算出某條訓(xùn)練語音和別的訓(xùn)練語音之間的余弦相似角度,并計(jì)算出這些角度值的平均值和方差,得到一個正態(tài)分布的概率分布密度函數(shù)。
其中,μ表示上述一系列角度值的平均值,σ表示上述一系列角度值的標(biāo)準(zhǔn)差,f(θ)表示θ的概率密度。
進(jìn)一步地,如圖4所示,利用正態(tài)分布的單邊區(qū)間估計(jì),得到一個上限閾值。通過多次試驗(yàn),發(fā)現(xiàn)這些語音的正態(tài)分布概率密度函數(shù)在[-∞,0]區(qū)間內(nèi)的概率近似為零。首先查標(biāo)準(zhǔn)正態(tài)分布的概率分布表,得到左邊區(qū)間為97.5%的點(diǎn)為1.96,然后再把這個點(diǎn)轉(zhuǎn)化為本項(xiàng)目的非標(biāo)準(zhǔn)正態(tài)分布上對應(yīng)的點(diǎn):
其中,Y表示所計(jì)算出的判斷是否相似的閾值,a表示該置信度對應(yīng)于標(biāo)準(zhǔn)正態(tài)分布的橫坐標(biāo),μ與σ的含義與前文一致。此處Y閾值的選取上,標(biāo)準(zhǔn)正態(tài)分布可以選擇100%處的點(diǎn)進(jìn)行轉(zhuǎn)化,也可以選擇90%處的點(diǎn)進(jìn)行轉(zhuǎn)化,但是拒絕識別率和錯誤識別率存在差異。如圖3所示,給出了n=3時(shí),以1號語音為例時(shí),對應(yīng)于1號語音的新的閾值的計(jì)算流程。
進(jìn)一步地,某條檢驗(yàn)語音和該訓(xùn)練語音的角度值設(shè)為X,我們用計(jì)算出來的該訓(xùn)練語音的Y值與X比較,如果X≤Y,則認(rèn)為檢驗(yàn)語音與該訓(xùn)練語音是相似的,否則檢驗(yàn)語音和該訓(xùn)練語音不相似。如果一共有n及以上條訓(xùn)練語音和檢驗(yàn)語音相似,則認(rèn)為檢驗(yàn)語音和訓(xùn)練語音的說話人是匹配的,否則不匹配。
如圖3所示,我們用sum進(jìn)行計(jì)數(shù)近鄰點(diǎn)個數(shù)。當(dāng)sum=0~2時(shí),這個檢驗(yàn)語音為噪聲點(diǎn);當(dāng)sum=3~4,這個檢驗(yàn)語音為邊界點(diǎn);當(dāng)sum=5~6時(shí),這個檢驗(yàn)語音為核心點(diǎn)。我們?nèi)∵吔琰c(diǎn)和核心點(diǎn)都為比對成功。根據(jù)具體情況不同,不一定需要n及以上條訓(xùn)練語音和檢驗(yàn)語音相似才認(rèn)為比對成功,可以為其他數(shù)值。其中數(shù)值越大,錯誤識別率越低,拒絕識別識別率越高。
本發(fā)明基于DBSCAN算法的聲紋識別方法可對應(yīng)如圖1所示的架構(gòu)圖,主要分為三個層次,包括交互層、核心算法層和數(shù)據(jù)層。
其中交互層包括訓(xùn)練集語音錄入、檢驗(yàn)語音錄入和輸出結(jié)果顯示三個模塊。前兩個模塊主要是完成訓(xùn)練集語音和檢驗(yàn)語音的采樣和錄入工作。輸出結(jié)果顯示模塊用來輸出顯示訓(xùn)練集語音的篩選結(jié)果,包括是否篩選成功,如果篩選不成功,用戶需要把第幾號語音重新錄制等信息。同時(shí)該模塊還要把核心算法層的最終的語音識別的結(jié)果顯示出來,判別成功與否等信息。
核心算法層包括特征提取、語音篩選、閾值計(jì)算、判別算法四個模塊。特征提取模塊用來提取由交互層錄入的語音的mel倒譜系數(shù)并且進(jìn)行矢量化操作。語音篩選模塊采用“基于余弦相似度的分組篩選”的方法,用來對訓(xùn)練集語音進(jìn)行篩選,并將篩選結(jié)果交由交互層顯示,如果篩選成功,將篩選后的語音送入數(shù)據(jù)層進(jìn)行存儲。閾值計(jì)算模塊從數(shù)據(jù)層讀取訓(xùn)練集語音,并且利用正太分布的單邊區(qū)間估計(jì)重新計(jì)算閾值。判別模塊利用閾值計(jì)算模塊得到的閾值,將檢驗(yàn)語音與訓(xùn)練集語音進(jìn)行比對,采用改進(jìn)的DBSCAN算法,并將判別的結(jié)果交由交互層進(jìn)行顯示。
數(shù)據(jù)層,主要是用來存儲核心算法層篩選出來的訓(xùn)練集語音,用來與核心算法層進(jìn)行數(shù)據(jù)的交互。
如圖3所示,是取n為3,以第1號訓(xùn)練語音為主體,判斷檢驗(yàn)語音和第1號語音是否相似的系統(tǒng)流程圖。
首先確定訓(xùn)練語音的大小,如取n=3,即需要說話人Z首先錄入一共6條相同的語音片段,如“你好”,并按照先后順序標(biāo)號。然后按照標(biāo)號的奇偶性進(jìn)行分組,其中1,3,5為一組,2,4,6為一組。以奇數(shù)組為例,如果組內(nèi)兩兩之間的余弦相似角度都大于12,則認(rèn)為該組數(shù)據(jù)無效,需要重新錄制,否則需要分別對每個語音進(jìn)行判斷,某條語音與其他兩條語音之間的余弦相似角度均小于等于12,則認(rèn)為該條語音數(shù)據(jù)是合格的,否則需要重新錄制,直至滿足要求為止。
以1號語音為例,用1號語音分別與2,3,4,5,6號語音進(jìn)行余弦相似度的計(jì)算得到5個角度值,計(jì)算出這組數(shù)據(jù)的平均值和標(biāo)準(zhǔn)差,從而得到說話人每次說“你好”與1號語音之間的角度分布。然后利用該概率分布密度函數(shù),做左邊區(qū)間估計(jì),置信區(qū)間可以為90%、95%、100%(可選),得到一個角度閾值Y。
用檢驗(yàn)語音和1號語音做相似度計(jì)算,得到一個角度值X,如果X≤Y,我們就認(rèn)為檢驗(yàn)語音和1號語音是相似的,否則不相似。
如果檢驗(yàn)語音和1,2,3,4,5,6號語音一共有超過n條(這里預(yù)設(shè)閾值為n,也可以是其他數(shù)值)語音相似,則認(rèn)為該訓(xùn)練語音是說話人Z所發(fā)出的語音,反之不是說話人Z所發(fā)出的。如果判斷結(jié)果認(rèn)為是說話人Z所發(fā)出的,則系統(tǒng)返回比對成功,否則系統(tǒng)返回比對失敗。訓(xùn)練語音的錄入只需要進(jìn)行一次,不需要每次進(jìn)行比對前都錄入一遍訓(xùn)練語音。
以上實(shí)施例僅為說明本發(fā)明的技術(shù)思想,不能以此限定本發(fā)明的保護(hù)范圍,凡是按照本發(fā)明提出的技術(shù)思想,在技術(shù)方案基礎(chǔ)上所做的任何改動,均落入本發(fā)明保護(hù)范圍之內(nèi)。