編輯導語:如今的識別功能越來越強大,比如:指紋識別、人臉識別、虹膜識別、聲紋識別等等,聲紋識別多用於金融行業和刑偵場景,進行聲音匹配;本文作者詳細介紹和分析了聲紋識別中N:N聚類演算法是如何應用的,我們一起來看一下。
筆者前段時間有幸了解到聲紋的概念:聲紋識別,作為生物識別技術的一種,跟臉象、指紋、虹膜等一樣,是每個人獨一無二的特徵;在金融行業、刑偵場景應用中,對於說話人身份的鑒別認證,應用頗多。
作為產品功能設計,一般有三個類別,分別是1:1(說話人確認)、1:N(說話人辨認)、N:N(在聲紋1:N的基礎上,進行大規模、自動化和高效的聲紋匹配,類似聲海中找特定聲音,或者找相似聲音)。
本文從聲紋識別的基本概念入手,科普知識;同時分享筆者思考的聲紋識別的N:N聚類演算法的流程與應用場景,希望可以和大家多多交流。
本文將從如下方面為你一一解讀:
- 什麼是聲紋?
- 聲紋識別的原理。
- 聲紋識別的三個應用大類:1:1、1:N、N:N。
- N:N聚類分析的技術原理與應用流程、應用場景。
- 聲紋識別的幾類攻擊。
一、什麼是聲紋?
聲紋(Voiceprint),是用電聲學儀器顯示的攜帶言語信息的聲波頻譜,是由波長、頻率以及強度等百餘種特徵維度組成的生物特徵,具有穩定性、可測量性、唯一性等特點。
人類語言的產生是人體語言中樞與發音器官之間一個複雜的生理物理過程,發聲器官——舌、牙齒、喉頭、肺、鼻腔在尺寸和形態方面每個人的差異很大,所以任何兩個人的聲紋圖譜都有差異。
每個人的語音聲學特徵既有相對穩定性,又有變異性,不是一成不變的;這種變異可來自生理、病理、心理、模擬、偽裝,也與環境干擾有關;儘管如此,由於每個人的發音器官都不盡相同,因此在一般情況下,人們仍能區別不同的人的聲音或判斷是否是同一人的聲音。
二、聲紋識別的原理
想要通過聲音識別某個人,或者從聲海中辨認出誰是誰,有兩個核心的問題:就是特徵提取和模式匹配了。
數據收集階段,提取並提取並選擇對說話人的聲紋具有可分性強、穩定性高等特性的聲學或語言特徵;之後選擇合適的模型(具體大家可以自行搜索,這裡不多贅述)在進行聲音識別。
三、聲紋識別的三個應用大類:1:1、1:N、N:N
1. 說話人確認 1:1
1:1 說話人確認是確認說話人身份的方法,針對「對於同樣的文本內容,有兩段錄音,這兩段錄音到底是不是出自一人之口」這樣的問題,也就是「兩句話到底是不是一個人說「的問題。
該類場景相對簡單,主要應用於用戶的註冊和驗證,以及APP內的聲紋核身。
2. 說話人確認 1:N
1:N 說話人辨認是辨認說話人身份的方法,針對「對於一段語音,需要迅速在樣本庫中進行搜尋比對,以確認這段語音與樣本庫中哪段語音相似度最高」,也就是說「給定的一段語音屬於樣本庫中誰說的」的問題。
該類場景比較常見,主要應用於黑名單用戶進線檢測、提高安防能力等。
3. 說話人聚類 N:N
在聲紋 1:N 的基礎上,進行大規模、自動化和高效的聲紋匹配。
舉個例子,如果吉尼斯舉行一個比賽,5萬個人都錄製一段文字內容相同的語音;作為吉尼斯的審核方,如果想要快速鑒別這5萬個數據有沒有造假、或者重複(比如將一段語音複製無數次,冒充數據);那麼雇傭業務員一條一條語音聽,是有點不科學的,語音聽多了也會混亂,而且很低效。
那麼有什麼好的辦法呢?那就是N:N說話人聚類,下文會詳細介紹如何解決此類問題。
四、N:N聚類分析的技術原理與應用流程,應用場景
對於千億級別的無標籤錄音文件,如何做有效的處理?
舉個例子,假如說你有很多的語音片段(語音的文本內容是相同的),這些語音片段分別歸屬於甲乙丙丁等人;僅憑人耳辨識是無法分辨出哪些語音片段屬於甲,哪些語音片段屬於乙。
通過N:N聚類的演算法,進行聲紋的相似度檢測,將屬於同一個人說話的語音片段不斷進行合併歸類;最後屬於甲說話的語音片段全部被歸為一類,屬於乙說話的語音片段全部被歸為一類;以此類推,類內語音的相似度極高,類間語音的相似度較低,達到將這些語音片段分人整理的目的。
簡單介紹一下聚類分析:聚類分析是根據在數據中發現的描述對象及其關係的信息,將數據對象分組。
目的是——組內的對象相互之間是相似的(相關的),而不同組中的對象是不同的(不相關的);組內相似性越大,組間差距越大,說明聚類效果越好。
聚類效果的好壞依賴於兩個因素:
- 衡量距離的方法(distance measurement) ;
- 聚類演算法(algorithm)。
目前主流的說話人聚類演算法是在說話人分割的基礎上,基於貝葉斯信息判據,採用凝聚分層聚類演算法,直接對說話人分割后的語音段進行判決,將屬於同一個說話人的語音段合併為一類。
其基本思想是從每個語片段中提取特徵參數,例如梅爾倒譜參數,計算每兩個語音段之間特徵參數的相似度,並利用BIC判斷相似度最高的兩個語音段是否合併為同一類。
對任意兩段語音都進行上述判決,直到所有的語音段不再合併。
——摘自「說話人聚類的初始類生成方法」
聚類&聲紋識別的主要場景:在跨渠道、跨場景收集語音同時建立聲紋庫的時候;由於各場景應用的客戶賬號或許不同,說話人在不同場景中分別註冊過聲紋,難以篩除重複註冊語音,建立統一聲紋庫。
我們如何快速的去篩除屬於某一個人在不同情況下錄製的多條錄音文件?也就是如何保證最終留下的錄音文件(聲紋庫)是唯一的?
每一個人只對應一條音頻,這就要用到聚類的演算法;利用聲紋識別N:N說話人聚類,對所有收集到的語音進行語音相似度檢測,將同一說話人在不同場景中的多次錄製的語音篩選出來;並只保留其中一條,從而保證了聲紋庫的獨特性,節省了大量的人力成本、資源成本。
對於目前的場景,我們選擇凝聚層次聚類演算法,在這種場景下,我們是要篩除重複人說話;那麼我們可以將每一個錄音文件都當作一個獨立的數據點,看最後有凝聚出多少個獨立的數據簇,此時可以理解為類內都是同一個人在說話。
1)我們首先將每個數據點(每一條錄音文件)視為一個單一的類,即如果我們的數據集中有 X 個數據點,那麼我們就有 X 個類;然後,我們選擇一個測量兩個類之間距離的距離度量標準;作為例子,我們將用 average linkage,它將兩個類之間的距離定義為第一個類中的數據點與第二個類中的數據點之間的平均距離(這個距離度量標準可以選擇其他的)。
2)在每次迭代中,我們將兩個類合併成一個;這兩個要合併的類應具有最小的 average linkage,即根據我們選擇的距離度量標準,這兩個類之間的距離最小;因此是最相似的,應該合併在一起。
3)重複步驟 2 直到我們到達樹根,即我們只有一個包含所有數據點的類。這樣我們只需要選擇何時停止合併類,即何時停止構建樹,來選擇最終需要多少個類(摘自知乎)。
按照實際的場景,如果我們最終要得到1000個不重複的錄音文件,為了防止過度合併,定義的退出條件是最後想要得到的錄音文件數目。
處理的流程圖
聚類模擬圖
五、聲紋識別的幾類攻擊及其策略
1. 錄音重放攻擊
攻擊者錄製目標說話人的語音進行播放,以目標人身份試圖通過聲紋識別系統的認證。
策略:基於隨機內容聲紋的檢測技術,利用隨機數字的不確定性,用戶在規定的時間內(5-10S)需要念出指定的隨機內容,如果超時,則隨機內容更新;因為對於錄音重放的內容是固定的,很不靈活,所以比較容易做限制。
2. 波形拼接攻擊
攻擊者將目標說話人的語音錄製下來,通過波形編輯工具,拼接出指定內容的語音數據,以放音的方式假冒目標說話人,試圖以目標人身份通過聲紋識別系統的認證。
策略:同錄音重放。
3. 語音合成攻擊
攻擊者用語音合成技術生成目標說話人的語音,以放音的方式假冒目標說話人,試圖以目標人的身份通過聲紋識別系統的認證。
策略:同錄音重放;利用活體檢測技術,加強演算法的識別度。
以上,是關於聲紋識別的一些分享,希望大家可以多多交流,一同進步。