天天看點

說話人識别中的資料預處理和資料增強

資料預處理

  • 假設已經采集到一些資料,在進行訓練之前,需要先對資料做以下預處理:
    • 資料清洗
    • 語音檢測(Voice Activity Detection,VAD,也叫Speech Detection,或Silence Suppression,靜音抑制)
    • 特征提取與标準化(Normalization,注意要和歸一化、正則化等說法區分)
    • 資料分組

資料清洗

  • 目的是提高資料的正确性,關于資料的正确性,可參考說話人識别的資料需求
  • 出現資料錯誤,有以下原因
    • 錄音裝置故障,得到破損的音頻檔案
    • 人工操作失誤,導緻錄制了純噪聲
    • 标簽反轉
  • 可以進行人工清洗,或自動化清洗。人工清洗對于标簽反轉是不可行的,而且效率低
  • 對于前兩種錯誤,可以采用以下自動化清洗辦法
    • 使用信噪比(Signal-to-noise Ratio,SNR)估計算法,例如:WADA-SNR,去除信噪比很低的音頻
    • 使用VAD算法,去除無法觸發VAD的音頻
    • 使用語音識别(ASR)算法,去除文字結果為空,或者置信度很低的音頻
  • 對于第三種錯誤,可采用自監督清洗,步驟如下:
    1. 先使用,已經去除前兩種錯誤的資料,訓練一個初始的說話人識别模型
    2. 利用初始的說話人識别模型,為資料中的每一個說話人,計算一個說話人的中心點,關于說話人的中心點,可參考說話人識别中的損失函數
    3. 如果某個說話人的音頻,距離該說話人的中心點非常遙遠,那麼這個音頻可能是标簽反轉噪聲,需要去除
  • 自監督清洗有利有弊,優點在于效率高,缺點在于可能去除了困難樣本

語音檢測(VAD)

  • 在一段音頻中,可能包含語音、靜默和噪聲,如下圖所示:
    說話人識别中的資料預處理和資料增強
  • 使用一個預訓練好的VAD模型,去除靜默和噪聲的部分。VAD模型是對每一幀的二分類,去除那些分類為0的幀即可
    說話人識别中的資料預處理和資料增強

特征提取與标準化

  • 特征提取是指從音頻中提取出MFCC、LFBE或PLP這樣的特征
  • 問題在于,應該在什麼階段進行特征提取,有兩種做法:
    1. 離線特征提取
      • 在訓練之前,把資料集中,所有音頻的特征提取出來,儲存到硬碟上
      • 訓練時,直接讀取這些特征,而不需要讀取音頻檔案
      • 優點:
        • 提取出的特征可重複使用
        • 容易debug
      • 缺點:需要大量的額外硬碟空間
    2. 線上特征提取
      • 訓練時,直接讀取音頻檔案,再提取特征
      • 特征提取變為訓練的一部分
      • 優點:不需要額外的硬碟空間
      • 缺點:
        • 每次訓練,特征提取都需要重複計算
        • 訓練過程變慢,消耗變大
        • 不容易debug
  • 标準化是指對提取出的特征減均值,除标準差,使其均值為0,方差為1。還可以進一步操作,限制數值範圍為 [ 0 , 1 ] [0,1] [0,1],或 [ − 1 , 1 ] [-1,1] [−1,1]
    • 限制為 [ 0 , 1 ] [0,1] [0,1]:
      • 找出特征的最大值 x m a x x_{max} xmax​和最小值 x m i n x_{min} xmin​
      • 對特征 x ∈ [ x m i n , x m a x ] x \in [x_{min},x_{max}] x∈[xmin​,xmax​]進行變換

        x = x − x m i n x m a x − x m i n x=\frac{x-x_{min}}{x_{max}-x_{min}} x=xmax​−xmin​x−xmin​​

      • 進而 x ∈ [ 0 , 1 ] x \in [0,1] x∈[0,1]
    • 限制為 [ − 1 , 1 ] [-1,1] [−1,1]:
      • 找出特征的最大值 x m a x x_{max} xmax​,假定 x ≥ 0 x \ge 0 x≥0
      • 對特征 x ∈ [ 0 , x m a x ] x \in [0,x_{max}] x∈[0,xmax​]進行變換

        x = x − x m a x / 2 x m a x / 2 x=\frac{x-x_{max}/2}{x_{max}/2} x=xmax​/2x−xmax​/2​

      • 進而 x ∈ [ − 1 , 1 ] x \in [-1,1] x∈[−1,1]
  • 問題在于,為什麼要這麼做?深度學習開始蓬勃的第一篇文章AlexNet也對資料集裡的每一張圖檔減均值,除标準差,經典的 m e a n = [ 0.485 , 0.456 , 0.406 ] , s t d = [ 0.229 , 0.224 , 0.225 ] mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225]就是從ImageNet中統計出來的
  • 原因在于:
    • 提取出的特征,其數值範圍是不受控制的
    • 神經網絡的參數初始化,常常會采用高斯分布
    • 如果不進行标準化,特征的數值範圍與參數的數值範圍差距太大,會導緻收斂速度極慢

資料分組

  • 這是使用廣義端到端損失函數,訓練說話人識别模型的獨有步驟,關于廣義端到端損失函數,可參考說話人識别中的損失函數
  • 訓練神經網絡時,需要把資料打包成一個一個batch,而說話人識别的batch,應該包含:
    • 多個說話人,數量記為 N N N
    • 每個說話人應具有相同的話語個數,記為 M M M
    • batch的次元為 N × M N \times M N×M
  • 為了提高在訓練過程中,從硬碟讀取檔案,構造batch的速度,需要對資料進行分組
  • 高效的分組如下圖所示,也就是按照batch中每個說話人應具有的話語個數進行分組,此時 M = 4 M=4 M=4
    說話人識别中的資料預處理和資料增強
  • 即使在資料集中,每個說話人具有超過4個話語,也要按照上圖的方式進行資料分組。每個說話人具有的多于4個的那部分話語,用于構造另一個batch

資料增強

  • 資料的來源一般為資料采集和資料增強,資料增強是自動化、高效、低廉的資料産生方法,而且能提高資料的多樣性
  • 資料增強技術,一開始在計算機視覺領域得到非常普遍的應用,如下圖所示:
    說話人識别中的資料預處理和資料增強
  • 資料增強是基于原始資料的,上圖中對原始的小狗圖像進行了圖像旋轉、圖像裁剪、顔色空間變換、添加噪聲等操作,資料增強後,圖像的标簽不會變化,仍然是小狗,但是資料量變為原來的6倍,并且資料多樣性提高了
  • 說話人識别領域中,資料增強包括
    • 時域增強(WavAugment)
    • 檢測擾動(Detection Perturbation)
    • 時頻譜增強(SpecAugment)
    • 語音合成增強(Synth2Aug)

時域增強

  • 常見的時域增強,包括:
    • 音量:直接将整個信号乘以某個常數
    • 采樣率:對信号進行重采樣,比如:将16000Hz信号重采樣至8000Hz,以模拟有線電話的語音信号
    • 語速:将音頻的速度乘以某個在1附近的常數,比如:0.9、1.1
    • 音高:随機偏移音頻的基頻
    • 編碼格式:将線性脈沖編碼的音頻,重新編碼為MP3、Opus等格式
  • 說話人識别中有一個比較重大的挑戰——魯棒說話人識别,也就是說希望說話人識别模型,對不同的聲學環境也具備較高的性能
  • 不同的聲學環境包括:
    • 安靜的環境
    • 有多種背景噪聲的環境
    • 帶有房間混響的環境
  • 為了讓訓練資料覆寫更多的聲學環境,需要多風格訓練(Multistyle Training,MTR)技術
  • 假設我們需要下面的資料:
    • 100個說話人
    • 每個說話人具有10個話語
    • 每個說話人在1000種不同的背景噪聲下的話語
    • 每個說話人在10種不同的房間混響下的話語
  • 隻通過資料采集産生上面要求的資料,需要的采集次數是 100 × 10 × 1000 × 100 = 1 , 0000 , 0000 100 \times 10 \times 1000 \times 100=1,0000,0000 100×10×1000×100=1,0000,0000,需要一億采集,這是不可接受的
  • 采用資料增強的方式産生資料:
    1. 使用一組參數描述一個房間,由于房間大多為立方體,是以可以用長度、寬度和高度來描述
    2. 确定信号源的位置,和錄音裝置的位置,可以用它們在房間中的立體坐标來描述
    3. 使用房間沖擊響應(Room Impulse Response,RIR)的公式來描述該房間内,錄音裝置接受信号源的情況,包括:
      • 信号源直線傳播,到達錄音裝置
      • 信号源沿其他方向傳播,反射到錄音裝置
        說話人識别中的資料預處理和資料增強
        說話人識别中的資料預處理和資料增強
  • 背景噪聲和房間混響的數學形式:
    • 信号源記為 x ( t ) x(t) x(t),對應的RIR記為 h s ( t ) h_s(t) hs​(t)
    • M M M個噪聲源記為 n i ( t ) n_i(t) ni​(t),對應的RIR記為 h i ( t ) h_i(t) hi​(t)
    • 假設還有一個加性的(Additive)的噪聲源,記為 d ( t ) d(t) d(t)
    • 增強後的信号記為 x r ( t ) x_r(t) xr​(t)

      x r ( t ) = x ( t ) ∗ h s ( t ) + ∑ i = 1 M n i ( t ) ∗ h i ( t ) + d ( t ) x_r(t)=x(t)*h_s(t)+\sum_{i=1}^{M}n_i(t)*h_i(t)+d(t) xr​(t)=x(t)∗hs​(t)+i=1∑M​ni​(t)∗hi​(t)+d(t)

      其中, ∗ * ∗号表示卷積運算

  • 根據公式,我們可以:
    • 分别采集語音信号、噪聲信号和RIR
    • 代入公式中,得到多種組合
    • 通過權重,調整信噪比
  • 相比起直接采集一億個信号,我們隻需要采集 100 × 10 + 1000 + 100 = 2100 100 \times 10 + 1000 + 100=2100 100×10+1000+100=2100個信号,然後采用多風格訓練即可

檢測擾動

  • 在訓練時,我們到底是把資料中的哪一部分喂給模型呢?
    • 對于文本相關的說話人識别,資料需要先通過關鍵詞檢出(Keyword spotting,KWS)模型,得到關鍵詞片段
    • 對于文本無關的說話人識别,資料需要先通過VAD模型,得到語音片段
      說話人識别中的資料預處理和資料增強
  • 如果在訓練時采用的KWS/VAD模型,與運作時采用的KWS/VAD模型不一緻,就會導緻說話人識别模型的性能下降
  • 為了減少說話人識别模型,對特定KWS/VAD模型的依賴,我們可以采用檢測擾動的資料增強方法,包括:
    • 随機偏移KWS/VAD模型的輸出
    • 随機擾動KWS/VAD模型的門檻值
      說話人識别中的資料預處理和資料增強

時頻譜增強

  • 上面介紹的兩種方法都是基于時域的,也就是說,是應用于波形圖的,而時頻譜增強則是應用于特征提取之後的時頻譜圖的
  • 時頻譜增強的做法有三種,如下圖所示,左上角是原始資料
    • 時域規整(Time Warping):在原始時頻譜圖上標明一個時間點,将時間點左邊的部分進行擠壓,右邊的部分進行拉伸。如左下角所示
    • 頻域遮掩(Frequency Masking):将原始時頻譜圖,特定頻率範圍内所有的值,替換成原始時頻譜圖的均值。如右上角所示
    • 時域遮掩(Time Masking):将原始時頻譜圖,特定時間範圍内所有的值,替換成原始時頻譜圖的均值。如右下角所示
      說話人識别中的資料預處理和資料增強
  • 優點
    • 實作簡單,計算代價小
    • 實作效率高,可用于線上特征提取,不需要用額外的硬碟空間存儲
    • 實驗表明,時頻譜增強對語音類任務,性能提升明顯
  • 注意,對标準化後的時頻譜圖,遮掩時隻需要全部替換成0即可。實際上,标準化後的時頻譜圖,其均值為0

語音合成增強

  • 根據說話人識别的資料需求,我們要求資料:
    • 說話人的多樣性
    • 文本的多樣性
    • 錄音裝置和聲學環境的多樣性
  • 上述的時頻域增強和時域增強,提高了錄音裝置和聲學環境的多樣性。那麼對于說話人和文本的多樣性,就需要用到語音合成增強方法
  • 語音合成增強的核心在于,利用多說話人語音合成模型,輸入說話人嵌入碼和文本内容,就能合成對應的語音
    說話人識别中的資料預處理和資料增強
  • 關于多說話人語音合成模型,可參考Sample Efficient Adaptive Text-to-Speech
  • 語音合成增強本質上是一個領域自适應問題:
    • 有足夠的源領域語音資料
    • 不足的目标領域語音資料
    • 有足夠的目标領域文本資料
  • 解決方案是:利用源領域的語音和文本資料,合成目标領域的語音資料。合成的資料并不是真正的目标領域資料,而是一種近似(Proxy)資料
    說話人識别中的資料預處理和資料增強

繼續閱讀