iVector的初步了解

本篇主要解释我在学习ivector中遇到的一些比较困惑的点。在kaldi的nnet3中传统声学模型加上ivector已经成为online模型的标配。对于在线模型的特征提取,传统的方法采取全局和滑动窗的CMVN对输入特征进行归一化,而kaldi推荐的方案是使用ivector加上原始声学特征(参见论文A time delay neural network architecture for efficient modeling of long temporal contexts)。

supervector

超向量是一个比较重要的概念,在说话人识别和自适应中被广泛使用。对于一个GMM,一般将它的均值向量连接成的向量称为supervector。若特征维度为$F$,混合高斯数目为$C$,那么超向量的长度即为$F \times C$。它被认为包含了一个说话人相关的所有信息,后续要引出的本征音,联合因子分析(JFA)等方法也是从超向量的分解的角度来切入的。

UBM和MAP

在训练ivector的提取器之前,需要训练一个UBM,那么就产生了两个问题,UBM是什么以及UBM起到什么作用,UBM如何训练等等。

UBM翻译为统一背景模型,它是一个包含很多分量的GMM(文献中一般分量个数为2048)。在说话人识别任务中,如果我们对每一个说话人的特征用一个GMM来建模,那么,得到的一系列GMM就是说话人相关的。而UBM用来对说话人无关的信息进行建模。为什么需要说话人无关的模型呢?因为我们可以认为说话人相关的建模目标可以通过训练数据和一种适应方法修正UBM达到。而这种适应/调节方法称为MAP(最大后验概率),UBM在其中作为先验模型。最终得出的结论是,相比针对每一个说话人训练一个GMM,从一个好的UBM出发进行adaptation的方法表现的更好。

对于说话人数据${\mathbf{x}_1, \mathbf{x}_2, \cdots, \mathbf{x}_T}$,对于含有$C$个分量的UBM,观测$\mathbf{x}_i$来自第$c$个分量的概率记为:

由此可以得到每个分量的零阶,一阶和二阶统计量,分别记为:

MAP按照如下更新方法调整UBM中的统计参数(Bayesian adaptation):

其中

$r$一般在$C = 2048$时取16,$\beta$用来保证$\sum_{c = 1}^C\pi’_c = 1$。$\alpha_c$这个量用来表示UBM受新数据影响的程度。比如$\alpha_c \to 1$时,更新公式中原来的参数受到屏蔽,更多的依赖新一轮的统计信息,因而更加的偏向说话人相关的概率模型。

把adaptation得到的模型均值取出来进行拼接得到的超向量再加上一些后处理方法,比如cos距离或者SVM分类,就可以搭建最基本的说话人系统了。

supervector的分解

上面提到,既然supervector可以作为一个很好的说话人特征,那么就可以着手对其进行集中分析了。目前形成的体系是对说话人相关的超向量$\mathbf{s}$视为以下几个部分的叠加:

  1. 说话人/信道无关的分量
  2. 说话人相关的分量
  3. 信道相关的分量
  4. 其余动态分量

用公式可以表示为:

其中说话人/信道无关的分量可以用UBM的超向量来表示。对于剩下的三个分量的处理,目前形成的方法主要有本征音(Eigenvoice),本征信道(Eigenchannel),联合因子分析(JFA),ivector等几种方法,它们对应的分解形式如下:

  • Eigenvoice针对说话人信息

  • Eigenchannel针对信道信息

  • JFA结合了Eigenvoice和Eigenchannel

  • ivector将Eigenvoice和Eigenchannel两个空间合并为一个统一变化空间进行分析

$\mathbf{w}$即是传说中的ivector。我这里重点关注它和Engenvoice,一来是目前ivector已经被广泛应用,二是$\mathbf{T}$矩阵的训练和$\mathbf{V}$的训练过程相同,只需要将训练集合中的每个句子都视为不同的说话人即可。ivector这里也有如下几个疑问:

  1. $\mathbf{T}$矩阵如何训练
  2. $\mathbf{w}$如何计算
  3. ivector怎么用

ivector的计算

注:这部分没有加上说话人的下表$s$,在下一部分“$\mathbf{T}$矩阵的训练”中再添加下标。

ivector计算和训练过程中有这样的一个假设,即$\mathbf{w}$服从正态分布$\mathcal{N}(\mathbf{w}; \mathbf{0}, \mathbf{I})$,基于这个假设,可以得到如下如下推论:

$\mathbf{w}$在说话人数据$\mathcal{X}$上满足高斯分布,即 $p(\mathbf{w}|\mathcal{X}) = \mathcal{N}(\mathbf{w}|\mathbf{L}^{-1}\mathbf{T}^T\mathbf{\Sigma}^{-1}\mathbf{F}, \mathbf{L}^{-1})$,其中:

用$\mathbf{N}_{c}, \mathbf{F}_{c}$表示数据集合$\mathcal{X}$上第c个分量的零阶和归一化的一阶统计量:

$\mu_c,\Sigma_c$为UBM中第$c$个分量的均值和方差。那么$\mathbf{N}, \mathbf{F}$表示为:

$\mathbf{\Sigma}$定义为:

$\mathbf{T}$是需要训练的,它的维度是$CF \times R$,因而计算出来的$\mathbf{L}$维度为$R \times R$。要计算的ivector就是分布$p(\mathbf{w}|\mathcal{X})$的均值,加上说话人下标$s$,写成:

$\mathbf{w}_s$的维度为$R \times 1$。分布$p(\mathbf{w}|\mathcal{X})$的均值和方差是如何得出的?它的处理思路是这样的,应用贝叶斯公式可以将该条件分布写成:

$p(\mathcal{X} | \mathbf{w})$也是可以推出的,由此就可以得到现在看到的$\mathbf{w}$的分布结果了。所以在训练出$\mathbf{T}$矩阵之后,就可以求出所谓的ivector了。

T矩阵的训练

在ivector中$\mathbf{T}$矩阵的训练过程和JFA以及Eigenvoice里面的$\mathbf{V}$矩阵的训练过程类似。训练过程如下:

  • E步:
  • M步:

参考文献

  • Speaker recognition by machines and humans A tutorial review
  • Comparison of background normalization methods for text-independent speaker verification
  • Eigenvoice modeling with sparse training data
  • Front-End Factor Analysis forSpeaker Verification
  • Speaker recognition by machines and humans A tutorial review