Press "Enter" to skip to content

基于 RNN 和 CTC 的语音识别模型,探索语境偏移解决之道

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

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

 

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

 

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

 

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

 

在这篇博文中,我们不再叙述关于 RNN 和 CTC 的内容。主要关注如何利用 WFST 进行解码的模块。一个 WFST 就是一个有限状态接收器(finite-stateacceptor, 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,这个图中允许空白标签的出现,以及非空白标签“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 的解码能够有效地融合词典和语言模型。

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注