摘要:在本文介绍的工作中,我们展示了一个基于RNN和CTC的语音识别模型,在这个模型中,基于WFST的解码能够有效地融合词典和语言模型.

本文分享自华为云社区《语境偏移如何解决?专有领域端到端ASR之路(三)》,原文作者:xiaoye0829 。

这篇文章我们介绍一个结合CTC与WFST (weighted finite-state transducers) 的工作:《EESEN: END-TO-END SPEECH RECOGNITION USING DEEP RNN MODELS AND WFST-BASED DECODING》。

在这个工作中,声学模型的建模是利用RNN去预测上下文无关的音素或者字符,然后使用CTC去对齐语音和label。这篇文章与众不同的一个点是基于WFST提出了一种通用的解码方法,可以在CTC解码的时候融入词典和语言模型。在这个方法中,CTC labels、词典、以及语言模型被编码到一个WFST中,然后合成一个综合的搜索图。这种基于WFST的方式可以很方便地处理CTC里的blank标签和进行beam search。

在这篇博文中,我们不再叙述关于RNN和CTC的内容。主要关注如何利用WFST进行解码的模块。一个WFST就是一个有限状态接收器(finite-state acceptor, FSA),每一个转换状态都有一个输入符号,一个输出符号,和一个权重。

上图是一个语言模型WFST的示意图。弧上的权重是当给定了前面的词语,发射得到下一个词的概率。节点0是开始节点,节点4是结束节点。WFST中的一条路径包含一系列输入符号到输出符号的发射序列。我们的解码方法将CTC labels,词典(lexicons),以及语言模型表示成分别的WFST,然后利用高度优化的FST库,比如OpenFST,我们能有效地将这些WFST融合成一个单独的搜索图。下面我们开始介绍,如何开始构建单个的WFST。

  • 1、语法(Grammar). 一个语法WFST编码了语言允许的单词序列。上图是一个精简的语言模型。它有两条序列:“how are you”和“how is it”。WFST的基本符号单位是word,弧上的权重是语言模型的概率。利用这种WFST形式的表示,CTC解码原则上可以利用任何能被转换成WFST的语言模型。按照Kaldi中的表示方式,这个语言模型的WFST被表示为G。
  • 2、词典(lexicon). 一个词典WFST编码了从词典单元序列到单词的映射。根据RNN的对应的label的建模单元,这个词典有两种对应的情况。如果label是音素,那么这个词典是与传统的hybrid模型相同的标准词典。如果label是character,那么这个词典简单地包含了每个单词的拼写。这两种情况的区别在于拼写词典能够较为容易地拓展到包含任何OOV(词汇表之外)的单词。相反,拓展音素词典不是那么直观,它依赖于一些grapheme-to-phoneme的方法或者模型,并且容易产生错误。这个词典WFST被表示成L,下图展示了两个词典构建L的例子:

第一个例子展示了音素词典的构建,假如音素词典的条目为“is IH Z”,下面的一个例子展示了拼写词典的构建,“is i s”。对于拼写词典,有另一个复杂的问题需要处理,当以character为CTC的标签时,我们通常在两个word间插入一个额外的空格(space)去建模原始转写之前的单词间隔。在解码的时候,我们允许空格选择性地出现在一个单词的开头和结尾。这种情况能够很轻易地被WFST处理。

除了英文之外,我们这里也展示一个中文词典的条目。

  • 3、令牌(token). 第三个WFST将帧级别的CTC标签序列映射到单个词典单元(音素或者character)上。对一个词典单元,token级的WFST被用来归入所有可能的帧级的标签序列。因此,这个WFST允许空白标签∅的出现,以及任何非空白标签的重复。举例来说,在输入5帧之后,RNN模型可能输出3种标签序列:“AAAAA”,“∅∅AA∅”,“∅AAA∅”。Token wfst将这三个序列映射到一个词典单元:“A”上。下图展示了一个音素“IH”的WFST,这个图中允许空白<blank>标签的出现,以及非空白标签“IH”的重复出现。我们将这个token的WFST表示成T。

  • 4、搜索图. 在分别编译完三个WFST后,我们将它们合成一个全面的搜索图。首先合成词典WFST L和语法WFST G,在这个过程中,确定性(determinization)和最小化(minimization)被使用,这两个操作是为了压缩搜索空间和加速解码。这个合成的WFST LG,然后与token的WFST进行合成,最后生成搜索图。总得FST操作的顺序是:S = T о min(det(LоG))。这个搜索图S编码了从一个由语音帧对应的CTC标签序列映射到单词序列的过程。具体来说,就是首先将语言模型中的单词解析成音素,构成LG图。然后RNN输出每帧对应的标签(音素或者blank),根据这个标签序列去LG图中进行搜寻。

当解码混合DNN模型时,我们需要使用先验状态去缩放来自DNN的后验状态,这个先验通常由训练数据中的强制对齐估计得到的。在解码由CTC训练得到的模型时,我们采用一个相似的过程。具体地,我们用最终的RNN模型在整个训练集上运行了一遍,具有最大后验的labels被选出来作为帧级的对齐,然后利用这种对齐,我们去估计标签的先验。然而,这种方法在我们的实验中表现得并不好,部分原因是由于利用CTC训练的模型在softmax层后的输出表现出高度的巅峰分布(即CTC模型倾向于输出单个非空的label,因此整个分布会出现很多尖峰),表现在大部分的帧对应的label为blank标签,而非blank的标签只出现在很狭窄的一个区域内,这使得先验分布的估计会被空白帧的数量主导。作为替代,我们从训练集中的标签序列里去估计更鲁棒的标签先验,即从增强后的标签序列中去计算先验。假设原始的标签为:“IH Z”,那么增强后的标签可能为“∅ IH ∅ Z ∅”等。通过统计在每帧上的标签分布数量,我们可以得到标签的先验信息。

上面介绍了基于WFST的方法,我们接下来来看一下实验部分。在进行后验分布正则之后,这个声学模型的分数需要被缩小,缩放因子在0.5~0.9之间,最佳的缩放值通过实验决定。本文的实验是WSJ上进行的。本文使用的最佳模型是一个基于音素的RNN模型,在eval92测试集上,在使用词典与语言模型时,这个模型达到了7.87%的WER,当只用词典时,WER快速升高到了26.92%。下图展示了本文的Eesen模型与传统hybrid模型的效果对比。从这个表中,我们可以看到Eesen模型比混合的HMM/DNN模型较差一些。但是在更大的数据集上,比如Switchboard,CTC训练的模型能获得比传统模型更好的效果。

Eesen的一个显著的优势是,相较于混合的HMM/DNN模型,解码速度大大加快了。这种加速来源于状态数量的大幅减少。从下表的解码速度可以看出来,Eesen获取了3.2倍以上的解码速度加速。并且,在Eesen模型中用到的TLG图,也明显小于HMM/DNN中用到的HCLG图,这也节约了用于存储模型的磁盘空间。

总得来说,在本文介绍的工作中,我们展示了一个基于RNN和CTC的语音识别模型,在这个模型中,基于WFST的解码能够有效地融合词典和语言模型.

点击关注,第一时间了解华为云新鲜技术~

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐