基于RNN和CTC的语音识别模型,探索语境偏移解决之道
摘要:在本文介绍的工作中,我们展示了一个基于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的解码能够有效地融合词典和语言模型.
基于RNN和CTC的语音识别模型,探索语境偏移解决之道的更多相关文章
- 深度学习实战篇-基于RNN的中文分词探索
深度学习实战篇-基于RNN的中文分词探索 近年来,深度学习在人工智能的多个领域取得了显著成绩.微软使用的152层深度神经网络在ImageNet的比赛上斩获多项第一,同时在图像识别中超过了人类的识别水平 ...
- “你什么意思”之基于RNN的语义槽填充(Pytorch实现)
1. 概况 1.1 任务 口语理解(Spoken Language Understanding, SLU)作为语音识别与自然语言处理之间的一个新兴领域,其目的是为了让计算机从用户的讲话中理解他们的意图 ...
- 基于深度学习的中文语音识别系统框架(pluse)
目录 声学模型 GRU-CTC DFCNN DFSMN 语言模型 n-gram CBHG 数据集 本文搭建一个完整的中文语音识别系统,包括声学模型和语言模型,能够将输入的音频信号识别为汉字. 声学模型 ...
- 我们基于kaldi开发的嵌入式语音识别系统升级成深度学习啦
先前的文章<三个小白是如何在三个月内搭一个基于kaldi的嵌入式在线语音识别系统的>说我们花了不到三个月的时间搭了一个基于kaldi的嵌入式语音识别系统,不过它是基于传统的GMM-HMM的 ...
- 基于OpenSeq2Seq的NLP与语音识别混合精度训练
基于OpenSeq2Seq的NLP与语音识别混合精度训练 Mixed Precision Training for NLP and Speech Recognition with OpenSeq2Se ...
- 基于隐马尔科夫模型(HMM)的地图匹配(Map-Matching)算法
文章目录 1. 1. 摘要 2. 2. Map-Matching(MM)问题 3. 3. 隐马尔科夫模型(HMM) 3.1. 3.1. HMM简述 3.2. 3.2. 基于HMM的Map-Matchi ...
- 基于RNN的音频降噪算法 (附完整C代码)
前几天无意间看到一个项目rnnoise. 项目地址: https://github.com/xiph/rnnoise 基于RNN的音频降噪算法. 采用的是 GRU/LSTM 模型. 阅读下训练代码,可 ...
- 阿里巴巴语音识别模型 DFSMN 的使用指南
阿里巴巴 2018 年开源的语音识别模型 DFSMN,将全球语音识别准确率纪录提高至 96.04%.DFSMN 模型,是阿里巴巴的高效工业级实现,相对于传统的 LSTM.BLSTM 等声学模型,该模型 ...
- 转:从头开始编写基于隐含马尔可夫模型HMM的中文分词器
http://blog.csdn.net/guixunlong/article/details/8925990 从头开始编写基于隐含马尔可夫模型HMM的中文分词器之一 - 资源篇 首先感谢52nlp的 ...
- TensorFlow练习7: 基于RNN生成古诗词
http://blog.topspeedsnail.com/archives/10542 主题 TensorFlow RNN不像传统的神经网络-它们的输出输出是固定的,而RNN允许我们输入输出向量 ...
随机推荐
- k8s-单节点升级为集群(高可用)
单master节点升级为高可用集群 对于生产环境来说,单节点master风险太大了. 非常有必要做一个高可用的集群,这里的高可用主要是针对控制面板来说的,比如 kube-apiserver.etcd. ...
- MySQL 高级(进阶) SQL 语句——其二
MySQL 高级(进阶) SQL 语句 视图 ---- CREATE VIEW ----视图,可以被当作是虚拟表或存储查询. 视图跟表格的不同是,表格中有实际储存数据记录,而视图是建立在表格之上的一个 ...
- Ocserv整合Radius认证
目前社区主流SSL VPN有两个分支:openvpn和ocserv,通过官网和检索到的资料对比前者服务端比较强大,后者客户端和移动端支持更好,二者并不兼容: 另外前者商业化封装更好,偏向商业化,后者对 ...
- 邮差之死--python源代码
"""sth imported""" import time import os '''2 flags''' flag = 0 tmp = ...
- Educational Codeforces Round 101 (Rated for Div. 2) E - A Bit Similar
题目传送门 很巧妙的一道题.对于一个 \(n\)位的 \(01\)字符串,一共有 \(2^n\)种不同字符排列,对于任意一个固定排列,在 \(2^n\)种排列中只有一种排列与该固定排列处处不等,而题干 ...
- [CF1416F] Showing Off
题目链接 如果把方向看做有向边,整个图是一个内向基环树. 所以考虑哪些点有可能放在基环树的非环部分上,当且仅当一个点周围有严格小于他的点. 由于图一定是二分图(黑白染色),没有奇环,所有偶环一定可以拆 ...
- Feign源码解析:初始化过程(一)
前言 打算系统分析下Feign的代码,上一篇讲了下Feign的历史,本篇的话,先讲下Feign相关的beanDefinition,beanDefinition就是bean的设计图,bean都是按照be ...
- 如何保障Cookie的信息安全
一.支持策略 保障 Cookie 的安全性可以从以下几个方面进行: 使用 HttpOnly 属性:设置 HttpOnly 属性可以防止JavaScript Document.cookie API 无法 ...
- [Luogu 4912 帕秋莉的魔法] 题解报告
算法:DP, 背包,动态规划 简化版题目: 给定 \(n\) 个物品,物品的价值为 \(v_1 - v_n\),物品的体积为 \(w_1 - w_n\).需要选择一些物品,使它们的体积和为 \(V\) ...
- CSS3学习笔记-文字特效
CSS3中提供了许多有趣和实用的文字特效,可以让我们的文本内容更加生动有趣,下面介绍一些常用的文字特效. 文本阴影 使用text-shadow属性可以为文本添加阴影效果,语法如下: text-shad ...