誰在說話?淺談 Speaker Diarization 「語者自動分段標記」


:
: 明明就 Yvette 林畇劭Yun-Shao Lin 
: 專業知識演算法

題材/架構:博士生 林畇劭

作者:特約編輯 明明就 Yvette

目錄

  • 語音活性檢測(Speech/Voice Activity Detection, SAD/VAD)
  • 分割(Segmentation)
  • 聚類(Clustering)
  • 再分割(resegmentation)

有沒有想過人類如何能從一段語音中聽出有幾個說話者,他們又分別說了什麽?人的大腦可以輕而易舉地做到,但是要教會電腦做這件事就需要費一番波折。

「語者自動化標記」,即說話者分辨(speaker diarization),就是用來解決這個問題的,它可以從一段語音中辨識説話者以及他們說話的片段。

其實 speaker diarization 早已有之,過去主要是作為 ASR 的前處理部分(更多關於 ASR 的介紹請看自動語音辨識 ASR 的前世今生)。而後, speaker diarization 在語音導航、檢索和更高階人機互動應用中,逐漸成為關鍵技術。

現今,不同的應用場景所面臨到的不同問題,促進了 speaker diarization 的不同發展。例如在上世紀 90 年代末至本世紀初期,新聞廣播業界用 speaker diarization 自動注釋每天在全世界範圍內傳播的電視和廣播節目;2002 年起,隨著歐盟 M4、AMI 等一些相關的項目成立,會議方面的 speaker diarization 需求猛烈增加,關於多峰態(在會議情境中就是有多個說話者)的語音資料的識別的研究也相應增多了。

簡單來說,speaker diarization 可以從一段語音中,識別出是誰在說話,他/她又說了些什麽。

那麽 speaker diarization 是如何實現的呢?


圖一  speaker diarization 的流程[1]

試想現在有記錄某次會議的一段音頻材料,材料裏有幾個與會人的聲音交替出現,中間可能夾雜著背景音、噪音,但是我們只想關注當中有人說話的片段而已。所以首先,我們要從該材料中提取有人說話的語音信號,而去除背景噪聲信號和靜音信號,以利後續處理。這個前處理步驟,我們稱之為語音活性檢測(Speech/Voice Activity Detection, SAD/VAD)

VAD包含以下兩個主要步驟[2]

  1. 對語音幀做特徵提取
    常用的特徵像是全頻帶和子頻帶的能量(full-band and subband energies)[3]、語音和背景噪音的頻譜分散度量(spectrum divergence measures)[4]基音預測(pitch estimation)[5]過零率(zero crossing rate)[6]高階統計量(higher-order statistics)[7][8][9]語境信息(contextual information)[10]等。
  2. 判斷該幀是話音還是噪音
    對於一個特徵向量 x" role="presentation" style="font-size: 113%; position: relative;">,默認話音和噪音可以疊加,那麽有兩個假設:

    上述的判斷問題即可轉化爲比較後驗概率 P(H|x)" role="presentation" style="font-size: 113%; position: relative;">大小的問題:


進行 VAD 以後,該音頻材料只留下有人說話的語音片段了。下一步是將它根據說話者轉化點進行切割,使得每一小語音段落從聲學訊息上看是同一個說話者說的,這個步驟叫分割(Segmentation)

分割的實現主要是通過滑窗的方式,取相鄰的兩個segment計算差異度,再與閾值比較,如果相鄰的兩segment差異度大於閾值,那就判斷前後兩段的說話者不同。


圖二  d-vector(左)和x-vector(右)[1:1]

計算之前需要先提取segment的說話人特徵,常見的表徵方法有[11]

  • i-vector(identity vector)
    i-vector是基於GMM-UBM所訓練的説話人的聲學特徵。

    高斯混合模型(Gaussian mixture models, GMM)是利用多個高斯分佈來加權擬合一個分佈,可以平滑地表達任意形狀的密度分佈,但同時也表示參數會隨著高斯分佈的增加而增加,實作上需要更多的數據才能有效訓練一個 GMM 模型。

    而通用背景模型(universal background model, UBM)是用很多不同說話者的聲音資料預先訓練好的 GMM 模型,可以減少訓練目標說話人的 GMM 所需的語音資料,所以 GMM-UBM 算是對 GMM 的一種改進。

    每一個高斯分佈 c 都有參數:


    經驗發現,取 GMM 中的平均向量拼接而成的超向量(或稱均值超向量)對一位說話者的表徵效果最佳,超矢量表達式如下:

      一個 GMM-UBM 的超向量參數就表達為:

      其中,m0為 UBM 的超向量,T 是表徵不同説話人和説話環境的變化矩陣,w 是隱變量,也就是i-vector。

  • d-vector[12]
      比起 GMM 這樣常規的因素分析模型(Factor Analysis model),Ehsan Variani等人想到用深度學習網絡(deep neural network, DNN)訓練一個分類器,如圖二(a)所示,以每一幀語音資料作爲輸入,輸出為該語音幀說話者的概率向量,維度就是說話者的數量。d-vector 是取DNN模型的最後一個隱藏層來作説話人向量。

  • x-vector[13]
      Snyder等人提出了利用 TDNN 提取説話人特徵,網絡拓撲如圖二(b)所示,將 frame level 的隱藏層通過 statistic pool 映射到 segment level。取statistic pool之後的隱藏層作表徵向量x-vector,即圖中的embedding a和b。不考慮最後一層,因爲最後一層與說話者數量相關,泛化性不高。

上述提取說話者的特徵也稱爲 speaker embedding,它是說話者識別(speaker identification)的基礎,後者是在前者的基礎上再聚類識別的。

根據所提取的説話人特徵向量,我們就能計算差異度(也稱兩個segment的距離)了。主要的度量方式有以下幾種[14][15]

  • the Bayesian Information Criterion(BIC)[16]

    假設一段語音可以被表示為 個 d 維的向量
    符合高斯分佈 xiN(μi,σi),其中μ是平均值向量,σ是共變異數向量。
    用假說檢定,我們可以推論得出這段語音中是否有說話者的轉換。
    設虛無假設 H0 為該語音段内無説話者轉換,則 個向量應該都符合同一個分佈;而對立假設 H則認為該語音段有說話者轉換,所以到 i 止的向量符合一個分佈,第 至第 個向量符合另一個分佈。
      表示如下:
    H0:x1...xNN(μ,σ)

    H1:x1...xiN(μ1,σ2);xi+1...xNN(μ2,σ2)

    兩個假設的 BIC 值表示為

    BIC(i)=R(i)λP
      其中,R(i為最大似然比,表示為 R(i)=Nlog|σ|N1log|σ1|N2log|σ2,懲罰係數 λ=為懲罰項



    若在該段語音中有一幀 的BIC值大於0,表示該處有説說話者的轉換。
    由於懲罰項的設置會大大影響模型,也不一定適合每一種情景,所以後續有一些改進的算法,像是懲罰項自適應的 modified BIC criterion[16:1]或將模型整體的懲罰項一同考慮的其他變式[17]。但總體上,基於BIC的差異度度量計算量還是比較大的。

  • Generalized Likelihood Ratio(GLR)[14:1]
    GLR 和 BIC 類似,是基於假説檢定的算法,不過BIC是移動時間點 i,而 GLR 是以兩個固定長度的語音段做説話者轉換偵測。GLR測量距離的式子如下


    x和 x2 分別是兩段相鄰的語音的幀向量,當 越小,兩段語音越可能是不同的説話者説的。
    這個方法的缺點是閾值比較難定義。

  • Kullback-Leibler divergence(KL)[18]
    也稱相對交叉熵,數值上等於以分佈 A 的編碼方式對分佈 B 進行編碼所產生的額外的編碼率,是基於訊息理論的一種量度,用來衡量兩個概率分佈的差異情況[19]
    要描述一個系統A所含的資訊量,我們通常用夏農熵(Shannon entropy),它計算 A 中各個事件的資訊量(self-information)的期望值,定義為




    其中,EA⟩ 表示求以 為目標分佈的期望值,PA為事件A的概率;logbPAi 是要表示事件 Ai i所需的編碼個數,當 b=2 時,單位為bit;當 b=e 時,單位為 nat;當 b=10 時,單位為Hart[20]
    兩個分佈的KL散度定義為

    KL(A;B)=EAlnPAlnPB
    =EAlnPBEAlnPA

    其中,
    EAlnPB  AB 兩個概率分佈的交叉熵 EAlnPB=iPAilnPBi

    KL值越大表示分佈 
    和分佈 的差異越大。在speaker diarization中,我們就可以用兩個segment分別在特徵向量中的分佈的KL散度來衡量兩個segment的差異。

    然而,KL散度不具有對稱性:KL(A;B) 和 KL(B;A) 不一樣,我們希望 A、B 之間的差異不管是從A算還是從B算都要是一樣的。所以有改進版 KL2表示為

    KL2(A;B)=KL(A;B)+KL(B;A)

  • Information Change Rate(ICR)[21]
    顧名思義,ICR 度量的是若將兩段合爲一段所需改變的訊息量,以各語音段的特徵的平均對數似然度來表徵,表示如下




    中  M是兩段語音的幀數或是兩個類的特徵數,X是兩個段語音合成以後的特徵表達。顯然,合併不同說話者的語音比合併同一說話者的語音增加更多的熵,實作中也是根據 IC R值是否超過閾值來判斷說話者轉換的。

    ICR 的計算量小,且 ICR 受特徵量的影響較小,因而更加能適應不同語音來源(更robust)。

得到很多的語音小片段之後,我們需要知道那些片段是同一個人講的,哪些是另一位與會者講的。由於不同的人聲學特徵不一樣,根據聲學訊息,我們就能將分散的語音片段聚類,一名說話者對應一類,從而標注出每個片段的說話者,這個處理過程就是聚類(Clustering)


圖三  聚類方法和流程[14:2]

一般是通過計算語音小片段的相似度,進而迭代做層次聚類(Hierarchical clustering)的[15:1]。主要分爲自頂向下、自底向上兩種,前者步驟如下:

  1. 將所有語音段看成一個群集,訓練出説話者模型
  2. 計算當前各群集的群内散度
  3. 將散度大於閾值的群集再分割
  4. 重複2至4,直至所有語音段都被分好了類

自頂向下的做法容易有overfit的情況,在Johnson, S.和Woodland, P的論文中有實現[22],但是比較少用到。

自底向上(agglomerative hierarchical clustering, AHC)的步驟則是:

  1. 初始化將每個語音段都看作是不同説話者
  2. 兩兩類計算相似度
  3. 將距離最小的類歸爲一類,更新説話者模型
  4. 重複2至4,直至類別兩兩距離都大於閾值

自底向上的做法容易有underfit的情況,常見的演算法有CURE[23]、ROCK[24]和CHAMELEON[25]

最後會有再分割(resegmentation)[26]步驟進行修正。分割之後,可能結果會有一些錯誤,例如,在VAD階段拿掉的non-speech語音段可能包含說話者的轉換,導致分割的時候沒有辨識出該轉換點,而將實際上有兩個說話者的語音片段看成只有一個說話者。一般,再分割是引入一個HMM模型來擬合說話者的過渡[26:1],然後重複整個流程。

至此,speaker diarization的流程就依次包含VAD、segmentation、clustering、resegmetation,如圖一所示。下一篇將介紹 speaker diarization的近期發展

參考資料


  1. A review on speaker diarization systems and approaches ↩︎ ↩︎

  2. Voice Activity Detection. Fundamentals and Speech Recognition System Robustness ↩︎

  3. Robust voice activity detection algorithm for estimating noise spectrum ↩︎

  4. Speech pause detection for noise spectrum estimation by tracking power envelope dynamics ↩︎

  5. Voice activity detection using a periodicity measure ↩︎

  6. Robust voice activity detection using higher-order statistics in the LPC residual domain ↩︎

  7. Speech/Non-speech Discrimination based on Contextual Information Integrated Bispectrum LRT ↩︎

  8. Statistical Voice Activity Detection Based on Integrated Bispectrum Likelihood Ratio Tests ↩︎

  9. Generalized LRT-based voice activity detector ↩︎

  10. An Effective Subband OSF-based VAD with Noise Reduction for Robust Speech Recognition ↩︎

  11. Deep learning methods in speaker recognition: a review ↩︎

  12. Deep neural networks for small footprint text-dependent speaker verification ↩︎

  13. Deep neural networks for small footprint text-dependent speaker verification ↩︎

  14. Speaker diarization: A review of recent research ↩︎ ↩︎ ↩︎

  15. 錄音資料中的語者切割與分群(Speaker Segmentation and Clustering for the Recorded Speech)[In Chinese] ↩︎ ↩︎

  16. Speaker, environment and channel change detection and clustering via the bayesian information criterion ↩︎ ↩︎

  17. Robust Speaker Change Detection ↩︎

  18. Automatic segmentation, classification and clustering of broadcast news audio ↩︎

  19. KL距離,Kullback-Leibler Divergence 淺談KL散度 ↩︎

  20. 熵 (資訊理論) ↩︎

  21. A robust stopping criterion for agglomerative hierarchical clustering in a speaker diarization system ↩︎

  22. Speaker Clustering Using Direct Maximisation of the MLLR-Adapted Likelihood ↩︎

  23. Cure: an efficient clustering algorithm for large databases ↩︎

  24. Rock: A robust clustering algorithm for categorical attributes ↩︎

  25. Chameleon: hierarchical clustering using dynamic modeling ↩︎

  26. Diarization resegmentation in the factor analysis subspace ↩︎ ↩︎

Back