摘要: 在本文介绍的工作中,咱们展现了一个基于 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 的解码可能无效地交融词典和语言模型.
点击关注,第一工夫理解华为云陈腐技术~