使用i-Vector的流程

1 预处理 Preprocessing

  1. 预加重,因为人的生理结构特点,高频部分会被压住。
  2. 分帧(Frame),一般每一帧都是25ms,移帧10ms。
  3. 分窗口,因为需要保持边缘的平滑性,常用汉明窗算法。
  4. 端点检测,因为有些地方没有声音的需要被处理。

通常使用25ms每一帧,10ms的移帧,汉明窗算法。

2 特征提取 Feature Extraction

  1. 可以用MFCC等方法对每一帧提取出一个向量存起来。通常使用的维度: 40或者60. 太短了特征不够明显,太长了运算时间会很长。

一般输入多个背景帧的MFCC特征向量(10个帧,前面5个后面5个),这样能捕捉更多信息。

3 训练i-vector提取器

3.1 使用GMM-UBM得到baum-welch统计量

GMM-UBM.png

UBM(通用背景模型)来弥补目标说话人语音数据不足的特点,收集大量其他说话人的数据进行宽泛的语音特征提取,属于speaker-independent。理解:经过UBM能够有一个先入为主的印象,知道自己是要去抓取语音而不是发动机的声音。
UBM本质上也是一个GMM.

  1. 将别人说话的数据的mfcc输入GMM-UBM,训练, 提出每一个高斯分型中的均值放进同一个向量中,被称作均值超矢量 m。
  2. 目标说话人的MFCC向量输入GMM-UBM,在原有的UBM的基础上通过MAP算法自适应得到目标说话人的GMM参数 M.
  3. 由于之后要使用EM算法,那么一些Bauw-welch一阶统计量在此处要被计算出来
    N_{c}(s) = \sum_t\gamma_t(c)
    \gamma_t(c) = \frac{\pi_cp_c(Y_t)}{\sum_{j=1}^C\pi_jp_j(Y_t)}
    意思是,在每一时刻t,\gamma_t(c)\gamma_t对每一个高斯分量c的状态占有率,也就是在t时刻\gamma_t落入c高斯分量的后验分布。而N_c(s)意思就是给定说话人s落入高斯模型c的占有率。
    还有一些其他的统计量,也根据公式可以算出来,但是这些统计量中间,比如\pi就是从GMM之中来。

3.2 用DNN 来得到baum-welch 统计量

Deep Neural Networks for extracting Baum-Welch statistics for Speaker
Recognition:因为DNN可以处理更多的输入(300ms),能够使用邻间的信息,所以DNN可能会更好。

  1. 输入 25ms/frame,移帧10ms, 背景10个帧,前面5个后面5个。
  2. 一共7层,输出为softmax,5个隐藏层使用sigmoid。

有人使用了40维度的filter-bank 和15帧,得到了更大的提升

4 提取 i-vector: M = m + T\omega

直观的理解:M 是高维度目标说话人的语音特征向量,将它投影在子空间来降维,所以就把多余的因素剔除掉(因子分析),得到维度较低的\omega\omega 包括了整个训练语音中不同说话人信息的差异和不同信道的差异。\omega就是 i-vector.
写出一个计算性的代码:

  1. M, m 都是从之前提取出来的均值超矢量,代入原式。
  2. 写一个EM算法,T 迭代收敛。先随机产生一个T的初始值,然后得到 \omega的后验,再重新更新T,不断迭代优化参数。这个过程类似K-means不断迭代直到最后分类中的质心不再发生变动。
  3. T估算完毕,代入公式中,此时M, m, T都知道,根据上面的公式计算出 \omega的后验 = i-vector。

5 关于UBM的细节问题

如果我们想要弄清楚一段语音样本Y是不是来自说话人S,那么有两个假设:
H_0: Y 来自说话人S
H_1: Y 不来自说话人S
所以似然度(Likelihood Ratio LR):
LR = \frac{p(Y|H_0)}{p(Y|H_1)}
log(LR) = log(p(Y|H_0)) - log(p(Y|H_1))
LR > \theta\theta是一个阈值时,我们接受H_0, 否则接受 H_1。为了拿到H_1的背景数据,我们使用UBM来采用不同说话人的语音数据来训练。

混合密度.png

所以对于一系列观测值来说:

使用UBM的流程分为两个方面:

  1. 根据UBM训练出一个GMM
  2. 将GMM使用MAP算法适应到目标说话人。
    在MAP中,因为第一步的训练中需要使用到EM算法,当前步骤只需要让MAP从已经有的EM算法得到的参数开始进行收敛。只需要改变均值mean即可,不需要改变方差。因此更新公式为:
    MAP.png

    直观的理解:当\mu_k^{UBM}越大,意味着我们越依赖先验(像工作的时候越是依赖以前的经验)。

6 GMM细节

GMM由K个高斯模型组成,概率密度如下:
p(x) = \sum_{k=1}^Kp(k)p(x|k) = \sum^{K}_{k=1}\pi_kN(x|\mu_k, \sum_k)
其中,p(x|k) = N(x|\mu_k, \sum_k)是第k个高斯模型的概率密度函数,是选定第k个模型后,产生x的概率,也就是发射概率。p(k) = \pi_k是第k个高斯模型的权重,称作选择第k个的先验概率。

引用参考

  1. 详解EM算法与混合高斯模型(Gaussian mixture model, GMM) https://blog.csdn.net/lin_limin/article/details/81048411
  2. MLE,EM,MAP 三种算法对比和理解https://blog.csdn.net/zjm750617105/article/details/52696006
  3. Speaker Verification using Gaussian Mixture Model (GMM-UBM
    https://maelfabien.github.io/machinelearning/Speech1/#
  4. Gaussian Mixture Models Explained
    https://towardsdatascience.com/gaussian-mixture-models-explained-6986aaf5a95
  5. 什么是汉明窗?加Hanmming窗的作用?
    https://www.cnblogs.com/lxy2017/p/4049124.html
  6. 声纹识别之I-Vector
    https://blog.csdn.net/weixin_38206214/article/details/81096092
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。