人工智能:语音识别理解与实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

6.1 DNN-HMM混合系统

6.1.1 结构

在第4章中描述的DNN不能直接为语音信号建模,因为语音数字信号是时序连续信号,而DNN需要固定大小的输入。为了在语音识别中利用DNN的强分类能力,我们需要找到一种方法来处理语音信号长度变化的问题。

在ASR中结合人工神经网络(ANN)和HMM的方法始于20世纪80年代末和20世纪90年代初。那时提出了各种各样不同的结构及训练算法(参见文献[213])。最近随着DNN很强的表现学习能力被广泛熟知,这类研究正在慢慢复苏。

其中一种方法的有效性已经被广泛证实。它就是如图6-1所示的DNNHMM混合系统。在这个框架中,HMM用来描述语音信号的动态变化,观察特征的概率则通过DNN来估计。HMM对语音信号的序列特性进行建模,DNN对所有聚类后的状态(聚类后的三音素状态)的似然度进行建模[214]。这里对时间上的不同点采用同样的DNN。在给定声学观察特征的条件下,我们用DNN的每个输出节点来估计连续密度HMM的某个状态的后验概率。除了DNN内在的鉴别性属性,DNN-HMM还有两个额外的好处:训练过程可以使用维特比算法,解码通常也非常高效。

图6-1  DNN-HMM混合系统的结构

在20世纪90年代中叶,这种混合模型就已被提出,在大词汇连续语音别系统中,它被认为是一种非常有前景的技术。在文献[215-217]中,它被称为ANN-HMM混合模型。在早期基于混合模型方法的研究中,通常使用上下文无关的音素状态作为ANN训练的标注信息,并且只用于小词汇任务。ANN-HMM随后被扩展到为上下文相关的音素建模[218],并用于中型和大词表的自动语音识别任务[219]。在ANN-HMM的应用中也包括循环神经网络的架构。

然而,在早期基于上下文相关的ANN-HMM混合构架[218]研究中,对上下文相关因素的后验概率建模为

或者

其中,xt是在t时刻的声学观察值,cj是聚类后的上下文种类{c1, …, cJ}中的一种,si是一个上下文无关的音素或音素中的状态。ANN用来估计p(si|xt)和p(ci|sj, xt)(或者可以说是p(ci|xt)及p(si|cj, xt))。尽管这些上下文相关的ANN-HMM模型在一些任务中性能优于GMMHMM,但其改善并不大。

这些早期的混合模型有一些重要的局限性。例如,由于计算能力的限制,人们很少使用拥有两个以上隐层的ANN模型,而且上述的上下文相关模型不能够利用很多在GMM-HMM框架下很有效的技术。

最近的技术发展[12, 13, 211, 220-222]表明,如下改变可以使我们获得重大的识别性能提升:把传统的浅层神经网络替换成深层(可选择的预训练)神经网络;使用聚类后的状态(绑定后的三音素状态)代替单音素状态作为神经网络的输出单元。这种改善后的ANN-HMM混合模型被称为CD-DNN-HMM[12]。直接为聚类后的状态建模带来其他两个好处:第一,在实现一个CD-DNN-HMM系统的时候,对已存在的CD-GMM-HMM系统修改最小。第二,既然DNN输出单元可以直接反映性能的改善,那么任何在CD-GMM-HMM系统中模型单元的改善(例如跨词三音素模型)同样可以适用于CD-DNN-HMM系统。

在CD-DNN-HMM中,对于所有的状态s∈[1, S],我们只训练一个完整的DNN来估计状态的后验概率p(qt=s|xt)。这和传统的GMM是不同的,因为在GMM框架下,我们会使用其多个不同的GMM对不同的状态建模。除此之外,典型的DNN输入不是单一的一帧,而是一个2ϖ+1(如9~13)帧大小的窗口特征xt=[omax(0, t−ϖ)…otomin(T, t+ϖ)],这使得相邻帧的信息可以被有效地利用。

6.1.2 用CD-DNN-HMM解码

在解码过程中,既然HMM需要似然度p(xt|qt),而不是后验概率,我们就需要把后验概率转为似然度:

p(xt|qt=s)=p(qt=s|xt)p(xt)/p(s)  (6.3)

其中,是从训练集中统计的每个状态(聚类后的状态)的先验概率,Ts是标记属于状态s的帧数,T是总帧数。p(xt)是与字词序列无关的,计算时可以忽略,这样就得到了一个经过缩放的似然度。尽管在一些条件下除以先验概率p(s)可能不能改善识别率,但是它在缓解标注不平衡问题中是非常重要的,特别是在训练语句中包含很长的静音段时就更是如此。

总之,在CD-DNN-HMM解码出的字词序列由以下公式确定:

其中,p(w)是语言模型(LM)概率,以及

是声学模型(AM)概率,其中,p(qt|xt)由DNN计算得出,p(qt)是状态先验概率,π(q0)和分别是初始状态概率和状态转移概率,各自都由HMM决定。和GMM-HMM中的类似,语言模型权重系数λ通常被用于平衡声学和语言模型得分。最终的解码路径由以下公式确定:

6.1.3 CD-DNN-HMM的训练过程

我们可以使用嵌入的维特比算法来训练CD-DNN-HMM,主要的步骤总结见算法6.1。

CD-DNN-HMM包含三个组成部分:一个深层神经网络dnn、一个隐马尔可夫模型hmm,以及一个状态先验概率分布prior。由于CD-DNN-HMM系统和GMM-HMM系统共享音素绑定结构,所以训练CD-DNN-HMM的第一步就是使用训练数据训练一个GMM-HMM系统。因为DNN训练标注是由GMM-HMM系统采用维特比算法产生得到的,而且标注的质量会影响DNN系统的性能。因此,训练一个好的GMM-HMM系统作为初始模型就非常重要。

一旦训练好GMM-HMM模型hmm0,我们就可以创建一个从状态名字到senoneID的映射。这个从状态到senoneID的映射(stateTosenoneIDMap)的建立并不简单。这是因为每个逻辑三音素HMM都是由经过聚类后的一系列物理三音素HMM代表的。换句话说,若干逻辑三音素可能映射到相同的物理三音素,每个物理三音素都拥有若干(例如3)绑定的状态(用senones表示)。

使用已经训练好的GMM-HMM模型hmm0,我们可以在训练数据上采用维特比算法生成一个状态层面的强制对齐,利用stateTosenoneIDMap,我们能够把其中的状态名转变为senoneIDs。然后可以生成从特征到senoneID的映射对(featuresenoneIDPairs)来训练DNN。相同的featuresenoneIDPairs也被用来估计senone先验概率。

利用GMM-HMM模型hmm0,我们也可以生成一个新的隐马尔可夫模型hmm,其中包含和hmm0相同的状态转移概率,以便在DNN-HMM系统中使用。一个简单的方法是把hmm0中的每个GMM(即每个senone的模型)都用一个(假的)一维单高斯代替。高斯模型的方差(或者说精度)是无所谓的,它可以被设置成任意的正整数(例如,总是设置成1),均值被设置为其对应的senoneID。应用这个技巧之后,计算每个senone的后验概率就等价于从DNN的输出向量中查表,找到索引是senoneID的输出项(对数概率)。

在这个过程中,我们假定一个CD-GMM-HMM存在,并被用于生成senone对齐。在这种情况下,用于对三音素状态聚类的决策树也是在GMM-HMM训练的过程中被构建的。但这其实不是必需的,如果我们想完全去除图中的GMM-HMM步骤,则可以通过均匀地把每个句子分段(称为flat-start)来构建一个单高斯模型,并使用这个信息作为训练标注。这可以形成一个单音素DNN-HMM,我们可以用它重新对句子进行对齐,然后可以对每个单音素都估计一个单高斯模型,并采用传统方法构建决策树。事实上,这种无须GMM的CD-DNN-HMM是能够被成功训练的,这一成果最近被发表在文献[223]中。

对含有T帧的句子,嵌入的维特比训练算法最小化交叉熵的平均值,等价于负的对数似然

如果新模型(W′, b′)相比旧模型(W, b)在训练准则上有改进,我们就有

对每个对齐后的句子的分数为

换句话讲,新的模型不仅能提高帧一级的交叉熵,而且能够提高给定字词序列的句子似然分数。这里证明了嵌入式的维特比训练算法的正确性。文献[224]中给出了另一个不同的验证嵌入式维特比训练算法有效性的说明。值得一提的是,在这个训练过程中,尽管所有竞争词的分数和总体上是下降的,但并不保证每个竞争词的分数都会下降。而且,上述说法(提高句子似然度)虽然一般来说是正确的,但并不保证对每个单独的句子都正确。如果平均的交叉熵改善很小,尤其是当这个很小的改善来自对静音段更好的建模的时候,识别准确度可能降低。一个更合理的训练CD-DNN-HMM方法是使用“序列鉴别性训练准则”,我们将在第15章讨论这个方法。

6.1.4 上下文窗口的影响

如我们在6.1.1节提到的,使用一个窗(典型的是9帧到13帧)包含的全部帧特征作为CD-DNN-HMM的输入可以实现优异的性能。显然,使用一个长的窗口帧,DNN模型可以利用相邻帧信息。引入相邻帧,DNN也可以对不同特征帧之间的相互关系进行建模,这样就部分缓和了传统的HMM无法满足观察值独立性假设的问题。

每个字词序列的分数通过以下公式得到:

其中,T是特征的长度,N≤T是状态序列的长度,sn是状态序列中的第n个状态,qt是在t时刻的状态,tn是第n个状态的起始时间。这里假设状态时长可以用一个马尔可夫链[1]来模拟。注意,观察值分数表示在给定状态sn的情况下,观察到的特征段的对数似然概率,它可被用于基于分段的模型[225]。在HMM中,假设每个特征帧都与其他特征帧条件独立,因此

我们知道这个假设在真实世界中是不成立的,对给定相同的状态,既然相邻的帧是互相关的[2],为了对帧之间的相关性建模,那么段的分数应该被估计为

我们知道,如果两帧相隔太远(例如超过M帧),它们可以被认为不相关。在这个条件下,以上分数能够近似地被表示为

其中,c是一个与sn不相关的常量,M帧拼接而成的特征向量。我们假设状态先验概率和观察值不相关,可以看到在DNN模型中引入邻接帧(例如:估计),我们可以更加准确地估计段分数,同时可以有效地利用HMM中独立的假设。