公開課|基于深度學習的多說話人分割聚類(精選整理)
本文章總結(jié)于劍橋大學的張超博士在深藍學院分享的關于基于深度學習的多說話人分割聚類的公開課演講內(nèi)容,全文約3500字。
以下為正文內(nèi)容,干貨太多,自帶水杯。
建議收藏和關注我們,及時獲取后續(xù)更多相關推送!

什么是多說話人分割聚類(speaker diarisation)任務?
在一個場景中,同時存在多個人交疊的語音信息,我們?nèi)绾稳シ直娉鲞@些語音信息分別是誰說的,在什么時候說的。Speaker diarisation is the task to find?“who spoke when”, while speech recognition is to find?“what was spoken”.?張超博士在公開課上分享了他們ASRU 2015 MGB挑戰(zhàn)賽top1的方法。
整個公開課的大綱如下:
1、多說話人的分割聚類(speaker diarisation)的簡介
2、speaker diarisation的系統(tǒng)結(jié)構(gòu)
3、ASRU 2015 MGB challenge top1方法的細節(jié)
4、遷移至AMI數(shù)據(jù)集上的方法細節(jié)
5、關于Discriminative neural clustering的近期工作
6、Further discussions
1?多說話人的分割聚類簡介speaker diarisation
Diarisation是一個生造的詞,可以翻譯為“分割和聚類”,在一些場景中,如一段電話對話、一場會議、一段廣播語音或者是一個電視節(jié)目等等日常生活中的語音場景,對語音信息進行切分,找到每個人說的語音,即對整個語音信息的分割和聚類。
Speaker diarisation is the task to find “who spoke when”, while speech recognition is to find “what was spoken”. 這個在語音識別系統(tǒng)中,是作為一個對對話、會議和電視節(jié)目識別前的進行預處理的部分,同時在帶有語音信息的視頻理解等任務中,也是一個很重要的組成部分。
2?speaker diarisation的系統(tǒng)結(jié)構(gòu)
整個系統(tǒng)結(jié)構(gòu)如下圖所示:

?首先一段語音信息流,通過VAD模塊(Voice Activity Detection, 語音活躍性檢測),檢測出哪些幀是有語音的,哪些幀是沒有語音的(無聲音或者只有背景聲)。接著通過CPD模塊(Change Point Detection,變更點檢測)來檢測出說話人的變更點。最后對分割后的每一段語音,提取特征,進行聚類(Speaker Clustering),得到每一段的語音屬于哪個人說的。當然最后,會使用迭代的方法,對上述過程進行反復優(yōu)化迭代,即refine過程,來獲得更好的diarisation的結(jié)果。
首先介紹VAD模塊(Voice Activity Detection, 語音活躍性檢測),任務就是找到,什么時候有語音,也可叫“端點檢測”或者”End Point Detection”。傳統(tǒng)方法基于信號處理(Model-free),如時域處理或者頻域能量分析,這些方法很不魯棒。比較好的是基于Model-based的方法。
然后介紹CPD模塊(Change Point Detection,變更點檢測),任務就是尋找說話人變更點,找到這些點,對語音信息進行分割。比如可以使用滑動窗,在語音流上滑動,當提取的特征對應的分數(shù)發(fā)生一定閾值以上的變更,就認為發(fā)生了說話人身份變更現(xiàn)象。也可以使用神經(jīng)網(wǎng)絡,對每個點進行一個分類,分出變更點和非變更點。
接著介紹說話人聚類(Speaker Clustering)模塊,就是對CPD模塊的分割輸出,進行聚類,將同一個人說的話聚類到一起。常用的方法如IAC、AHC、k-means以及譜聚類等,或者基于每個人的說話特點,提取特征進行聚類等。
最后對上述的流程進行反復迭代,refine結(jié)果。常用的方法如iterative Variational Bayes,以及不同迭代次數(shù)中,改變滑動窗的長度,甚至也有使用語音識別結(jié)果,來迭代修正前面的流程。
3?ASRU 2015 MGB challenge top1方法的細節(jié)
這個挑戰(zhàn)賽源自于BBC的一個需求,BBC將其過去很多年的視頻數(shù)據(jù)公開,但是字幕有很多錯誤,因此提出了將這些語音信息進行識別,對字幕進行糾正和對準。該比賽的數(shù)據(jù)是BBC提供的7周的電視節(jié)目數(shù)據(jù),設計紀錄片、戲劇、新聞、電視劇、兒童節(jié)目等等,約1600小時的數(shù)據(jù)量。
本公開課不涉及語音識別部分,只涉及diarisation部分。比賽分成了三個任務,分別是語音識別任務、diarisation任務、以及字幕對準任務。作者團隊在三個任務上,均取得了top1的結(jié)果,并且大幅領先其他參賽隊伍。
作者團隊的方法框架如下:

?語音信息流進來后,過VAD,進行語音活躍性檢測,然后過CPD,做變更點檢測,這里的CPD,盡量保證召回率要高,準確率先不保證。接著使用高斯核提特征進行合并,即把準確率拉回來,然后反復迭代這個過程。
整個框架基本屬于業(yè)界常用方法,尤其是后半部分的迭代過程,作者認為他們最重要的創(chuàng)新是VAD模塊,也是他們?nèi)〉煤贸煽兊年P鍵因素。
具體只解釋一下所用的VAD模塊。整體網(wǎng)絡就是使用一個二分類的DNN,分類出語音幀和非語音幀。同時,作者團隊使用了HMM(隱馬爾科夫模型),HMM可以幫助網(wǎng)絡去限制最短的語音幀(作者團隊設置的是兩幀),其次HMM是一個似然模型,而神經(jīng)網(wǎng)絡是一個先驗模型,如果不考慮似然,當語音信息中,充滿大量的噪聲或者背景聲,那么這種分布就會使得神經(jīng)網(wǎng)絡更容易分成負樣本。
作者團隊使用了語音和非語音的先驗概率來將神經(jīng)網(wǎng)絡輸出的后驗概率轉(zhuǎn)為適用于HMM的似然,從而使得不用顧慮數(shù)據(jù)分布不平衡的問題。
在VAD模塊設計中有幾個關鍵的點,首先是神經(jīng)網(wǎng)絡要能夠cover到足夠的前后幀信息,即引入時序信息。其次,作者認為,二分類的任務并不是分出非靜音和靜音,而是分出有效語音和非有效語音(靜音和噪聲以及背景聲等)。最后,作者認為,訓練數(shù)據(jù)量越多越好,尤其注意非有效語音的數(shù)據(jù)量也要足夠。
VAD模塊的測試效果如下圖,可以看到使用更多的時序信息、更深的網(wǎng)絡、更多的數(shù)據(jù)帶來的改善效果都是很明顯。

?
由上述的VAD模塊,設計的整個diarisation系統(tǒng),也取得了非常好的效果。同時diarisation的提升,也帶來了識別任務的效果提升。
4?遷移至AMI數(shù)據(jù)集上的方法細節(jié)
AMI數(shù)據(jù)集是一個集合了很多會議內(nèi)容的語音數(shù)據(jù)集,涉及了100多個人。作者坦誠這個數(shù)據(jù)集很難跑,分析了原因之后,發(fā)現(xiàn)原來是數(shù)據(jù)集的標注問題。
在一些人工分段上,即使只有很短的語音,AMI數(shù)據(jù)集也經(jīng)常會在語音段前后加入長達數(shù)秒時間,而在這長達數(shù)秒的非語音中,很有可能發(fā)生其它說話人說話的情況,從而影響了語音段的純度。
因此作者團隊用自動對準的方法對AMI數(shù)據(jù)集進行了矯正,帶來的明顯的改變是,數(shù)據(jù)集中的分段更多了,真正的說話人重疊比較少。
作者團隊基于這個矯正后的AMI數(shù)據(jù)集,進行VAD實驗,整體的VAD測試都正常了,同時作者團隊修正了該數(shù)據(jù)集的標注并公開發(fā)布,歡迎其他對會議轉(zhuǎn)錄任務和AMI數(shù)據(jù)集感興趣的同行使用。
關于CPD模塊部分,整體的網(wǎng)絡結(jié)構(gòu)如下:

整體網(wǎng)絡的輸出可以看做為一個二分類網(wǎng)絡,輸入是一個時序的RNN,具體細節(jié)是:在當前幀的前n幀和后n幀,分別提取單幀靜態(tài)特征,然后各自通過RNN聚合,最后將RNN的特征輸出做一個點乘,再過一些網(wǎng)絡,最終二分類輸出結(jié)果。
關于說話人聚類(Speaker Clustering)模塊部分,作者團隊使用的方法是,在每個分的段上,進行提特征(Embeding),然后聚類,所以關鍵在于如何提特征,作者團隊設計了很多中結(jié)構(gòu)。
比如,設計了在每一段上采用self-attention的結(jié)構(gòu),加權(quán)出一個特征,進行聚類。除此之外,作者團隊還設計2D Consecutive Self-attentive Combination,其實就是將多種提特征的模型ensemble,然后再總的來一個self-attention,這些模型包括TDNN和HORNN。更進一步,作者在ensemble的時候,除了使用self-attention外,還嘗試了雙線性池化的特征融合。
最終,作者團隊將以上方法都融合在了一起,即使用不同的模型做融合,融合方法不僅包括self-attention,也包括雙線性池化融合,如下圖所示:

?在AMI數(shù)據(jù)集上的整體系統(tǒng)結(jié)構(gòu)如下:

?和前面所說的pipeline基本一致,虛線部分表示可以考慮越過CPD模塊,但是其實這是一種不好的方式,因為插嘴現(xiàn)象還是會發(fā)生的,作者也在實驗中驗證了這一點。
5關于Discriminative neural clustering的近期工作
這一部分是作者團隊近期的工作,從前面的流程中,我們發(fā)現(xiàn),只有在聚類部分,即對提取的特征進行聚類部分,沒有采用神經(jīng)網(wǎng)絡方法,作者團隊在這一處進行了一些改進工作。傳統(tǒng)工作如k-means這種無監(jiān)督的方法,具有很多超參數(shù),這些超參數(shù)需要不斷調(diào)試,并且泛化性并不理想。
使有分類器模型進行聚類工作需要對聚類的所有可能性進行排列組合。比如一段語音中,涉及到A、B、C、D四個說話人,在聚類的場景下A、B、C、D都分別可能被當作四類中的任何一個,共有4!=24種排列組合。
說話人置換不變性訓練是一種常用的策略,相當于進行了label替換后的數(shù)據(jù)擴充。但這樣在說話人比較多的時候會導致數(shù)據(jù)擴充倍數(shù)過高而無法運算。
因為作者團隊提出的區(qū)分性神經(jīng)聚類算法使用了置換無關的損失函數(shù),而無需進行置換不變性訓練。通過強制按照說話人在語音流中出現(xiàn)的順序與聚類節(jié)點進行關聯(lián)。比如如下例子中所示。

?然而為了學習到這種前后特征相關的特征,需要大量的數(shù)據(jù),AMI中只有100多個會議,即100多個訓練樣本,這是不夠的。因此很重要的任務是,如何擴充數(shù)據(jù)集,作者團隊采用了三種數(shù)據(jù)集的擴充方法。
第一種是子會議的隨機化,即對一個大會議進行切分。第二種是輸入向量隨機化,對輸入的每一段的說話人身份進行變更,這樣輸入特征順序也會變化,然而并沒有破壞聚類學習的目標。第三種是Diaconis Augmentation,因為提取的特征是經(jīng)過L2正則化的,所以特征都分布在超球空間,經(jīng)過Diaconis Augmentation,相當于將超球空間進行了一個整體的旋轉(zhuǎn),這樣相對分布并沒有改變。
作者團隊經(jīng)過實驗,采用上述的方法以及不同的數(shù)據(jù)集擴充實驗,可以取得較好的結(jié)果。
6?Further discussions
作者關于diarisation的未來發(fā)展提出了以下幾點展望:
1、Discriminative neural clustering方法未來如何改進成端到端的模型。
2、CPD模塊(變更點檢測模塊)是否是必要的,因為當多個人同時說話的時候,并不好去定義變更點。
3、如何處理不確定人數(shù)上限的聚類。
4、說話人分割聚類和說話人的確認、辨認的關系。在實際的系統(tǒng)中,該如何去設計,如何取舍平衡。
*感謝雍洋同學對本次公開課內(nèi)容的整理,感謝張超博士后期對文稿的審核與修改。