一、语音识别方法(3)

一、语音识别方法(3)

1 解码器

前文提到过,在语音识别任务中,通常其目的在于根据特征帧序列 X = { x 1 , x 2 , . . . , x T } X=\{x_1,x_2,...,x_T\} X={x1,x2,...,xT},来穷举出所有可能的Token序列 W W W,以获取后验概率最大的序列 W ∗ = { w 1 , w 2 , . . . , w N } W^*=\{w_1,w_2,...,w_N\} W={w1,w2,...,wN},即:
W ∗ = a r g m a x P ( W ∣ X ) W^*=argmaxP(W|X) W=argmaxP(WX)
因此我们的最终任务是找出使得 P ( W ∣ X ) = P ( X ∣ W ) P ( W ) P(W|X)=P(X|W)P(W) P(WX)=P(XW)P(W)最大的 W W W。此时语音识别可看做是一个搜索任务,搜索出后验概率最大的序列,该过程也被称之为 解码。常借助加权有限状态转换器(Weighted Finite State Transducer,WFST)进行最优路径搜索。

WFST 由状态节点和对应边组成,每条边上有对应的输入符号 x x x、输出符号 y y y、权重 w w w,表现形式为 [ x : y / w ] [x:y/w] [x:y/w],其中权重可定义为概率(越大越好)或惩罚(越小越好)。其中一条完整的路径必须包括起始状态和结束状态,将该路径上所有的权重累加起来,即为该路径的分数。

对于ASR系统中的声学模型、语言模型等各部分,可通过WFST的合并操作(Compose)简化为单一的WFST静态图搜索,从而简化ASR的解码过程,并通过优化搜索路径来提高搜索效率。

  1. 对于语言模型:

    将n-gram模型表示为WFST,记为G。由于每个句子由词组成,故输入与输出符号均为词,权重由语言模型中的概率值转化而来。

  2. 对于发音词典:

    将发音词典表示为WFST,记为L。每个词由音素组成,输入为音素序列(phone),输出为词(word)。

  3. 对于上下文关系:

    将其表示为WFST时,记为C,输入为三音素序列(Triphone),输出为音素序列。

  4. 对于HMM模型:

    同样将其表示为WFST,记为H,输入为Senone序列,输出为三音素(Triphone)

在上述WFST中,输入和输出指的是走完整个路径后该WFST的输入输出,而非单一一条边的输入输出。从HMM到语言模型,每个WFST的输出都是后者的输入,因此可将其简化融合(Composition)为一个WFST,来实现从Senone到Triphone、phone、word以及Sentence的过程。该过程就是解码

需要注意的是,WFST的融合是从大到小的过程,即先融合G和L,再依次融合C、H。每次融合时都需先进行确定化(Determinisation)和最小化(Minimisation)操作。确定化负责确保给定某个输入符号后,对应的输出符号唯一;最小化负责将WFST转化为一个节点和边更少的等价WFST,因此该融合过程可表示为:
H C L G = m i n ( d e t ( H ∘ m i n ( d e t ( C ∘ m i n ( d e t ( L ∘ G ) ) ) ) ) ) HCLG=min(det(H\circ min(det(C \circ min(det(L \circ G)))))) HCLG=min(det(Hmin(det(Cmin(det(LG))))))

1.min:最小化 2.det:确定化 3. ∘ \circ :融合(Composition)

因为HMM已在解码图中,因此在最终解码时,只需GMM或DNN,即可提高HCLG进行解码。具体流程如下:

  • 给定语音特征序列 X X X,可通过GMM或DNN计算出三音素HMM的发射概率 P ( x i ∣ s j ) P(x_i|s_j) P(xisj)
  • 借助HCLG可轻松计算出 P ( W ∣ X ) ∝ P ( X ∣ W ) P ( W ) P(W|X)\propto P(X|W)P(W) P(WX)P(XW)P(W),将 W W W路径上的权重(惩罚)进行累加,再减去各状态针对输入的发射概率获得最终得分,得分越小说明语音序列 X X X转录为 W W W的可能性越大。
  • 由于HCLG中权重固定,不同的 P ( x i ∣ s j ) P(x_i|s_j) P(xisj)会导致HCLG中相同的 W W W路径存在不同的得分,通过比较这些得分,可以找出其中的最优路径,该路径对应的 W W W即为最终解码成果。

2 端到端结构

从上述内容中可以看出,传统的语音识别方案依赖声学模型、语言模型以及解码方案等多种模块,训练步骤也很繁琐,常常需要先通过GMM获得帧级标签,再训练多轮模型进行求解。因此引入深度学习端到端方案,通过直接输入音频和对应文本内容来训练模型,一步到位。

目前基于深度学习的语音识别方案主要分为以下几个阶段:

  • 传统HMM框架:将GMM-HMM方案替换为DNN-HMM方案,使用区分性训练的思想将其转化为分类任务,通过DNN来计算HMM的发射概率
  • 脱离HMM框架:采用CTC损失函数+文本来作为标签去训练模型,再结合语言模型实现音频到文本的输出,其中CTC损失由于假设标签之前互相独立,因此该方案不包含上下文信息进行监督。
  • 纯端到端方案:常用方案是采用Transformer-transducer模型,包含一个输入编码器和一个标签编码器模块,其中输入编码器(transformer结构)负责对输入频谱特征进行编码以获得高维特征表示,标签编码器(LSTM)负责对文本embedding进行编码,将二者进行结合输入关联网络,获取音频-标签、标签-标签映射。最后通过RNN-T loss进行训练。这里与CTC loss不同,RNN-T loss在包含了标签-标签的信息。

对于端到端模型,其重点在于输入输出序列的不定长问题。

对于输入序列,通常做法是将不同长度的数据序列转为固定维度的向量序列,根据输入方式的不同存在两种不同的处理方法:

  • 当序列一次性批量输入时,常采用CNN通过控制池化层尺度来保证不同输入转化成相同的维度
  • 当序列分帧逐次输入时,则是采用RNN来将历史信息汇总在最后以固定维度输出。这两种方法常用于基于注意力的网络结构。

对于输出序列,同样分为两种情况:

  • 输入长度不做处理时,真实输出长度要远小于输入长度,此时输出长度要与输入长度保持匹配,常通过引入空白标签对序列进行填充,以保证序列匹配。这是CTC损失函数常用的方法,但不适合真实输出长度大于输入长度的情况
  • 将输入序列处理成长度固定的向量序列,也就是上面提到的基于CNN或注意力机制的方法,然后通过该固定向量解码出文本序列,此时由于输出长度没有参照,需要引入结束符标签等其他机制帮助判断是否结束输出。

上述基于CTC损失函数和注意力机制的深度学习方法可以合用,这种端到端方法成功将声学模型和语言模型融为一体,是当下语音识别的主要方向。

你可能感兴趣的:(语音识别,人工智能)