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