Chapter5_Speaker_Verification

本文爲李弘毅老師【Speaker Verification】的課程筆記,課程視頻youtube地址,點這裏👈(需翻牆)。

下文中用到的圖片均來自於李宏毅老師的PPT,若有侵權,必定刪除。

文章索引:

上篇 - 4-2 More than Tacotron

下篇 - 6 Vocoder

總目錄

1 Task Introduction

在之前的課程當中已經講過了語音轉文字,文字轉語音,語音轉語音這幾個,這次要來講一下語音轉類別。也就是給語音分類。
ch5-1

與語音轉類別相關的任務有情感識別,語音事件檢測,自閉識別,關鍵詞識別等等,這些技術都是大同小異,今天主要來講一下【語者驗證】。
ch5-2

語者驗證指的就是輸入兩段語音,輸出這兩段語音是同一個人說出來的概率。有一個應用場景就是【銀行客服】。當我們第一次打電話給銀行或者去銀行的時候,客服會把我們的聲音記錄下來,然後當我們下一次再打電話給銀行的時候,銀行就可以比對以下這次的聲音和之前的聲音是否都是我們說出的,如果不是的話,就需要額外的驗證手續了。在判斷是否爲同一個語者發出的聲音時,會人爲設置一個threshold,大於該值則爲同一個人說的,否則不是。threshold的大小可以根據場景需求設置。
ch5-3
不難想象,只要我們的threshold取的不同,模型的正確率也就會不同。那麼,我們如何來評價這個模型的好壞呢?有一個指標叫做Equal Error Rate(EER),EER指的就是下圖中,橙色斜線與藍色曲折線的交點值大小。橙色的線就是一條斜率爲1的直線,藍色的線是我們在取不同大小的threshold時,代表模型結果的FP和FN的值的位置。FP指的是不同語者被判斷成同一個語者的概率,FN指的是同一語者被判斷成不同語者的概率。如果藍色的線和橙色的線的交點值越小,那麼模型越好。
ch5-4

2 模型架構

整個模型從框架上來說,其實並不複雜。模型就是一個可以抽取語音中語者信息的網絡,然後輸入一段語音之後,就可以吐出這段語音對應的語者信息向量,也成爲speaker embedding。整個過程可以分爲三個階段:

  • 訓練模型:
    找一個有多個人說話的數據集,然後把這些語音放到模型裏去訓練,得到一個得以抽取說話人語者信息的模型。用來訓練的數據集一般會比較大。谷歌的非公開數據集有18000個語者說的3600萬條語音。這個真的是非常大了,我們沒法得到這樣的數據集。目前的公開數據集,可以使用VoxCeleb或者VoxCeleb2。這些公開的數據集,就比谷歌的數據集要小很多啦。
  • 錄入模板音
    把說話人第一次說話的聲音錄入下來,輸入模型中,講吐出的語者信息向量作爲模板存放起來
  • 對比聲音
    把新加入的聲音輸入模型當中,得到語者信息向量,將其與之前存放起來的模板進行相似度的計算,判斷是否是同一人說的
    ch5-5

3 模型介紹

3.1 i-vector

i-vector不是深度學習的模型。李老師說,這個模型可以說是語音界最後一個被深度學習打敗的模型,在16年左右,還是比深度學習的模型效果好的。這個模型這裏不做介紹,它就是一個不管輸入多長的語音,都可以吐出一個400維的向量的模型。
ch5-6

3.2 d-vector

d-vector是14年提出的一個和i-vector效果差不多的深度學習模型。差不多就是說還沒有i-vector好。它的思想很簡單,在訓練的時候,就是截取語音中的一小段之後,把這段放到DNN裏去訓練,最後輸出這段話是哪個人說的。訓練結束之後,倒數第二層的feature就是我們要的speaker embedding了。
ch5-8
在實際預測的時候,我們的輸入語音是不等長的,因此d-vector會把語音截成多段,然後取這幾段特徵的平均值作爲最後的speaker embedding。
ch5-7

3.3 x-vector

x-vector是d-vector的升級版,它在訓練的時候,就考慮了整段聲音信號的信息。它會把每一小段的聲音信號輸出的特徵,算一個mean和variance,然後concat起來,再放進一個DNN裏去來判斷是哪個說話人說的。其他的部分和d-vector一致。
ch5-9

當然,今天我們再來看的時候,會把DNN直接換成RNN就可以了。

3.4 more

除了以上講到的這幾種方法之外,還有很多其他的方法,比如加入了attention的,又比如NetNLAD等等。這裏不細講這些方法,這些方法的框架都是一樣的,只不過模型內部有所改變。想了解的同學可以直接看文獻。
ch5-10

4 End to End

以上說到的方法,都是train一個speaker recoganition的模型,然後拿它的特徵來做相似度的計算。其實相似度計算這部分,也可以直接放進模型裏去訓練,做成一個end-to-end的模型。我們的數據集還是和之前的一樣,有一堆多個speaker說的話,我們知道每句話是哪個speaker說的。再end-to-end訓練的時候,我們會把k段同一個人A說的話放進模型裏,得到一個平均之後的特徵,然後再從數據集中抽取一段A說的話,作爲正樣本,抽取一段非A說的話,作爲負樣本,然後也輸入模型得到一個特徵。兩個特徵做相似度的計算,希望正樣本下的score越高越好,負樣本下的score越低越好。
ch5-11
這種做法也可以分爲text-dependent和text-independent。text-dependent就是輸入的語音所說的話是固定,知道的。text-independent就是輸入的話是隨機的。在text-independent的時候,我們可以在抽出來的特徵這裏加一個discriminator用來做語音轉文字。我們的模型就是要試圖去騙過這個discriminator,兩者共同進步。這個也是很多地方都用到的一個方法。
ch5-12

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章