前文提到过,在语音识别任务中,通常其目的在于根据特征帧序列 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(W∣X)
因此我们的最终任务是找出使得 P ( W ∣ X ) = P ( X ∣ W ) P ( W ) P(W|X)=P(X|W)P(W) P(W∣X)=P(X∣W)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的解码过程,并通过优化搜索路径来提高搜索效率。
对于语言模型:
将n-gram模型表示为WFST,记为G。由于每个句子由词组成,故输入与输出符号均为词,权重由语言模型中的概率值转化而来。
对于发音词典:
将发音词典表示为WFST,记为L。每个词由音素组成,输入为音素序列(phone),输出为词(word)。
对于上下文关系:
将其表示为WFST时,记为C,输入为三音素序列(Triphone),输出为音素序列。
对于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(H∘min(det(C∘min(det(L∘G))))))
1.min:最小化 2.det:确定化 3. ∘ \circ ∘:融合(Composition)
因为HMM已在解码图中,因此在最终解码时,只需GMM或DNN,即可提高HCLG进行解码。具体流程如下:
从上述内容中可以看出,传统的语音识别方案依赖声学模型、语言模型以及解码方案等多种模块,训练步骤也很繁琐,常常需要先通过GMM获得帧级标签,再训练多轮模型进行求解。因此引入深度学习端到端方案,通过直接输入音频和对应文本内容来训练模型,一步到位。
目前基于深度学习的语音识别方案主要分为以下几个阶段:
对于端到端模型,其重点在于输入输出序列的不定长问题。
对于输入序列,通常做法是将不同长度的数据序列转为固定维度的向量序列,根据输入方式的不同存在两种不同的处理方法:
对于输出序列,同样分为两种情况:
上述基于CTC损失函数和注意力机制的深度学习方法可以合用,这种端到端方法成功将声学模型和语言模型融为一体,是当下语音识别的主要方向。