1. 程式人生 > >說話人識別/聲紋識別學習路徑的資料整理,從零學聲紋識別

說話人識別/聲紋識別學習路徑的資料整理,從零學聲紋識別

昨天幫新同事講解了一波說話人識別的理論,並且幫他整理了資料讓他學習,

這個部落格就是把最具有代表性的資料記錄下來,前提,我假設你知道啥是MFCC,啥是VAD,啥是CMVN了.

說話人識別學習路徑無非就是 GMM-UBM -> JFA -> Ivector-PLDA -> DNN embeddings -> E2E

 首先 GMM-UBM, 最經典代表作: Speaker Verification Using Adapted Gaussian Mixture Models

從訓練普遍人聲紋特徵的UBM到經過MAP的目標人GMM-UBM到後面的識別的分數似然比,分數規整都有介紹,老哥Reynold MIT教授,這篇論文可以說是說話人識別開發者必讀

(然後,直接跳過JFA吧)JFA太多太繁瑣,但假如你是個熱愛學習的好孩子,那想必這篇論文你應該很喜歡 Patrick Kenny的: Eigenvoice Modeling With Sparse Training Data

 

接下來我們來看看Ivector, ivector的理論,ivector 總變化空間矩陣的訓練.

首先你需要知道Ivector的理論知識, 所以經典中的經典: Front-End Factor Analysis for Speaker Verification

訓練演算法推薦: A Straightforward and Efficient Implementation of the Factor Analysis Model for Speaker Verification

但假如你很喜歡數學,Patrick Kenny的這篇結合Eigenvoice應該很適合你: A Small Footprint i-Vector Extractor

到這裡,基本上從GMM-UBM 到IVECTOR的理論和訓練,你只要讀完以上,再加上kaldi的一些小實驗,相信聰明的朋友們絕對沒問題.

Kaldi參考:train_ivector_extractor.sh和extract_ivector.sh,注意要看他們的底層C++,對著公式來,然後注意裡面的符號跟論文的符號是不同的,之前的部落格有說過. 你會發現,跟因子分析有關的論文不管是JFA還是Ivector都會有Patrick Kenny這個人物!沒有錯,這老哥公式狂魔,很猛很變態,對於很多知識點,跟著它公式推導的思路來絕對會沒錯,但對於像我這種數學渣,我會直接跳過.

記下來我們來看看PLDA的訓練和打分

首先, 需要知道PLDA的理論,他從影象識別發展而來的,也跟因子分析有關.參考:Probabilistic Linear Discriminant Analysis for Inferences About Identity

PLDA的引數訓練請主要看他的EM的演算法,在該論文的APPENDIX裡面

接著是PLDA的打分識別,請參考:  Analysis of I-vector Length Normalization in Speaker Recognition Systems

將EM訓練好的PLDA引數結合著兩個IVECTOR進行打分, 這篇論文值得擁有,另外推薦Daniel Garcia-Romero,這老哥的論文多通俗易懂, 重點清晰不含糊, 並且這老哥在speaker diarization的造詣很高,在x-vector也很活躍,十分推薦.

接著來看看深度學習的東西

首先給個直覺,為什麼要用深度學習,說話人能用DNN,如何借鑑語音識別在DNN的應用,參考: NOVEL SCHEME FOR SPEAKER RECOGNITION USING A PHONETICALLY-AWARE DEEP NEURAL NETWORK

有了DNN的技術後, 各種老哥們開始用embeddings的方法取代ivector的方法,最開始的是GOOGLE的 d-vector

d-vector: DEEP NEURAL NETWORKS FOR SMALL FOOTPRINT TEXT-DEPENDENT SPEAKER VERIFICATION

d-vector: End-to-End Text-Dependent Speaker Verification

 

然後眾所周知,說話人識別or聲紋識別對語音的時長是很敏感的,短時音訊的識別效能是決定能不商用的一個很關鍵的點,所以x-vector應運而生,也是JHU的那幫人,就是Kaldi的團隊

x-vector前身 : DEEP NEURAL NETWORK-BASED SPEAKER EMBEDDINGS FOR END-TO-END SPEAKER VERIFICATION

x-vector底座: IME DELAY DEEP NEURAL NETWORK-BASED UNIVERSAL BACKGROUND MODELS FOR SPEAKER RECOGNITION

x-vector正宮: X-VECTORS: ROBUST DNN EMBEDDINGS FOR SPEAKER RECOGNITION

 

然後然後呢,牛逼的Triplet Loss出來了, 輸入是一個三元組,目的就是提升效能,(但我實驗的過程經常會不收斂,攤手,本渣也不知道為什麼)

Triplet Loss : TRISTOUNET: TRIPLET LOSS FOR SPEAKER TURN EMBEDDING

Triplet Loss : End-to-End Text-Independent Speaker Verification with Triplet Loss on Short Utterances

Deep speaker:  Deep Speaker: an End-to-End Neural Speaker Embedding System

最後E2E,但可能我個人才疏學淺,感覺論文上說的E2E其實都是做了一個EMBEDDING出來,然後外接cosine distance,但真正的EMBEDDING是輸入註冊和測試音訊,直接輸出分數,所以emmm

emmm, 感覺看完這些論文加上實踐,大概若干年後,你已經能成為一個牛逼的聲紋識別演算法工程師