一、Abstract
这篇论文是07年的《A Straightforward and Efficient Implementation of the Factor Analysis Model for Speaker Verification》,当时还没有提出i-vector,但在作者提出的这种Hybrid domain session compensation中暗含了信道总变化因子的思想。本篇paper主要讲了这么两件事:
- 作者实现了一个简单明确的算法用来估计
i-vector
,也就是用在计算i-vector
特征信道的MAP计算中; - 基于标准的GMM似然计算中提出了一个与众不同的补偿均值超向量
supervectors
的方案:是通过一个SVM分类器来补偿均值超向量;
总体来说,这篇paper为你提供了一个训练i-vector
的算法和一个i-vector
前身的一些思路。
二、Introduction
在Introduction中除了怼一下前人的方法有多么垃圾,再次强调一下自己的算法有多么多么高效:
-
提出的了一个简洁直接的算法减少因子分析的计算量;
-
提出了一种新的补偿方案,就是在处理特定句子影响中,不需要按照像《Speaker Verifiction Using Adapted Gaussian Mixture Models》中所用的得分规整,也就是在对每个说话人的GMM中进行的似然函数计算可以直接通过SVM分类器;
三、对语音变化性建模
作者给捋了一下思路,就是一个说话人的模型应该包含三个部分:
- a speaker-session independent compoment
- a speaker dependent component
- a session dependent component
作为一个数学渣渣,对于component分析的技术,还在学习,推荐看一本书,也是我在实验室偶然之间翻到的《独立成分分析》,这是一种ICA技术,也是因子分析中最重要的技术。
回到这篇论文,OK,在估计i-vector
中主要是计算特征信道的MAP,我们用个公式来描述一下上面的三个部分是怎么组装在一起,分别代表了什么,整个公式计算的是一句话的所有信息,因为在论文《Front-End Factor Analysis for Speaker Verification》中,我也对这篇经典之作写了一下自己的感想,参见论文 |《Front-End Factor Analysis for Speaker Verification》,i-vector假设的是所有语音都有不同说话人产生,那么会对提取每一句话的i-vector:
m ( h , s ) = m + D y s + U x ( h , s ) m_{(h,s)} = m + Dy_{s} + Ux_{(h,s)} m(h,s)=m+Dys+Ux(h,s)
我们知道,UBM得到的就是一个GMM均值超向量GMM mean supervector
,它是由GMM均值向量合并而成,维度大小是M x D
,具体UBM方面如何计算和思想参见 论文 |《Speaker Verifiction Using Adapted Gaussian Mixture Models》。
-
M
:这个大的GMM有M
个混合成分; -
D
:代表语音所提取的升学特征的维度,比如39维MFCC特征; -
(h,s)
:代表说话人s
的第h
句话; -
m ( h , s ) m_{(h,s)} m(h,s):代表session-speaker dependent supervector mean;特定说话人
s
在说特定语音h
的超值均向量; -
m
:就是UBM得到的就是一个GMM均值超向量GMM mean supervector
,UBM主要是估计参数 θ = ( m , Σ , α ) \theta=({m,\Sigma,\alpha}) θ=(m,Σ,α), 维度大小是M x D
,对应第一个成分; -
D
: 是MD X MD
大小的对角矩阵,满足 I = τ D t Σ − 1 D I=\tau D^{t}\Sigma^{-1}D I=τDtΣ−1D, τ \tau τ是在标准MAP计算中的一个相关因子, D t D D^{t}D DtD是一个后验协方差矩阵; -
y s y_{s} ys:大小是
M X D
,代表说话人向量;它和D
构成了第二个成分 -
U U U: 是在低维
R
上的信道总变化矩阵,大小是M X D X R
,这里的R
就是i-vector的维度,在kaldi中常常取400维; -
x ( h , s ) x_{(h,s)} x(h,s):也就是i-vector,是
R
维的向量,事实上, x ( h , s ) x_{(h,s)} x(h,s)并不依赖于具体说话人;它和 U U U构成了第三个成分;
其中, x ( h , s ) x_{(h,s)} x(h,s)和 y s y_{s} ys这两个因子服从 N ( 0 , I ) \mathcal N(0,I) N(0,I)分布。
这部分就是又回忆了一下i-vector
的公式长啥样,怕大家后面计算又忘了。
四、因子分析模型中的Striaghtforward
具体实现
本文中的因子分析模型主要估计三个部分:
-
总体估计,其实就是对通过已知UBM的估计,计算一些零阶和一阶统计量,服务于对隐变量( x ( h , s ) x_{(h,s)} x(h,s)和 y s y_{s} ys这两个因子)和矩阵
U(低维
R上的信道总变化矩阵)
进行估计; -
隐变量估计( x ( h , s ) x_{(h,s)} x(h,s)和 y s y_{s} ys这两个因子);
-
矩阵
U(低维
R上的信道总变化矩阵)
估计;
下面分别介绍一下,前方有一大波公式:
1. 总体估计
对于一个句子或者一个说话人有M
维的混合成分,那么对于说话人和句子本身我们计算得到两个零阶统计量,大小为M x 1
的向量:
M
维的特定说话人相关的统计量(每个说话人都用M
维的GMM表示,GMM对每个说话人说的所有话的响应度): N s [ g ] = Σ t ∈ s γ g ( t ) N_{s}[g]=\Sigma_{t\in s}\gamma_{g}(t) Ns[g]=Σt∈sγg(t);
-
Σ t ∈ s \Sigma_{t\in s} Σt∈s:表示说话人
s
说的所有的话加在一起,也就是总帧数,t
表示总帧数中的其中一帧; -
γ g ( t ) \gamma_{g}(t) γg(t):在观测时刻t上,在第
g
个高斯成分上的后验概率,也就是在当前模型参数下第t
个观测数据来自第g
个分模型的概率,称为分模型g
对观测时刻t
的响应度;
M
维的特定句子相关的统计量(特定说话人s
说的特定句子h
也就是该说话人说的每一句都用M
维的GMM表示,GMM对每个说话人的每一句话的响应度): N ( h , s ) [ g ] = Σ t ∈ ( h , s ) γ g ( t ) N_{(h,s)}[g]=\Sigma_{t\in (h,s)}\gamma_{g}(t) N(h,s)[g]=Σt∈(h,s)γg