用對比學習訓練說話人初步驗證模型

做者|OngKoonHan
編譯|Flin
來源|towardsdatascience 安全

在我大學的Android開發課程的組項目部分中,咱們的團隊構建並部署了一個認證系統,經過說話人的語音配置文件進行認證。網絡

在我上一篇文章(請參閱下一部分)描述了語音認證系統的高級體系結構以後,本文將深刻探討所使用的深度學習模型的開發過程。架構

我之前的文章能夠在這裏找到(一個帶有移動部署的初級語音認證系統)。機器學習

在這篇簡短的文章中,我將描述開發語音認證模型所涉及的不一樣階段,並討論在學習過程當中遇到的一些問題。性能

這是文章的概述:學習

  • 問題陳述
  • 高級模型設計
  • 數據預處理
  • 對比學習語音編碼器
  • 身份驗證的二進制分類器
  • 模型表現

問題陳述

在開始以前,咱們須要弄清楚咱們是如何試圖構建語音認證問題的。測試

語音認證主要有兩種方式(廣義地說):說話人識別和說話人驗證。這兩種方法雖然密切相關,但在比較兩種系統的相關安全風險時,它們將致使兩個系統具備大相徑庭的特性。優化

問題定義:ui

說話人識別:n分類任務:給定一個輸入語音,從n個已知說話人(類)中找出正確的說話人。編碼

說話人驗證:二元分類任務:給定一個聲明身份的說話者的輸入話語,肯定該聲明身份是否正確。

咱們能夠看到,在說話人識別中,咱們假設給定的輸入話語屬於咱們已經認識的說話人(也許是辦公環境),咱們試圖從n個已知的說話人(類)中選出最匹配的。

相反,在說話人驗證中,咱們假設咱們不知道給定輸入話語屬於誰(事實上咱們不須要知道)。咱們關心的是給定的一對輸入話語是否來自同一我的。

準確地說,從整個說話人驗證系統的角度來看,系統「知道」說話人聲稱本身是「已知」的人,而從模型的角度來看,模型只接收一對語音樣本並判斷它們是否來自同一我的。

想象一下使用一個常規的用戶名和密碼認證系統。系統知道你聲稱是誰(用戶名),並檢索參考密碼的存儲副本。然而,密碼檢查器只檢查參考密碼是否與輸入密碼匹配,並將驗證結果返回給驗證系統。

在此項目中,語音身份驗證問題被構造爲說話者驗證問題。

旁白

在這一點上,值得注意的是,還有另外一種類型的語音分析問題,稱爲說話人分類(Speaker Diarisation),它試圖分離出多人同時講話的源信號。

說話人分類涉及多人同時講話的場景(想象一下在兩張盡是人的桌子之間放一個麥克風),咱們試圖分離出每個獨特的說話人的語音音頻波形。這可能須要多個麥克風從不一樣的角度捕捉同一場景,或者只須要一個麥克風(最困難的問題)。

咱們能夠看到這會變得很是複雜。一個例子是識別在給定對話的錄音中誰在講話。在試圖給說話人起名字(說話人識別)以前,必須先分離對話中每一個人的語音信號(說話人分類)。固然,存在混合方法,這是一個活躍的研究領域。

高級模型設計

轉換數據以進行遷移學習—對於這個任務,我但願儘量地利用遷移學習,以免本身構建一個複雜而高效的模型。

爲了實現這一目標,語音音頻信號被轉換成相似某種圖像的聲譜圖。將音頻轉換爲聲譜圖後,我即可以使用PyTorch中可用的任何流行圖像模型,例如MobileNetV2,DenseNet等。


其中一個演講者的聲譜圖

過後,我意識到我可使用基於小波變換(WT)的方法來代替基於傅立葉變換變換(FT)的Melspectrogram來得到「更清晰」的光譜圖圖像。

Youtube視頻中的一個演示(https://youtu.be/g8MfWGibjT8) 比較了心臟心電信號的小波變換和傅立葉變換在「圖像質量」上的差別,結果代表,小波變換獲得的聲譜圖在視覺上比傅立葉變換更「清晰」。

對比學習的槓桿做用:你們都熟悉的對比學習的經典例子是使用三重態損失的設置。此設置每次編碼3個樣本:參考樣本、正樣本和負樣本(2個候選樣本)。目標是減少參考樣本和正樣本之間編碼向量的距離,同時增長參考樣本和負樣本之間編碼向量的距離。

在個人方法中,我不想將候選樣本的數量限制在2個。相反,我使用了一種相似於SimCLR(Chen等人,2020)的方法,即便用多個候選樣本,其中一個樣本是正樣本。而後「對比分類器」被迫從一堆候選樣本中選出正樣本。

兩階段遷移學習法:爲了解決說話人驗證問題,咱們將分兩個階段訓練模型。

首先,經過對比學習對說話人語音編碼器進行訓練。如前所述,對比學習將涉及多個候選樣本,而不是一般的三重態損失設置的正負對。

其次,在預先訓練好的語音編碼器上訓練二元分類器。這將容許語音編碼器在用於此傳輸學習任務(二進制分類器)以前單獨進行訓練。

數據預處理

VoxCeleb1數據集:爲了訓練模型識別說話人的語音配置文件(不管他/她說了什麼),我選擇使用VoxCeleb1公共數據集。

VoxCeleb1數據集包含多個揚聲器在野外的音頻片斷,也就是說,這些揚聲器在「天然」或「常規」設置下講話。對數據集中的演講者進行訪談,並對數據集中的音頻片斷進行管理,使每一個片斷都包含演講者正在談話的訪談片斷。

這個數據集包含了每一個說話人在不一樣的訪談設置下的多個訪談,而且使用了不一樣類型的設備,這給了我但願語音認證系統配合使用的可變性。

對於這個項目,只使用音頻數據(視頻數據可用)。還有其餘的認證系統試圖合併多種數據模式(好比視頻和音頻結合起來,以檢測語音是否在現場生成),但我認爲這超出了個人項目範圍。

音頻波形到聲譜圖:爲了可以利用流行的圖像模型架構,語音音頻信號被轉換成相似某種圖像的聲譜圖。

首先,未來自同一揚聲器的多個短音頻樣本組合成一個長音頻樣本。因爲mel譜圖是基於短時傅里葉變換(STFT)的,所以能夠將整個長音頻樣本一次性轉換成mel譜圖,並從長譜圖中獲得更小的譜片。

因爲長音頻樣本是由單個惟一說話人的較小音頻樣本組成的,所以從長樣本中提取片斷應該會迫使模型專一於從每一個單獨說話的人的語音配置文件中找出獨特的特徵。

來自一個揚聲器的串聯音頻樣本:

接下來,使用LibROSA(Librosa)庫將長音頻樣本轉換爲頻譜圖。如下是使用的關鍵參數:

  • Target sampling rate(目標採樣率): 22050
  • STFT window: 2048
  • STFT hop length: 512
  • Mels: 128

而後將功率譜轉換爲對數級的分貝。由於咱們是用圖像網絡分析的,因此咱們但願光譜圖中的「images」特徵稍微均勻分佈。


一個揚聲器的混音譜圖

建立「images」:採樣是經過從長光譜圖中分割較小的光譜圖來完成的。

光譜圖「images」建立爲128x128x3陣列,格式爲RGB圖像。在長譜圖上隨機選取一個起始點,對每一個新切片滑動半步(128/2=64),獲得三個128×128的譜圖切片。而後用[-1,1]之間的最大絕對值對「images」進行標準化。

最初,我複製同一個光譜片3次,將「灰度」圖像轉換爲「RGB」圖像。然而,我決定將更多的信息打包到每一個光譜圖「images」中,爲每一個「RGB」圖像放入3個稍有不一樣的切片,由於這3個通道不像普通RGB圖像那樣具備一般的含義。使用這種滑動技術後,性能彷佛略有改善。

對比學習語音編碼器

數據採樣 —— 如下是用於語音編碼器對比學習的數據採樣的一些詳細信息。
[**頻譜圖切片將稱爲「圖像」]

對於每一個時期,將200個(總共1,000個)隨機全長頻譜圖加載到內存中(「子樣本」)(因爲資源限制,並不是全部1000個全長頻譜圖均可以一次加載)。

每行使用1個參考樣本和5個候選樣本。候選圖像包含4個負樣本和一個正樣本(隨機混洗),而且圖像是從子樣本中隨機生成的。

每一個時期有2,000行,批大小爲15(MobileNetV2)和6(DenseNet121)。

多暹羅編碼器網絡 — 對於編碼器網絡,使用的基本模型是MobileNetV2和DenseNet121。編碼器層大小爲128(取代基本模型中的Imagenet分類器)。

爲了便於對比學習,創建了一個多連體編碼器模型包裝器做爲torch模塊。該包裝器對每一個圖像使用相同的編碼器,方便了參考圖像和候選圖像之間的餘弦類似性計算。

對比損失+類內方差減小——兩個目標,對比損失和方差減小,連續最小化(因爲資源限制,理想狀況下,兩個目標的損失應相加並最小化)。每1批計算對比損失,每2批進行方差縮減(類內MSE)。

對於對比損失,該問題被描述爲一個n分類問題,模型試圖從全部候選對象中識別出正樣本。針對參考編碼計算全部候選編碼的餘弦類似度,並根據餘弦類似度產生的機率計算一個softmax。根據通常的n-分類問題,交叉熵損失最小。

對於類內方差減小,目的是未來自同一類的圖像在編碼空間中推近。對來自同一類/同一說話人的圖像進行採樣,計算平均編碼矢量。編碼的MSE損失根據平均值(類內方差)計算,而且在反向傳播以前,MSE損失按0.20進行縮放。

身份驗證的二進制分類器

數據採樣 —— 如下是用於說話人驗證二進制分類器的數據採樣的一些詳細信息。

對於每一個時期,將200個(總共1,000個)隨機全長頻譜圖加載到內存中(「子樣本」)(因爲資源限制,並不是能夠一次加載全部1,000個全長頻譜圖)。

對於每一個參考圖像,將生成2張測試圖像,其中1張爲正圖像,1張爲負圖像。對於每一個參考圖像,這將產生2對/行,真實對(正)和假冒者對(負)。

圖像是從子樣本中隨機生成的。每一個時期有4,000行,而且批大小爲320(MobileNetV2和DenseNet121)。

驗證二進制分類器網絡 —— 底層編碼器網絡是來自對比學習步驟的預訓練編碼器網絡,在訓練過程當中權重被凍結。

二進制分類器設置爲暹羅網絡,其中計算了來自輸入對的編碼矢量的絕對差。而後,將二元分類器構建在絕對差別層之上。

模型訓練

學習率循環:循環學習率可提升對比學習步驟和二元分類器步驟中的模型準確性。

使用了torch.optim.lr_scheduler.CyclicLR(),其步長(默認)爲2000,循環模式(默認)爲「Triangular」,沒有動量循環(Adam優化器)。

學習率的範圍以下:

  • 具備對比學習功能的語音編碼器: 0.0001至0.001
  • 基本分類器: 0.0001至0.01

模型表現

不出所料,模型性能不如最新模型。我認爲,促成因素是:

  • 聲譜圖不是我本可使用的最佳信號轉換。基於小波變換的方法可能會產生更多高質量的聲譜圖「圖像」。
  • 使用的基本圖像模型不是最新的模型,由於我沒法在中等大小的GPU(3GB VRAM)上使用超大型模型。也許像ResNet或ResNeXt這樣更強大的模型可能會產生更好的結果。
  • 僅使用了一個語音數據集(VoxCeleb1)。確定可使用大量和各類各樣的數據(但遺憾的是,最後期限迫在眉睫)。

如下是可比模型的均等錯誤率(EER):

  • 我最好的模型EER 19.74%(VoxCeleb)
  • Le and Odobez (2018), Best model from scratch EER 10.31% (VoxCeleb)
  • Jung, et. al. (2017), EER 7.61% (RSR2015 dataset)

其餘調查結果

基本模型大小:使用更大的基本模型提升了分類性能(MobileNetV2 vs DenseNet121)。

類內方差減小的效果:類內方差減小提升了兩個基本模型的分類性能。事實上,通過方差縮減的mobilenetw2的性能提升到了與DenseNet121至關的水平。

ROC(左)和DET(右)曲線

下面是使用MobileNetV2和DenseNet121的二元分類分數分佈[P(is_genuine)],包括帶/不帶方差減小。

MobileNetV2基本模型-不帶/帶方差減小(左/右):

DenseNet121基本模型-不帶/帶方差減小(左/右):

參考文獻

Chen, T., Kornblith, S., Norouzi, M. and Hinton, G., 2020. A simple framework for contrastive learning of visual representations. arXiv preprint arXiv:2002.05709

Jung, J., Heo, H., Yang, I., Yoon, S., Shim, H. and Yu, H., 2017, December. D-vector based speaker verification system using Raw Waveform CNN. In 2017 International Seminar on Artificial Intelligence, Networking and Information Technology (ANIT 2017). Atlantis Press.

Le, N. and Odobez, J.M., 2018, September. Robust and Discriminative Speaker Embedding via Intra-Class Distance Variance Regularization. In Interspeech (pp. 2257–2261).

原文連接:https://towardsdatascience.co...

歡迎關注磐創AI博客站:
http://panchuang.net/

sklearn機器學習中文官方文檔:
http://sklearn123.com/

歡迎關注磐創博客資源彙總站:
http://docs.panchuang.net/

相關文章
相關標籤/搜索