精华内容
下载资源
问答
  • 摘要:在本文介绍的工作中,我们展示了一个基于RNN和CTC的语音识别模型,在这个模型中,基于WFST的解码能够有效地融合词典和语言模型.
    摘要:在本文介绍的工作中,我们展示了一个基于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的解码能够有效地融合词典和语言模型.

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

    展开全文
  • 今年年初,我们为 Gboard 中所有基于拉丁字母的语言推出新模型,并发表论文《基于 LSTM 的多语言快速在线手写识别》("Fast Multi-language LSTM-based Online Handwriting Recognition"),更详细地介绍了为该版本...

    文 /  Sandro Feuz 和 Pedro Gonnet,手写团队高级软件工程师


    2015 年,我们推出 Google 手写输入。该产品可作为任何 Android 应用的附加输入法,帮助用户在 Android 移动设备上手写文字。在首次发布的版本中,我们实现了对 82 种语言的支持,包括法语、盖尔语、汉语和马拉雅拉姆语等。为了提供更加流畅的用户体验和省去切换输入法的需求,去年我们为 Google 的移动设备键盘 Gboard for Android 添加了 针对 100 多种语言的手写识别支持。 

    此后,机器学习不断进步,催生出新的模型架构和训练方法,让我们得以修改最初的方法(即依靠手动设计的启发式方法将手写输入切割成单个字符),并构建单个机器学习模型。该模型不但能够应用于整体输入,而且与旧版相比,错误率显著下降。今年年初,我们为 Gboard 中所有基于拉丁字母的语言推出新模型,并发表论文《基于 LSTM 的多语言快速在线手写识别》("Fast Multi-language LSTM-based Online Handwriting Recognition"),更详细地介绍了为该版本进行的相关研究。在本文中,我们将简要概述这项研究。 


    640?wx_fmt=gif

    接触点、贝塞尔曲线和递归神经网络 

    任何在线手写识别器都是从接触点入手。手写输入表现为一系列的笔画,而每个笔画又表现为一系列带时间戳的点。由于 Gboard 适用于各种设备和屏幕分辨率,因此我们首先要对接触点坐标进行归一化处理。然后,为了准确捕捉数据形状,我们将点序列转换为一系列三次方贝塞尔曲线,以作为递归神经网络 (RNN) 的输入值。RNN 经过训练,能够准确地识别手写字符(如需了解该步骤的更多详情,请参见下文)。虽然长久以来,我们一直在手写识别中使用贝塞尔曲线,但将其用作输入值还是很新鲜的做法,这使我们能够为不同的设备提供一致的输入表征(采样率和准确率并不相同)。该方法与之前使用所谓分段解码方法的模型截然不同,之前的方法是对如何将笔画分解成字符做出多个假设(分段),然后从此分解中找出最有可能的字符序列(解码)。 

    该方法的另一个优势是贝塞尔曲线序列比输入点的基础序列更加紧凑,这会使模型在输入的同时更容易获得临时依赖项。每条曲线都由起点和终点,以及其他两个控制点定义的多项式表示,以确定曲线形状。为了找出能够准确表示输入值的三次方贝塞尔曲线序列,我们采用迭代过程最小化归一化输入坐标与曲线之间的平方距离(以 x、y 和时间计算)。下图是曲线拟合过程的示例。用户的手写输入以黑色表示。该输入值由 186 个接触点组成,清晰指明 go 这个词。在黄色、蓝色、粉色和绿色部分,我们通过四条三次方贝塞尔曲线组成的序列看到字母 g 的表征(每条曲线有两个控制点),而相应地,橙色、蓝绿色和白色表示插入字母 o 的三条曲线。 


    640?wx_fmt=png



    字符解码 

    曲线序列表示输入值,但我们仍需要将输入曲线序列转化为实际的书面字符。为此,我们使用多层 RNN 来处理曲线序列,并生成输出解码矩阵。该矩阵提供每条输入曲线中所有可能字母的概率分布,以指示哪些书写字母是该曲线的一部分。 

    我们试验了多个类型的 RNN,最终决定使用双向版准递归神经网络 (QRNN)。QRNN 交替使用卷积层和递归层,为实现高效并行化提供理论上的可能性,并在保持权重数相对较少的同时提供良好的预测性能。权重数与需要下载的模型大小直接相关,所以权重数越少越好。 

    为了 “解码” 曲线,递归神经网络会生成一个矩阵,其中每一列对应一条输入曲线,每一行对应字母表中的一个字母。我们可以将表示特定曲线的列视作字母表中所有字母的概率分布。但每个字母可以由多条曲线构成(例如上面的 g 和 o,分别由四条和三条曲线构成)。递归神经网络输出序列的长度(与贝塞尔曲线的数量始终一致)与输入应该表示的实际字符数不一致。该问题的解决方法是添加特殊的空白符号,以表明特定曲线没有输出值,这与在联结主义时间分类 (CTC) 算法中的做法一样。我们使用有限状态机解码器将神经网络的输出值与编码为加权有限状态接收器的字符语言模型相结合。语言中常见的字符序列(例如德语中的 “sch”)获得奖励,并且更有可能成为输出值,而不常见的序列则会受到惩罚。此流程的可视化演示如下。 


    640?wx_fmt=png


    接触点序列(如上图所示,根据曲线段进行颜色编码)被转换为更短的贝塞尔系数序列(示例中为 7 个系数),每个系数对应一条曲线。基于 QRNN 的识别器将曲线序列转换为一系列长度相同的字符概率,并呈现在解码器阵列中,其中行对应 “a” 到 “z” 的字母,而空白符号(条目亮的地方)对应其相对概率。从左向右浏览解码器矩阵,我们发现大多数都是空白,另外还有字符 “g” 和 “o” 的亮点,因此文本输出为 “go”。 

    虽然新的字符识别模型比旧模型简单得多,但其错误率比旧模型低 20% 到 40%,而且速度也更快。但是,我们仍然需要在设备上执行这些操作! 



    在设备上运作 

    为提供最佳用户体验,识别模型只有高准确率还不够,还要有很快的速度。为尽可能降低 Gboard 中的延迟,我们将识别模型(在 TensorFlow 中训练)转换为 TensorFlow Lite 模型。这就需要在模型训练过程中量化所有权重,将每个权重使用四个字节减少为一个,进而缩小模型大小,并减少推理时间。此外,相比使用完整的 TensorFlow 实现,我们可以使用 TensorFlow Lite 缩减 APK 的大小,因为它专为小二进制文件进行优化,仅包括推理所需的部分。 



    后续计划 

    我们将继续挑战极限,不断改进拉丁字母的语言识别器。手写团队已经在努力开发新模型,以便为 Gboard 支持的所有手写语言提供助力。 



    致谢

    感谢为提升 Gboard 手写体验做出贡献的每个人。我们要特别感谢来自 Gboard 团队的 Jatin Matani、语音和语言算法团队的 David Rybach、Expander 团队的 Prabhu Kaliamoorthi、TensorFlow Lite 团队的 Pete Warden,以及手写团队的 Henry Rowley、Li-Lun Wang、Mircea Trăichioiu、Philippe Gervais 和 Thomas Deselaers。



    更多 AI 相关阅读:



    640?wx_fmt=gif


    展开全文
  • 声学建模包括使用RNN学习预测上下文无关目标(音素或字符),为了消除预先生成的帧标签的需求,本文采用了CTC目标函数来推断语音和标签序列之前的对齐方式。Eesen一个显著特征是基于加权有限状态转换机(WFST)解码方式,...

    论文:

              EESEN: END-TO-END SPEECH RECOGNITION USING DEEP RNN MODELS AND WFST-BASED DECODING

    摘要

    文本提出了Eesen框架,该框架极大地简化了构建最优ASR系统的流程。声学建模包括使用RNN学习预测上下文无关目标(音素或字符),为了消除预先生成的帧标签的需求,本文采用了CTC目标函数来推断语音和标签序列之前的对齐方式。Eesen一个显著特征是基于加权有限状态转换机(WFST)解码方式,该方法可将词典和语言模型有效地合并到CTC中。实验表明,与标准的混合DNN系统相比,Eesen可以达到可比的误码率(WER),同时可以显著加快解码速度。

    引言

    传统上,自动语音识别(ASR)利用隐马尔可夫模型/高斯混合模型(HMM / GMM)范例进行声学建模。 HMM用于归一化时间变异性,而GMM用于计算HMM状态的发射概率。近年来,通过引入深层神经网络(DNN)作为声学模型,ASR的性能得到了显着提高。在各种ASR任务上,与GMM模型相比,DNN模型显示出显着的进步。尽管取得了这些进步,但建立最先进的ASR系统仍然是一项复杂且需要大量专业知识的任务。首先,声学建模通常需要各种资源,例如词典和语音问题。其次,在混合方法中,DNN的训练仍然依赖于GMM模型来获取(初始)帧级标签。建立GMM模型通常会经历多个阶段(例如CI phone,CD状态等),并且每个阶段都涉及不同的特征处理技术(例如LDA,fMLLR等)。第三,ASR系统的开发高度依赖于ASR专家来确定多个超参数的最佳配置,例如,GMM模型中的senone和高斯数。列举了CTC的出现,但解码还是个问题,本文提出Eesen模型来解决这个问题,使用RNN作为声学模型,使用LSTM作为模型组成块,使用CTC作为目标函数,Eesen将声音建模简化为通过语音和上下文无关(CI)标签序列对学习单个RNN。 Eesen的一个显着特征是基于加权有限状态换能器(WFST)的通用解码方法。用这种方法,将各个组成部分(CTC标签,词典和语言模型)编码为WFST(TLG),然后组成一个全面的搜索图。 WFST表示提供了一种方便的方式来处理CTC空白标签,并在解码期间启用波束搜索。我们使用《华尔街日报》(WSJ)基准进行的实验表明,与现有的端到端ASR管道相比,Eesen的性能更高[6,8]。 Eesen的WER与强大的HMM / DNN混合基准相当。而且,CI建模目标的应用允许Eesen加快解码速度并减少解码内存使用量。

    模型及解码方式

    双向循环神经网络+CTC

    先前的工作介绍了多种方法[1、2、3]来解码受CTC训练的模型。但是,这些方法要么无法集成单词级语言模型,要么无法在受限条件下实现集成(例如,[1]中的nbest列表记录)。在这项工作中,我们提出了一种基于WFST的通用解码方法。 WFST是一个有限状态接受器(FSA),其中每个转换都有一个输入符号,一个输出符号和一个权重。本文的解码方法将CTC标签,词典和语言模型表示为单独的WFST。使用高度优化的FST库,例如OpenFST ,我们可以将WFST有效地融合到单个搜索图中。各个WFST的构建描述如下。尽管以英语为例进行了说明,但其他语言也使用相同的过程。

    Grammar,语法WFST在语言/域中编码允许的单词序列。图2所示的WFST表示一种玩具语言模型,该模型允许两个句子“你好”和“你好吗”。 WFST符号是单词,而弧线权重是语言模型的概率。通过这种WFST表示,CTC解码原则上可以利用可以转换为WFST的任何语言模型。遵循文献[4]中的约定,语言模型WFST表示为G

    Lexicon,词典WFST对从词典单元序列到单词的映射进行编码。根据我们的RNN建模的标签,有两种情况需要考虑。如果标签是音素,则词典是我们通常在混合方法中使用的标准词典。当标签是字符时,词典仅包含单词的拼写。两种情况之间的主要区别在于,拼写词典可以轻松扩展为包括词汇量(OOV)单词。相反,音素词典的扩展并不是那么简单。它依赖于一些字素到音素的规则/模型,并且可能会出现错误。词汇表WFST表示为L。图3和图4说明了这两种构建L的情况。

    Token 第三个WFST组件将一系列帧级CTC标签映射到单个词典单元(音素或字符)。对于词典单元,其令牌WFST被设计为在帧级别包含其所有可能的标签序列。因此,该WFST允许空白标签occurrence的出现,以及任何非空白标签的重复。比如,RNN模型可能会产生3中可能的标签序列,"AAAAA","_ _ A A _","_ A A A_".这个令牌WFST会将这三个都映射到A

    搜索图 编译了三个独立的WFST之后,我们将它们组合成一个全面的搜索图。首先组成词典和语法WFST。对它们的组成执行两个特殊的WFST操作,即确定和最小化,以压缩搜索空间,从而加快解码速度。然后,将所得的WFST LG与令牌WFST组成,该令牌最终生成搜索图。总体而言,FST运营的目标是:

    S = T \bigcirc min(det(L\bigcirc G))

     

    实验

    基于音素建立的系统

    基于字符的系统 

     

    参考文献

    1. Alex Graves and Navdeep Jaitly, “Towards end-to-end speech recognition with recurrent neural networks,” in Proceedings of the 31st International Conference on Machine Learning (ICML-14), 2014, pp. 1764–1772.
    2. Awni Y Hannun, Andrew L Maas, Daniel Jurafsky, and Andrew Y Ng, “First-pass large vocabulary continuous speech recognition using bi-directional recurrent DNNs,” arXiv preprint arXiv:1408.2873, 2014.
    3. Andrew L Maas, Ziang Xie, Dan Jurafsky, and An-drew Y Ng, “Lexicon-free conversational speech recognition with neural networks,” in Proceedings of the 2015
    4. Daniel Povey, Arnab Ghoshal, Gilles Boulianne, Lukᡠs Burget, Ondˇ rej Glembek, Nagendra Goel, Mirko Hannemann, Petr Motl´ ıˇ cek, Y anmin Qian, Petr Schwarz, Jan Silovsk´ y, Georg Stemmer, and Karel V esel´ y, “The Kaldispeech recognition toolkit,” in Automatic Speech Recognition and Understanding (ASRU), 2011 IEEE Workshop on. IEEE, 2011, pp. 1–4.
    5.  
    展开全文
  • 该系统实现了基于深度框架的语音识别中的声学模型和语言模型建模,其中声学模型包括CNN-CTC、GRU-CTC、CNN-RNN-CTC,语言模型包含transformer、CBHG。 数据集采用了目前能找到的所有中文免费数据,包括:thchs-30、...

    本文搭建一个完整的中文语音识别系统,包括声学模型和语言模型,能够将输入的音频信号识别为汉字。

    该系统实现了基于深度框架的语音识别中的声学模型和语言模型建模,其中声学模型包括CNN-CTC、GRU-CTC、CNN-RNN-CTC,语言模型包含transformer、CBHG。
    数据集采用了目前能找到的所有中文免费数据,包括:thchs-30、aishell、primewords、st-cmd四个数据集,训练集总计大约450个小时。

    项目地址:https://github.com/audier/DeepSpeechRecognition

    为了方便同学们自己做实验,写了实践版的tutorial:

    • 声学模型:https://blog.csdn.net/chinatelecom08/article/details/85013535
    • 基于transformer的语言模型:https://blog.csdn.net/chinatelecom08/article/details/85051817
    • 基于CBHG的语言模型:https://blog.csdn.net/chinatelecom08/article/details/85048019

    文章目录

    1. 声学模型
    GRU-CTC
    DFCNN
    DFSMN
    2. 语言模型
    n-gram
    CBHG
    transformer
    3. 数据集
    4. 配置


    1. 声学模型

    声学模型目前开源了部分示例模型,后期将不定期更新一些模型。

    GRU-CTC

    我们使用 GRU-CTC的结构搭建了第一个声学模型,该模型在项目的gru_ctc.py文件中。
    利用循环神经网络可以利用语音上下文相关的信息,得到更加准确地信息,而GUR又能选择性的保留需要的长时信息,使用双向rnn又能够充分的利用上下文信号。
    但该方法缺点是一句话说完之后才能进行识别,且训练相对cnn较慢。该模型使用python/keras进行搭建,本文系统都使用python搭建。

    网络结构如下:
       

    def _model_init(self):
            self.inputs = Input(name='the_inputs', shape=(None, 200, 1))
            x = Reshape((-1, 200))(self.inputs)
            x = dense(512, x)
            x = dense(512, x)
            x = bi_gru(512, x)
            x = bi_gru(512, x)
            x = bi_gru(512, x)
            x = dense(512, x)
            self.outputs = dense(self.vocab_size, x, activation='softmax')
            self.model = Model(inputs=self.inputs, outputs=self.outputs)
            self.model.summary()

    DFCNN

    由于两个原因在使用GRU作为语音识别的时候我们会遇到问题。

    • 一方面是我们常常使用双向循环神经网络才能取得更好的识别效果,这样会影响解码实时性。
    • 另一方面随着网络结构复杂性增加,双向GRU的参数是相同节点数全连接层的6倍,这样会导致训练速度非常缓慢。

    科大讯飞提出了一种使用深度卷积神经网络来对时频图进行识别的方法,就是DFCNN。
    论文地址:http://xueshu.baidu.com/usercenter/paper/show?paperid=be5348048dd263aced0f2bdc75a535e8&site=xueshu_se

    利用CNN参数共享机制,可以将参数数量下降几个数量级别,且深层次的卷积和池化层能够充分考虑语音信号的上下文信息,且可以在较短的时间内就可以得到识别结果,具有较好的实时性。
    该模型在cnn_ctc.py中,实验中是所有网络结果最好的模型,目前能够取得较好的泛化能力。其网络结构如下:

    DFCNN

    def cnn_cell(size, x, pool=True):
        x = norm(conv2d(size)(x))
        x = norm(conv2d(size)(x))
        if pool:
            x = maxpool(x)
        return x

    class Am():
        def _model_init(self):
            self.inputs = Input(name='the_inputs', shape=(None, 200, 1))
            self.h1 = cnn_cell(32, self.inputs)
            self.h2 = cnn_cell(64, self.h1)
            self.h3 = cnn_cell(128, self.h2)
            self.h4 = cnn_cell(128, self.h3, pool=False)
            self.h5 = cnn_cell(128, self.h4, pool=False)
            # 200 / 8 * 128 = 3200
            self.h6 = Reshape((-1, 3200))(self.h5)
            self.h7 = dense(256)(self.h6)
            self.outputs = dense(self.vocab_size, activation='softmax')(self.h7)
            self.model = Model(inputs=self.inputs, outputs=self.outputs)
            self.model.summary()

    DFSMN

    而前馈记忆神经网络也也解决了双向GRU的参数过多和实时性较差的缺点,它利用一个记忆模块,包含了上下几帧信息,能够得到不输于双向GRU-CTC的识别结果,阿里最新的开源系统就是基于DFSMN的声学模型,只不过在kaldi的框架上实现的。我们将考虑使用DFSMN+CTC的结构在python上实现。该网络实质上是用一个特殊的CNN就可以取得相同的效果,我们将CNN的宽设置为memory size,将高度设置为feature dim,将channel设置为hidden units,这样一个cnn的层就可以模仿fsmn的实现了。
    结构如下:

    DFSMN


    2. 语言模型

    n-gram

    n元语法是一个非常经典的语言模型,这里不过多介绍啦。
    如果想要通过语料来训练一个n-gram的模型,可以参考我的小实验的实现方法。

    CBHG

    该想法来自于一个大神搞输入法的项目,下面部分也引用此处:搜喵出入法
    他是利用该模型建立一个按键到汉字的作用,本文对其结构和数据处理部分稍作改动,作为语言模型。

    拼音输入的本质上就是一个序列到序列的模型:输入拼音序列,输出汉字序列。所以天然适合用在诸如机器翻译的seq2seq模型上。

    模型初始输入是一个随机采样的拼音字母的character embedding,经过一个CBHG的模型,输出是五千个汉字对应的label。
    这里使用的CBHG模块是state-of-art的seq2seq模型,用在Google的机器翻译和语音合成中,该模型放在cbhg.py中,结构如下:
    图片来自 Tacotron: Towards End-to-End Speech Synthesis

    CBHG
    该模型训练实验结果如下,实际上,后续和transformer的比较中,该模型无论是收敛速度还是识别效果上都是很难和transformer比较。

    请输入测试拼音:ta1 mei2 you3 duo1 shao3 hao2 yan2 zhuang4 yu3 dan4 ta1 que4 ba3 ai4 qin1 ren2 ai4 jia1 ting2 ai4 zu3 guo2 ai4 jun1 dui4 wan2 mei3 de tong3 yi1 le qi3 lai2
    她没有多少豪言壮语但她却把爱亲人爱家庭爱祖国爱军队完美地统一了起来

    请输入测试拼音:chu2 cai2 zheng4 bo1 gei3 liang3 qian1 san1 bai3 wan4 yuan2 jiao4 yu4 zi1 jin1 wai4 hai2 bo1 chu1 zhuan1 kuan3 si4 qian1 wu3 bai3 qi1 shi2 wan4 yuan2 xin1 jian4 zhong1 xiao3 xue2
    除财政拨给两千三百万元教太资金外还拨出专款四千五百七十万元新建中小学

    请输入测试拼音:ke3 shi4 chang2 chang2 you3 ren2 gao4 su4 yao2 xian1 sheng1 shuo1 kan4 jian4 er4 xiao3 jie3 zai4 ka1 fei1 guan3 li3 he2 wang2 jun4 ye4 wo4 zhe shou3 yi1 zuo4 zuo4 shang4 ji3 ge4 zhong1 tou2
    可是常常有人告诉姚先生说看见二小姐在咖啡馆里和王俊业握着族一坐坐上几个钟头

    transformer

    新增基于transformer结构的语言模型transformer.py,该模型已经被证明有强于其他框架的语言表达能力。

    • 论文地址:https://arxiv.org/abs/1706.03762。
    • tutorial:https://blog.csdn.net/chinatelecom08/article/details/85051817

    建议使用transformer作为语言模型,该模型是自然语言处理这两年最火的模型,今年的bert就是使用的该结构。本文最近更新系统使用的语言模型就是transformer。

     the  0 th example.
    文本结果: lv4 shi4 yang2 chun1 yan1 jing3 da4 kuai4 wen2 zhang1 de di3 se4 si4 yue4 de lin2 luan2 geng4 shi4 lv4 de2 xian1 huo2 xiu4 mei4 shi1 yi4 ang4 ran2
    原文结果: lv4 shi4 yang2 chun1 yan1 jing3 da4 kuai4 wen2 zhang1 de di3 se4 si4 yue4 de lin2 luan2 geng4 shi4 lv4 de2 xian1 huo2 xiu4 mei4 shi1 yi4 ang4 ran2
    原文汉字: 绿是阳春烟景大块文章的底色四月的林峦更是绿得鲜活秀媚诗意盎然
    识别结果: 绿是阳春烟景大块文章的底色四月的林峦更是绿得鲜活秀媚诗意盎然

     the  1 th example.
    文本结果: ta1 jin3 ping2 yao1 bu4 de li4 liang4 zai4 yong3 dao4 shang4 xia4 fan1 teng2 yong3 dong4 she2 xing2 zhuang4 ru2 hai3 tun2 yi4 zhi2 yi3 yi1 tou2 de you1 shi4 ling3 xian1
    原文结果: ta1 jin3 ping2 yao1 bu4 de li4 liang4 zai4 yong3 dao4 shang4 xia4 fan1 teng2 yong3 dong4 she2 xing2 zhuang4 ru2 hai3 tun2 yi4 zhi2 yi3 yi1 tou2 de you1 shi4 ling3 xian1
    原文汉字: 他仅凭腰部的力量在泳道上下翻腾蛹动蛇行状如海豚一直以一头的优势领先
    识别结果: 他仅凭腰部的力量在泳道上下翻腾蛹动蛇行状如海豚一直以一头的优势领先

     the  2 th example.
    文本结果: pao4 yan3 da3 hao3 le zha4 yao4 zen3 me zhuang1 yue4 zheng4 cai2 yao3 le yao3 ya2 shu1 di4 tuo1 qu4 yi1 fu2 guang1 bang3 zi chong1 jin4 le shui3 cuan4 dong4
    原文结果: pao4 yan3 da3 hao3 le zha4 yao4 zen3 me zhuang1 yue4 zheng4 cai2 yao3 le yao3 ya2 shu1 di4 tuo1 qu4 yi1 fu2 guang1 bang3 zi chong1 jin4 le shui3 cuan4 dong4
    原文汉字: 炮眼打好了炸药怎么装岳正才咬了咬牙倏地脱去衣服光膀子冲进了水窜洞
    识别结果: 炮眼打好了炸药怎么装岳正才咬了咬牙倏地脱去衣服光膀子冲进了水窜洞


    3. 数据集

    数据集采用了目前我能找到的所有中文免费数据,包括:thchs-30、aishell、primewords、st-cmd四个数据集,训练集总计大约450个小时,在之前实验过程中,使用thchs-30+aishell+st-cmd数据集对DFCNN声学模型进行训练,以64batch_size训练。
    包括stc、primewords、Aishell、thchs30四个数据集,共计约430小时, 相关链接:http://www.openslr.org/resources.php

    Name    train    dev    test
    aishell    120098    14326    7176
    primewords    40783    5046    5073
    thchs-30    10000    893    2495
    st-cmd    10000    600    2000
    数据标签整理在data路径下,其中primewords、st-cmd目前未区分训练集测试集。

    若需要使用所有数据集,只需解压到统一路径下,然后设置utils.py中datapath的路径即可。

    4. 配置

    本项目现已训练一个迷你的语音识别系统,将项目下载到本地上,下载thchs数据集并解压至data,运行test.py,不出意外能够进行识别,结果如下:

     the  0 th example.
    文本结果: lv4 shi4 yang2 chun1 yan1 jing3 da4 kuai4 wen2 zhang1 de di3 se4 si4 yue4 de lin2 luan2 geng4 shi4 lv4 de2 xian1 huo2 xiu4 mei4 shi1 yi4 ang4 ran2
    原文结果: lv4 shi4 yang2 chun1 yan1 jing3 da4 kuai4 wen2 zhang1 de di3 se4 si4 yue4 de lin2 luan2 geng4 shi4 lv4 de2 xian1 huo2 xiu4 mei4 shi1 yi4 ang4 ran2
    原文汉字: 绿是阳春烟景大块文章的底色四月的林峦更是绿得鲜活秀媚诗意盎然
    识别结果: 绿是阳春烟景大块文章的底色四月的林峦更是绿得鲜活秀媚诗意盎然

    若自己建立模型则需要删除现有模型,重新配置参数训练。

    与数据相关参数在utils.py中:

    data_type: train, test, dev
    data_path: 对应解压数据的路径
    thchs30, aishell, prime, stcmd: 是否使用该数据集
    batch_size: batch_size
    data_length: 我自己做实验时写小一些看效果用的,正常使用设为None即可
    shuffle:正常训练设为True,是否打乱训练顺序
    def data_hparams():
        params = tf.contrib.training.HParams(
            # vocab
            data_type = 'train',
            data_path = 'data/',
            thchs30 = True,
            aishell = True,
            prime = False,
            stcmd = False,
            batch_size = 1,
            data_length = None,
            shuffle = False)
          return params

    使用train.py文件进行模型的训练。

    声学模型可选cnn-ctc、gru-ctc,只需修改导入路径即可:

    from model_speech.cnn_ctc import Am, am_hparams

    from model_speech.gru_ctc import Am, am_hparams

    语言模型可选transformer和cbhg:

    from model_language.transformer import Lm, lm_hparams

    from model_language.cbhg import Lm, lm_hparams
    ————————————————
    版权声明:本文为CSDN博主「Audior」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/chinatelecom08/article/details/82557715

    展开全文
  • 语音识别模型基于Google的研究论文,并使用Tensorflow 2.0在Python 3中实现。 设置您的环境 要设置您的环境,请运行以下命令: git clone --recurse ...
  • RNN语音分类-普通话广东话分类

    千次阅读 热门讨论 2019-03-03 23:10:07
    对语音分类后可以将语音传给百度不同类别的语音识别翻译出对应的文字。 收集数据及整理 本训练的数据可以通过收音机类的app获取普通话和广东话的语音资料。训练需要wav格式的单声道的语音,每个语音数据的时间长度...
  • 语音识别技术概述与调研 语音识别已经成为人工智能应用的一个重点,通过语音控制设备简单方便,在各个领域兴起了研究应用的热潮。数据、算法及芯片是语音识别技术的3个关键,大量优质的数据、精准快速的算法和高性能...
  • 这篇文章主要调研的是另外一种改进在线语音识别的方法:基于 RNN Transducer 方法。当然最近强势的基于 Transformer 的 Encoder-Decoder 在线方法(MoChA-type/local window /triggered attention/Scout Network/...
  • RNN-Transducer针对CTC的不足,进行了改进,使得模型具有了端到端联合优化、具有语言建模能力、便于实现Online语音识别等突出的优点, 更加适合语音任务。 RNN-T介绍: RNN-Transducer模型实际上是
  • 而在语音识别和情感识别中,基于字符、音素等的编码识别则面临着很多的挑战。近日,李飞飞团队与斯坦福大学音乐与声学计算机研究中心联合提出了基于时间卷积网络TCN的句子编码新方法,通过模拟高级声学的架构,提升...
  • 基于DNN-HMMs的语音识别原理

    千次阅读 2019-06-02 20:05:59
    在上一篇博客基于GMMs-HMMs的语音识别原理中,介绍了第一代较为成熟的GMMs-HMMs语音识别模型。但随着神经网络技术的发展,后面又出现了基于DNN-HMMs的语音识别模型,一句话概括就是用DNN代替之前的GMMs,有更好的...
  • 讲了基于CNN和Transformer的语音识别模型表现比以RNN为基础的模型好,Transformer模型擅长捕获基于内容的全局交互,而CNN则有效地利用了局部特征。 本文工作:我们通过研究如何结合卷积神经网络和Transformer到一...
  • 基于Pytorch实现的MASR中文语音识别

    千次阅读 2020-07-30 14:49:44
    本文链接:基于Pytorch实现的MASR中文语音识别 MASR是一个基于端到端的深度神经网络的中文普通话语音识别项目,本项目是基于https://github.com/nobody132/masr 进行开发的。 本教程源码地址:...
  • 深度学习实战篇-基于RNN的中文分词探索 近年来,深度学习在人工智能的多个领域取得了显著成绩。微软使用的152层深度神经网络在ImageNet的比赛上斩获多项第一,同时在图像识别中超过了人类的识别水平。百度在中文...
  • 为解决一般语音识别系统准确率较低的问题,本文分别给出了由循环神经网络(RNN)和多层感知器(MLP)组成识别模块的两种语音识别系统,并对二者识别的准确性进行了比较。介绍了特征提取模块的主要工作步骤并讨论了...
  • RNN循环神经网络,可以用在语音识别和文字等方面,但是语音和文字不像图片那样,可以单独地把像素点提取出来。上图就是RNN的简易示图,除去中间的反馈回路,和大多数神经网络类似。我认为反馈回路,就是上一时刻的...
  • 基于tensorflow 的中文语音识别模型

    万次阅读 2018-08-03 14:47:38
    目前网上关于tensorflow 的中文语音识别实现较少,而且结构功能较为简单。而百度在PaddlePaddle上的 Deepspeech2 实现功能却很强大,因此就做了一次大自然的搬运工把框架转为tensorflow…. 简介 百度开源的基于...
  • 基于RNN的文本分析及预测

    千次阅读 2017-05-05 22:10:20
    一、RNN简要介绍 RNN(RecurrentNeural Networks):循环神经网络。 CNN是一个典型的空间上深度的神经网络,RNN是在时间上深度的神经网络 语言模型和文本生成研究: Recurrentneural network based ...
  • 基于RNN的个性化电影推荐尝试

    千次阅读 2016-09-26 15:54:16
    基于RNN的个性化电影推荐尝试随着深度学习在工业界的应用越来越多,优酷土豆尝试在视频推荐领域中利用深度学习方法,提高视频推荐的准确性,为用户提供优质的视频推荐服务。本次为大家分享在个性化电影推荐上的尝试...
  • 先前的文章《三个小白是如何在三个月内搭一个基于kaldi的嵌入式在线语音识别系统的 》说我们花了不到三个月的时间搭了一个基于kaldi的嵌入式语音识别系统,不过它是基于传统的GMM-HMM的,是给我们练手用的,通过搭这...
  • 本论文从深度神经网络的模型结构出发,展开了较为系统和深入的研究,一方面对现有的模型进行优化,另一方面结合语音及语言信号的特性探究新的网络结构模型,从而提高基于深度神经网络的语音识别系统的性能和训练效率。...
  •   学习语音唤醒识别已有3个月,从基础理论开始,到看论文移植代码,在牺牲了无数的头发的青春后逐渐对语音唤醒识别有了一定的了解,本着好记性不如烂笔头的原则,记录下自己的一些理解和想法,与大家一起学习进步...
  • 语音识别基础(二):语音识别方法

    千次阅读 多人点赞 2020-07-02 15:01:25
    语音识别的全称是自动语音识别(Automatic Speech Recognition,ASR),说得多了, 就把“自动”省去了,认为“自动”是理所当然的了。语音识别属于序列转换技术,它将语音序列转换为文本序列。大体来说,这是一次...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,670
精华内容 3,868
关键字:

基于rnn的语音识别