中文語者(聲紋)識別
Chinese Speaker Recognition
找到描述特定對象的聲紋特徵,通過聲音判別說話人身份的技術;借助不同人的聲音,在語譜圖的分佈情況不同這一特徵,去對比兩個人的聲音來判斷
中文語音識別、中文語音去噪、中文文本分類、中文文本糾錯、中文機器閱讀理解、中文實體識別、中文文本相似度、中文語者分離
那些自然語言處理踩的坑 | 御守臺灣・科技抗疫:提高聲紋辨識正確率 更添防疫新利器 | 那些語音處理踩的坑
大型語言模型要踩的坑 | 那些ASR和TTS可能會踩的坑 | 白話文手把手帶你科普 GenAI
坑都踩完一輪,大型語言模型直接就打完收工?
那些檢索增強生成 (Retrieval-Augmented Generation, RAG) 要踩的坑
Call for Partner or POC (Proof of Concept), Contact: TonTon ( at ) TWMAN.ORG
https://github.com/Deep-Learning-101 | https://huggingface.co/DeepLearning101
Insurance (壽險) FAQ - High Entropy Alloys (材料) FAQ - Cryptocurrency Exchange (交易所) FAQ
語音質檢/噪音去除 (語音增強) - 多模態大型語言模型之單據核銷- 診斷書醫囑擷取分析
ASR 語音語料辨識修正工具 - 客服ASR文本AI糾錯系統 - 逐字稿文本內容比對工具 - 線上語音合成;GPT-SoVITS Speaker:TWMAN
投入約150天。通常我們是怎樣開始項目的研究與開發?首先會先盡可能的把3年內的學術論文或比賽等SOTA都查到,然後分工閱讀找到相關的數據集和論文及相關實作;同時會找到目前已有相關產品的公司(含新創)及他們提交的專利,這部份通常再花約30天的時間;通常就是透過 Google patens、paper with codes、arxiv等等。
聲紋識別這塊在對岸查到非常多的新創公司,例如: 國音智能在我們研究開發過程就是一直被當做目標的新創公司。可以先看一下上方的DEMO影片效果;然後介紹相關實驗結果前,避免之後有人還陸續踩到我們踩過的坑;需注意的是上述很多數據集都是放在對岸像是百度雲盤等,百度是直接封鎖台灣的IP,所以你打不開是很正常的;另外像是voxcelab是切成7份,下載完再合起來也要花上不少時間,aishell、CMDS, TIMIT 比起來相對好處理就是。
簡單總結為:1. 幾種 vector 的抽取 (i-vector, d-vector, x-vector) 跟 2. 模型架構 (CNN, ResNet) 和調參,再來就是 3. 評分方式 (LDA, PLDA (Probabilistic Linear Discriminant Analysis)) 等等幾種組合;我們也使用了 kaldi 其中內附的功能,光是 kaldi 就又投入了不少時間和精力 ! 其實比起自然語言處理做聲紋識別,最小的坑莫過於雖然數據集不是很容易獲取,但是聲音是可以自行用程式加工做切割合併,然後因為場景限制,錄聲紋時的時長頗短,還得處理非註冊聲紋的處理,所以前前後後花了很多時間在將相關的數據搭配評分模式調整,也算是個大工程。
由左而右、由上而下:任意連續唸至少30秒文章做聲紋註冊,可用 M$ Azure、Google GCP、NVIDIA Nemo 做語音識別,再搭配Sincnet做聲紋跟閱讀理解
The VoxCeleb Speaker Recognition Challenge 2020 (VoxSRC-20)
聲紋識別原理:https://www.zhihu.com/question/30141460
深度學習在聲紋識別中的應用:https://yutouwd.github.io/posts/600d0d5d/
相關聲紋識別介紹匯整:http://xinguiz.com/category/#/声纹识别
CN-Celeb:中國明星聲紋數據集發布:https://mp.weixin.qq.com/s/f_oFRDuSAuqwbOAby07a5Q
基於Kaldi和Pytorch,廈大語音實驗室推出聲紋識別開源工具ASV-Subtools:https://github.com/Snowdar/asv-subtools
騰訊朱雀實驗室最新研究成果入選全球安全頂會:聲音克隆風險需警惕:https://mp.weixin.qq.com/s/iGhVMy73E-bRJ6oB_4t-yQ
1. 應用場景
1:1驗證(驗證:Verification):已知對象打電話來,你確認他的身份
1:n驗證(識別:Identification):未知對象打電話來,你判斷他的身份
2. Features:
聽覺特徵(Auditory feature):人耳可以鑑別和描述的聲音特徵
聲學特徵(Acoustic features):利用數學方法計算出的描述參數(向量)
特徵可以輔助縮小1:n驗證的檢索範圍對象
短時特徵:最常使用
長時特徵:通常是短時特徵的平均(基礎頻率/頻譜特徵),較不會受到說話語氣或說話者身體情況變化的影響
3. 鑑別方法好壞
Interclass Varience:從不同聲紋對象提取的不同特徵向量的區分度
Intraclass Varience:從相同聲紋對象在不同時間提取的特徵向量間的相似度
Ex:胎記:Interclass大, Intraclass小
將聲紋向量與已註冊的聲紋向量計算歐氏距離,大於某值則這是源自不同人,反之則為同一人
4. 特徵擷取方法
傳統方法:可用精確數學模型對聲音進行分析,得到的特徵有較好的可解釋性,需要的資料量小。
模板匹配
高斯混合模型(GMM)
聯合因子分析法(JFA)
深度神經網路:一種資料驅動方法,需要大量資料進行訓練,若有夠多與夠好的資料即可預期較好的結果。
5. 公開數據集:aishell 1, aishell 2, CMDS, TIMIT, voxcelab 1, voxcelab 2, CN-celab
常見特徵工程
GMM-JFA
UBM-MAP-GMM為一種確認發話者技術的系統
在JFA模型下,可將模型擴展為說話人空間(V)與環境空間(U)
為了克服訓練資料不夠的狀況因此引入UBM,但是實際應用中U, V無法完美分離
Dehak提出從GMM super-vector中提取更好的向量作為改良方法,稱為I-Vector(Identity-Vector)
iVector-based:Dehak, 2009
利用GMM高斯混合模型提取i-vector
採用Total Variability Space(T),即包含了說話者間的差異與空間上的差異(代表不用嚴格區分是說話者的影響還是空間的影響)
PLDA:用來弱化空間影響的方法
需要較長的(數十秒到數分鐘)的語音,不適用於Text-Dependent Speaker Verification Task (因為語音很短)
DNN-based
d-vector:Google, 2014 ; 中文翻譯
從DNN提取最後一層hidden layer作為embedding
訓練好DNN後,把每一幀語音的Filterbank Energy特徵作為DNN輸入,從Last Hidden Layer提取Activations,做完L2正規化後累加起來得到的向量稱為d-vector;若有多條Enroll語音則將所有d-vectors取平均作為此人的Representation
在不改變model size的前提下使用更多的資料進行訓練:因softmax layer被跳過了因此不考慮softmax layer的節點數
x-vector:Snyder, D, 2018
從TDNN網路中提取embedding進行plda scoring
Utterance-Level的特征计算Loss
Statistics Pooling Layer: 將Frame-level Layer Map到Segment-Level Layer以便計算frame-level Layer的Mean和standard deviation
在短語音上表現較強:TDNN是時延架構,Output Layer可學到Long-Time feature,所以x-vector可以利用短短的10s左右的語音抓到聲紋訊息
提取x-vector,LDA降维,然后以PLDA作为back-end,便可以做Verification
訓練速度非常快,在訓練資料量大時可有較低的EER
j-vector:j-vector, 2015;j-vector join Bayesian, 2017
為了解決Text-Dependent Speaker Verification而提出的,此任務同時要驗證身份也要驗證語音內容,屬於multi-task
j-vector从Last Hidden Layer提取。相比于Cosine Similarity、Joint PLDA,使用Joint Gaussian Discriminant Function作为back-end时,实验效果最佳
適用文本相關的說話者驗證
End-to-end:希望能直接輸入兩段語音來判斷是否來自同一人。
Triplet-Loss-based:實際使用:Google FaceNet, Baidu Deep Speaker
概念:直接使用embeddings間的相似度作為Loss Function
建構一個三元組:anchor, positive, negative
用大量標記好的三元組作為DNN輸入以學習參數
anchor, positive為同一人的不同聲音
anchor, negative為不同人的聲音
目標為最大化ap相似度, 最小化an相似度
相似度:
cosine:愈大相似度愈高(Baidu Deep Speaker)
歐幾里德距離:愈小相似度愈高(Google FaceNet)
改進方向:嘗試使用不同神經網路架構
為什麼NN比i-vector好?
對NN來說資料愈多愈能避免overfitting; i-vector使用UBM/T(無監督訓練),當資料愈多就需要一直調整cluster中心
NN使用多類別cross-entropy進行分類,因此若遇到失真(distorsions)問題DNN都能學到invariant;資料的失真會對i-vector的斜方差矩陣帶來影響,此時就需要做data cleaning或back-end補償
短語音會對NN有影響,因為訓練時長變少了
i-vector的back-end補償NN也可以使用
E2E和Representation的差別
不同的模型結構: E2E包含speaker embedding(front-end) 和 scoring(back-end);Representation只有front-end
不同的訓練目標: E2E是直接輸入兩段語音來判斷是否來自同一人;Representation是判斷在訓練集中的說話者。
不同的訓練方法: E2E使用一對對的語音進行訓練,語音選取好壞會很影響訓練結果;Representation是one-hot的訓練方法,較容易。
不同的泛化能力: E2E只能用在聲紋識別任務中;Representation應用較廣。
技術指標
錯誤拒絕率(False Rejection Rate, FRR):同類的兩人被系統判別為不同類。FRR為誤判案例在所有同類匹配案例中的比例
錯誤接受率(False Acceptance Rate, FAR):不同類的兩人被系統判為同類。FAR為接受案例在所有異類匹配案例中的比例
等錯誤率(Equal Error Rate, EER):調整threshold,當FRR=FAR時,FRR和FAR的數值稱為等錯誤率
準確率(Accuracy,ACC):ACC=1-min(FAR+FRR)
速度:
Real Time Factor 實時比:衡量提取時間跟音頻時長的關係,ex:1秒可以處理80s的音頻,實時比=1:80
驗證比對速度:平均每秒能進行的聲紋比對次數
ROC曲線:描述FAR和FRR間變化的曲線,X軸為FAR,Y軸為FRR。
閥值:當分數超過閥值才做出接受決定。
Multi-Resolution Multi-Head Attention in Deep Speaker Embedding
提出一種pooling方式來計算attentive weight,使得輸入的語音在時間軸上能更好的聚合,進而使end-to-end neural network 在語者識別上獲得更好的效能
General Pooling
Average pooling: 計算多個frame vectors的平均作為整個音檔的d-vector表示
Statistics pooling: 計算多個frame vectors的平均和標準差,再拼接在一起作為整個音檔的d-vector表示
Attentive pooling: 將frame vector做attention計算,並將得到的結果作為weight,再乘上sequence作為整個音檔的d-vector表示
Multi-head attentive pooling: 基於attentive pooling的計算再加上multi-head的設計,產生多組的weight並將各自結果拼接作為輸出
Proposed Pooling:Multi-resolution multi-head attentive pooling: 基於Global multi-head attentive pooling,並增加一個resolution參數T,對不同head的訓練結果做不同程度的稀釋。此參數介於1~無限大,趨近於1表示高度採信訓練結果,趨近於無限大則代表直接使用average pooling,意即完全不採用訓練出的weight
SincNet:Speaker Recognition from Raw Waveform with SincNet
AutoSpeech: Neural Architecture Search for Speaker Recognition
Robust Speaker Recognition Based on Single-Channel and Multi-Channel Speech Enhancement
VAE-based Regularization for Deep Speaker Embedding
PLDA 模型的設計是基於 i-vector 的高斯分佈性質情況下能有最佳表現,但 d-vector 或 x-vector 並沒有這項特性,因此 PLDA 未必能有效發揮;此篇論文提供一個事後 Normalize 的方式,使用 VAE 的向量分布轉換特性將原本已生好的 x-vector (d-vector 同理) 轉換至高斯分佈,並套用新 loss (Cohesive loss) 使向量更向中心點靠攏;根據實驗經此方法 Normalize 的向量在EER上會比原始 x-vector 表現更好
VAE簡述: Variational Auto Encoder 原始 AutoEncoder (AE) 為將輸入 encode 至隱藏空間中的一個向量點,再經 decoder 做還原,而 VAE 的編碼結果便不再是單一向量,而是一個均值向量與一個標準差向量,簡單可理解為將輸入編碼成隱藏空間中的一個高斯分佈
總結: 以理論而言可能會是一個有效的方法 且因這是一個後置的Normalize 對原始模型不會有太大影響 可做為方向之一
Improving End-to-End Single-Channel Multi-Talker Speech Recognition