鉴于传统架构的语音识别方法在其他的回答中已经有了详细的介绍,这里主要介绍end-to-end语音识别架构,主要涉及到RNN神经网络结构以及CTC。

Outline:

1、 语音识别的基本架构

2、 声学模型(Acoustic Model,AM)a) 传统模型

b)CTC模型

c) end-to-end模型

3、 语言模型

4、 解码

----------------------------------------------------

1、 语音识别的基本架构 />

上式中W表示文字序列,Y表示语音输入。公式1表示语音识别的目标是在给定语音输入的情况下,找到可能性最大的文字序列。根据Baye’ Rule,可以得到公式2,其中分母表示出现这条语音的概率,它相比于求解的文字序列没有参数关系,可以在求解时忽略,进而得到公式3。公式3中第一部分表示给定一个文字序列出现这条音频的概率,它就是语音识别中的声学模型;第二部分表示出现这个文字序列的概率,它就是语音识别中的语言模型。

无论是传统的方法也好,现在火热的深 度神经网络的方法也罢,目前的语音识别架构都没有脱离上面的公式,也就是说都离不开AM和LM。下面分别对这两部分进行介绍

2、 声学模型(Acoustic Model,AM)

声学模型可以理解为是对发声的建模,它能够把语音输入转换成声学表示的输出,更准确的说是给出语音属于某个声学符号的概率。

a) 传统模型

在英文中这个声学符号可以是音节(syllable)或者更小的颗粒度音素(phoneme);在中文中这个声学符号可以是声韵母或者是颗粒度同英文一样小的音素。那么公式3中的声学模型就可以表示为下面的公式4的形式: />

其中Q表示发音单位的序列。从公式中可以看到,声学模型最终转换成了一个语音到发音序列的模型和一个发音序列到输出文字序列的字典。这里的发音序列通常是音素,到此为止声学模型是从语音到音素状态的一个描述。为了对不同上下文的音素加以区分,通常使用上下文相关的“三音子”作为建模单元。可以用下图表示:

/>

其中字典部分表示为如下公式5,其意义是把每个文字拆分成若干发音符号的序列。

/>

公式4中的声学部分可以继续分解为如下公式6 :

/>

公式6表示声学建模的颗粒度可以继续分解为更小的状态(state)。通常一个三音子对应有3个状态(静音通常是5个状态),那么声学建模的总数就是

这么多。为了压缩建模单元数量,状态绑定的技术被大量使用,它使得发音类似的状态用一个模型表表示,从而减少了参数量。状态绑定的技术可以使用专家手工编撰的规则,也可以使用数据驱动的方式。具体绑定形式如下图所示:

/>

基于上面的推到,声学模型是一个描述语音和状态之间转换的模型。

此时,引入HMM假设:状态隐变量,语音是观测值,状态之间的跳转符合马尔科夫假设。那么声学模型可以继续表示为如下公式:

/>

其中a表示转移概率,b表示发射概率。用图来表示的话就是下图中的结构 :

/>

如图中所示,观测概率通常用GMM或是DNN来描述。这就是CD-GMM-HMM架构[Mark Gales, 2006]和CD-DNN-HMM架构[George E. Dahl, 2012]的语音识别声学模型。CD-DNN-HMM的架构这里引用文章中的图表示如下:

/>

b) CTC模型

在基于CD-DNN-HMM架构的语音识别声学模型中,训练DNN通常需要帧对齐标签。在GMM中,这个对齐操作是通过EM算法不断迭代完成的,而训练DNN时需要用GMM进行对齐则显得非常别扭。因此一种不需要事先进行帧对齐的方法呼之欲出。

此外对于HMM假设一直受到诟病,等到RNN出现之后,使用RNN来对时序关系进行描述来取代HMM成为当时的热潮。

随着神经网络优化技术的发展和GPU计算能力的不断提升,最终使用RNN和CTC来进行建模实现了end-to-end语音识别的声学模型。

CTC的全称是Connectionist Temporal Classification,中文翻译大概是连接时序分类。它要达到的目标就是直接将语音和相应的文字对应起来,实现时序问题的分类。

用公式来描述的话,CTC的公式推导如下:

其中π表示文字序列,X表示语音输入,y表示RNN的输出。由于很多帧可以输出同样的一个文字,同时很多帧也可以没有任何输出,因此定义了一个多对一的函数,把输出序列中重复的字符合并起来,形成唯一的序列,进而公式表示如下:

起始l表示对应的标注文本,而π是带有冗余的神经网络输出。求解上述公式,需要使用前后向算法,定义前向因子

和后向因子:

那么神经网络的输出和前后向因子的关系可以表示为:

进而得到:

利用上述公式,就可以进行神经网络的训练了,这里仍然可以描述为EM的思想:E-step:使用BPTT算法优化神经网络参数;

M-step:使用神经网络的输出,重新寻找最有的对齐关系。

CTC可以看成是一个分类方法,甚至可以看作是目标函数。在构建end-to-end声学模型的过程中,CTC起到了很好的自动对齐的效果。同传统的基于CD-DNN-HMM的方法相比,对齐效果引用文章[Alex Graves,2006]中的图是这样的效果:

/>

这幅图可以理解:基于帧对齐的方法强制要求切分好的帧对齐到对应的标签上去,而CTC则可以时帧的输出为空,只有少数帧对齐到对应的输出标签上。这样带来的差别就是帧对齐的方法即使输出是正确的,但是在边界区域的切分也很难准确,从而给DNN的训练引入错误。

c) End-to-end模型

由于神经网络强大的建模能力,End-to-end的输出标签也不再需要像传统架构一样的进行细分。例如对于中文,输出不再需要进行细分为状态、音素或者声韵母,直接将汉字作为输出即可;对于英文,考虑到英文单词的数量庞大,可以使用字母作为输出标签。

从这一点出发,我们可以认为神经网络将声学符号到字符串的映射关系也一并建模学习了出来,这部分是在传统的框架中时词典所应承担的任务。针对这个模块,传统框架中有一个专门的建模单元叫做G2P(grapheme-to-phoneme),来处理集外词(out of vocabulary,OOV)。在end-to-end的声学模型中,可以没有词典,没有OOV,也没有G2P。这些全都被建模在一个神经网络中。

另外,在传统的框架结构中,语音需要分帧,加窗,提取特征,包括MFCC、PLP等等。在基于神经网络的声学模型中,通常使用更裸的Fbank特征。在End-to-en的识别中,使用更简单的特征比如FFT点,也是常见的做法。或许在不久的将来,语音的采样点也可以作为输入,这就是更加彻底的End-to-end声学模型。

除此之外,End-to-end的声学模型中已经带有了语言模型的信息,它是通过RNN在输出序列上学习得到的。但这个语言模型仍然比较弱,如果外加一个更大数据量的语言模型,解码的效果会更好。因此,End-to-end现在指声学模型部分,等到不需要语言模型的时候,才是完全的end-to-end。

3、 语言模型(Language Model, LM)

语言模型的作用可以简单理解为消解多音字的问题,在声学模型给出发音序列之后,从候选的文字序列中找出概率最大的字符串序列。

关于语言模型,目前最常见的是N-Gram语言模型和基于RNN的语言模型,基于CNN的语言模型facebook也有paper发出来。想深入了解的,可以参考我的这篇回答:

4、 解码

传统的语音识别解码都是建立在WFST的基础之上,它是将HMM、词典以及语言模型编译成一个网络。解码就是在这个WFST构造的动态网络空间中,找到最优的输出字符序列。搜索通常使用Viterbi算法,另外为了防止搜索空间爆炸,通常会采用剪枝算法,因此搜索得到的结果可能不是最优结果。

在end-to-end的语音识别系统中,最简单的解码方法是beam search。尽管end-to-end的声学模型中已经包含了一个弱语言模型,但是利用额外的语言模型仍然能够提高识别性能,因此将传统的基于WFST的解码方式和Viterbi算法引入到end-to-end的语音识别系统中也是非常自然的。然而由于声学模型中弱语言模型的存在,解码可能不是最优的。文章[yuki Kanda, 2016]提出在解码的时候,需要将这个若语言模型减掉才能得到最优结果。公式推导如下:

/>

其中Pr(s|X)是CTC的声学模型,α是权重系数。语言模型部分推导如下:

其中Pr(s|W)是字符到单词的映射,通常是一对一的。因此上述公式可以表示为如下形式:

其中Pr(W)是传统的语言模型,Pr(s)是字符语言模型,β权重系数。上面的公式表示在CTC的模型解码时,语言模型需要进行减先验的操作,这个先验就是声学训练数据中的字符语言模型。

参考文献:

1、Mark Gales and Steve Young, The Application of Hidden Markov Models in Speech Recognition, 2006

2、George E. Dahl, Dong Yu, Li Deng, and Alex Acero,Context-Dependent Pre-Trained Deep Neural Networks for Large-Vocabulary Speech Recognition,2012

3、Alex Graves,Santiago Fern ́andez,Faustino Gomez,Ju ̈rgen Schmidhuber, Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks,2006

4、Alex Graves , Navdeep Jaitly, Towards End-to-End Speech Recognition with Recurrent Neural Networks, 2014

5、Rafal Jozefowicz, Oriol Vinyals, Mike Schuster, Noam Shazeer, Yonghui Wu, Exploring the Limits of Language Modeling, 2016

6、Naoyuki Kanda, Xugang Lu, Hisashi Kawai, Maximum A Posteriori based Decoding for CTC Acoustic Models, 2016

语音识别的技术原理是什么?相关推荐

  1. 「深入浅出」了解语音识别的技术原理和应用价值?

    2019-04-15 20:34:55 语音识别是什么?他有什么价值,以及他的技术原理是什么?本文将解答大家对语音识别的常见疑问. 语音识别技术(ASR)是什么? 机器要与人实现对话,那就需要实现三步 ...

  2. 科普丨一文看懂语音识别的技术原理

    简要给大家介绍一下语音怎么变文字的吧.希望这个介绍能让所有同学看懂. 首先,我们知道声音实际上是一种波.常见的mp3.wmv等格式都是压缩格式,必须转成非压缩的纯波形文件来处理,比如Windows P ...

  3. 详解语音识别的技术原理

    简要给大家介绍一下语音怎么变文字的吧.需要说明的是,这篇文章为了易读性而牺牲了严谨性,因此文中的很多表述实际上是不准确的. 首先,我们知道声音实际上是一种波.常见的mp3等格式都是压缩格式,必须转成非 ...

  4. 微信语音技术原理_语音识别的技术原理是什么?

    鉴于传统架构的语音识别方法在其他的回答中已经有了详细的介绍,这里主要介绍end-to-end语音识别架构,主要涉及到RNN神经网络结构以及CTC. Outline: 1. 语音识别的基本架构 2. 声 ...

  5. 一文读懂语音识别技术原理

    https://www.toutiao.com/a6651440650308813319/ 2019-01-28 15:06:47 语音识别是十年来发展最快的技术之一,随着AI的不断发展,深度学习让语 ...

  6. 语音识别初探——一文读懂语音识别技术原理

    语音识别是十年来发展最快的技术之一,随着AI的不断发展,深度学习让语音识别技术得到了质的飞跃,开始从实验室走向市场,并逐步走到人们的生活中. 我们现在所用的语音输入法,以及以语音为智能交互入口的智能家 ...

  7. 语音识别ASR技术通识

    语音识别ASR技术通识 语音识别(Automatic Speech Recognition),一般简称ASR:是将声音转化为文字的过程,相当于人类的耳朵. 语音识别原理流程:"输入--编码- ...

  8. 语音识别(3)---语音识别技术原理

    语音识别技术原理 首先,我们知道声音实际上是一种波.常见的mp3.wmv等格式都是压缩格式,必须转成非压缩的纯波形文件来处理,比如Windows PCM文件,也就是俗称的wav文件.wav文件里存储的 ...

  9. 智能语音识别系统_语音识别技术原理_智能语音识别系统如何识别用户意图_企业服务汇...

    编者按:智能语音识别系统目前已经实现商业化应用,广泛应用于客服行业,包括智能语音客服和智能客服呼叫中心.那么智能语音识别系统如何识别客户意图,如何判断智能客服系统的语音识别能力呢?本文我们将结合语音识 ...

最新文章

  1. oracle中取最新的前几条记录(rownum)
  2. forward、redirect、浏览器的路径问题
  3. 神经网络参数量和计算量计算
  4. Java agent初探
  5. 3. OD-爆破有钥匙的exe(有验证文件,如KeyFile.dat)
  6. javascript 多线程异步队列
  7. MockingBot for Mac(原型设计协同插件)sketch插件
  8. 携手做大做强中国集成电路产业链
  9. 全球及中国汽车零部件用模塑料行业盈利预测及投资前景分析报告2021年版
  10. java 高德地图工具类
  11. 多用户商城系统有哪些盈利模式?
  12. DNF 单机游戏 手机游戏 网络游戏 推荐游戏 TXT 小说 外挂 辅助
  13. .NET Core容器化(Docker)
  14. 在nginx上部署vue项目(history模式)--demo实列;
  15. 基于VNPY实现网格策略实盘(币圈)
  16. MBR和GUID区别
  17. BlockingQueue 使用
  18. git学习(2)gitlab 使用
  19. 中芯微761的随身WiFi怎么切卡去除后门
  20. React获取到用户当前位置

热门文章

  1. 常用animation动画
  2. HDU 1207 汉诺塔II (递推)
  3. PencilWang博客目录
  4. 使用Hash函数和MAC产生伪随机数
  5. [DB2]DB2中的数值类型
  6. ThoughtWorks培训经历及所想
  7. UVA10882 Koerner's Pub【数学】
  8. UVa834 Continued Fractions【连分数】
  9. I00007 打印菱形字符图案
  10. 正则表达式 —— 括号与特殊字符