聲紋識別 | 快速概覽 + 詳細了解N:N聚類算法是如何應用的
編輯導語:如今的識別功能越來越強大,比如:指紋識別、人臉識別、虹膜識別、聲紋識別等等,聲紋識別多用于金融行業和刑偵場景,進行聲音匹配;本文作者詳細介紹和分析了聲紋識別中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. 語音合成攻擊
攻擊者用語音合成技術生成目標說話人的語音,以放音的方式假冒目標說話人,試圖以目標人的身份通過聲紋識別系統的認證。
策略:同錄音重放;利用活體檢測技術,加強算法的識別度。
以上,是關于聲紋識別的一些分享,希望大家可以多多交流,一同進步。
本文由@寒白 原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自Unsplash,基于CC0協議
- 目前還沒評論,等你發揮!