语音专题第四讲,语音识别之解码器技术简介|大牛讲堂

雷锋网按:本文作者潘复平,地平线机器人语音识别算法工程师。博士毕业于中国科学院声学研究所,曾任声学所副研究员、百度语音技术部资深工程师等职位。在中科院工作期间曾领导完成多个"863"、教育部和中科院的科研项目。在百度工作期间把解码器的搜索空间大小压缩到了原来的十分之一,解码速度提高了约30%,并在置信度、VAD等方面大幅提高了系统性能。现任地平线机器人语音识别算法工程师,深度参与地平线“安徒生”智能家居平台的研发。

语音识别技术,也被称为自动语音识别(Automatic Speech Recognition,ASR),其目标是将人类语音中的词汇内容转换为计算机可读的输入,例如按键、二进制编码或者字符序列。与说话人识别及说话人确认不同,后者尝试识别或确认发出语音的说话人而非其中所包含的词汇内容。

智能硬件行业的不断发展,对计算机深度学习能力提出了更大的挑战。为了满足人工智能技术快速产品化的诉求,进一步提升用户体验,未来的智能终端必须具备出色的与人交流、沟通的能力。人工智能产品这种交互功能的实现是与语音解码器技术密切相关的。本期“大牛讲堂”主讲潘复平博士将为我们科普高大上的“语音识别专题”之语音解码技术。

基本原理

当前主流的语音识别系统多基于统计理论的贝叶斯准则其典型框架一般包含前端处理、声学模型、语言模型、解码器和后处理等五个基本模块。解码器模块主要完成的工作包括:给定输入特征序列的情况下,在由声学模型、声学上下文、发音词典和语言模型等四种知识源组成的搜索空间(Search Space)中,通过维特比(Viterbi)搜索,寻找最佳词串,使得满足:

(1.1)

通过贝叶斯公式,公式(1.1)可以改写为:

(1.2)

其中,分母项无关,被省略。除了上述最优路径,如果在Viterbi搜索中还保留了次优路径,则解码器可同时产生包含多候选识别结果的词图。

引入隐马尔可夫模型和N元文法语言模型,公式(1.2)可表示为:

(1.3)

其中为单词的状态转移序列,为状态转移概率。

公式(1.3)中,已经引入了Viterbi最大近似假设,这个假设会带来一定的精度损失,但是其运算量却大大降低。在解码过程中,各种解码器的具体实现可以是不同的。按搜索空间的构成方式来分,有动态编译和静态编译两种方式。关于静态编译,是把所有知识源统一编译在一个状态网络中,在解码过程中,根据节点间的转移权重获得概率信息。

由AT&T提出的Weighted Finite State Transducer(WFST)方法是一种有效编译搜索空间并消除冗余信息的方法。就动态编译而言,只是预先将发音词典编译成状态网络构成搜索空间,其他知识源在解码过程中根据活跃路径上携带的历史信息动态集成。

按搜索算法的时间模式来分,有异步与同步两种方式。时间异步的搜索算法通过栈解码器(Stack Decoder)来实现。时间同步的方法就是常说的Viterbi解码。基于树拷贝的帧同步解码器是目前比较流行的方法。下面将针对搜索空间的两种构成方式与帧同步解码算法作进一步详细介绍。

动态解码网络

动态解码网络仅仅把词典编译为状态网络,构成搜索空间。编译的一般流程为:首先把词典中的所有单词并联构成并联网络;然后把单词替换为音素串;接着把每个音素根据上下文拆分为状态序列;最后把状态网络的首尾根据音素上下文一致的原则进行连接,构成回环。这样编译出来的网络一般称为线性词典(Linear Lexicon)(如图2-1),它的特点是每个单词的状态序列保持严格独立,不同单词的状态之间没有节点共享,因此内存占用比较大,解码过程中的重复计算比较多。

为了克服这些缺点,一般把单词首尾发音相同的部分进行合并,称为树型词典(Tree Lexicon)(如图2-2)。由于大量相同状态的节点被合并在一起,因此可以显著降低搜索空间的规模,减少解码过程的运算量。

图2-1 线性词典示例

图2-2 树形词典示例

基于树拷贝的动态规划搜索算法

在树形词典构成的搜索空间中进行动态解码,如果使用N-Gram语言模型,当前词的ID只有在搜索到达树的叶子节点时才能知道。这样,语言模型的概率只有在达到N-Gram中第N个单词的结束状态后才能集成。为了能够应用动态规划准则,常用的做法是采用“树拷贝”(Tree Copy)的方式来组织搜索空间:对于每个前驱词历史,我们引入词典树的一份拷贝,这样在搜索的过程中,当单词结束的假设出现时,我们总能够知道它的前驱词历史。为了方便描述,下面以Bi-Gram语言模型为例介绍解码搜索算法。

基于树拷贝的解码搜索需要用到动态规划(Dynamic Programming,DP)算法。动态规划的主要意图是把一个全局最优问题的求解分解为小的局部问题并且形成递归联系。

下面首先引入两个变量的定义:

表示时刻t到达前驱词为v的词典树状态s的最佳部分路径得分。

表示时刻t到达前驱词为v的词典树状态s的最佳部分路径起始时间。

这两个变量的计算可以采用如下的迭代公式:

(3-1)&(3-2)

这里表示前驱词为v时假设(t, s)的最佳前驱状态。后向指针只是简单的根据动态规划的决策进行传播。

在词的边界,我们需要为每个单词w找到它的最佳前驱词v。为此我们定义:

(3-3)

这里表示词典树中单词w的结束状态。为了能够向下一个单词传播路径假设,我们需要在处理时刻t的数据帧前传递分数和时间索引:

(3-4)&(3-5)

算法的流程见表3-1。从表中可以看出,DP递归包含两个层次:

声学层,主要是处理词内部一些假设的重新组合;

词对层,处理Bigram语言模型的使用。

该搜索过程是一个时间同步宽度有限的搜索策略。为了降低存储量的需要,可以引入一个回溯数组用于记录在每一个时间帧的词边界(v, w)和它们的开始时间。在句子的结束处,通过对回溯数组的一些查找操作可以很轻松地获得识别出来的单词序列。

束剪枝

对于大词表连续语音识别中的完全DP搜索,在每个时间帧,DP递归程序面临巨大数目的HMM状态。如果采用一定的剪枝策略,则可以把计算量降低,同时保证识别率基本不下降。常用的剪枝操作主要从如下三个方面进行:

  • 全局累计概率剪枝

根据搜索空间中所有活跃路径累计概率的最大值,设定一个门限,把累计概率小于该门限的那些路径裁剪掉。

  • 语言模型剪枝

当活跃路径到达单词末尾后,可以取得单词ID,同时在累计概率中加入语言模型得分。由于语言模型概率的加入,增大了不同路径间的概率区分性,因此可以把到达词尾的路径归集在一起,根据累计概率最大值设置门限,把累计概率小于门限的那些路径裁剪掉。

  • 直方图剪枝

这种剪枝方法是绘制活跃路径累计概率的直方图分布,然后根据事先设定的最大允许活跃路径数量上限,算出合适的累计概率门限,把小于门限的活跃路径裁剪掉,以避免路径数量的爆炸性增长。

静态解码网络

大词表连续语音识别所常用的四类模型:HMM、跨词三音子模型、词典以及语言模型,实际上是在不同粒度上描述了可能的搜索空间:

1、HMM 模型定义了每个三音子所对应的HMM状态序列。语音识别时,通过对每一帧所对应的状态进行假设,可以在HMM的状态序列上进行搜索,从而产生可能的三音子序列;

2、跨词三音子模型定义了从三音子到音素的对应关系。根据HMM模型产生的三音子序列,可以得到可能的音素序列;

3、词典定义了音素序列所表示的词。根据跨词三音子模型产生的可能的音素序列,可以得到相应的词序列;

4、语言模型定义了词序列出现的概率。根据词典产生的词序列,可以得到该序列的概率得分;

上述过程是非常复杂的,系统需要同时考虑4类模型以及模型之间的约束关系,以完成“从可能的状态序列到可能的词序列之间的转换”。

20世纪90年代末期,美国电话电报公司(AT&T)的Mohri率先提出了以加权有限状态转换器(Weighted Finite-state Transducer: WFST)对语音识别过程中所使用的各种模型进行描述。此后,相关的研究纷纷出现。与传统动态网络解码相比,基于WFST的识别系统在识别之前利用上述模型产生语音识别用的静态解码网络,这个网络包含了所有可能的搜索空间。

在此基础上进行语音识别时,系统只需要将这个识别网络(WFST网络)读入内存,然后基于声学模型就可以在这个网络上完成解码,不需要像原有系统那样同时考虑声学模型、词典、语言模型等。这样简化了语音识别系统的设计与实现。实验表明,用WFST构建的语音识别系统具有识别速度快,识别效果好的特性。

所谓静态网络就是根据已知的模型,将它们代表的搜索空间进行组合,从而得到一个统一的识别网络:从输入HMM状态序列,直接得到词序列及其相关得分。基于WFST构建静态解码网络是一个相对复杂的过程。构建网络的第一步是将上述四类模型转换成WFST表示。然后再依次进行WFST网络的合并和压缩,从而得到完整的语音识别静态搜索空间。

我们用H、C、L、G分别表示上述HMM模型、三音子模型、字典和语言模型的WFST形式。不难看出,这四个模型在语音识别中相当于4个串联的子系统。每一个子系统的输出是下一个子系统的输入。使用WFST的合成操作可以实现将上述串联系统组合成一个 WFST。使用HMM的状态序列作为这个 WFST的输入时,系统将直接输出词序列以及相应的得分。

但是,直接求空间复杂度较高,合成的结果占用内存非常之大。为了在有限的内存中完成解码网络的构建,需要对信息逐步引入,并在每一步引入信息之后进行优化,为下一步引入信息做准备。同时,建立好静态解码网络后,还需要进一步的优化,使得网络能够有较小的体积。基于上述思想,一般网络构建的流程为:

(5.1)

其中的det表示确定化算法;min表示最小化算法;为 ε-Removal 算法。式(5-1) 在逐步引入信息的同时采用确定化算法对网络结构进行优化。而在将所有信息引入后,需要采用WFST的最小化算法以及ε-Removal算法完成进一步的优化,使得形成的识别网络较小。

基于静态解码网络的搜索算法与基于动态网络的动态规划搜索算法类似,也是采用了迭代计算,让概率信息在网络节点间传递更新。不同之处在于,由于静态网络已经把搜索空间全部展开,所以它不需要根据解码路径的前驱词构造搜索空间副本,也不需要在词尾节点根据历史信息查询语言模型概率,它只需要根据节点间的转移权重计算声学概率和累计概率即可,因此解码速度非常快。

雷锋网(公众号:雷锋网)注:本文由大牛讲堂授权雷锋网发布,如需转载请联系原作者,并注明作者和出处,不得删减内容。有兴趣可以关注公号地平线机器人技术,了解最新消息。

本文作者:大牛讲堂

本文转自雷锋网禁止二次转载,原文链接

时间: 2024-08-31 11:40:51

语音专题第四讲,语音识别之解码器技术简介|大牛讲堂的相关文章

大牛讲堂 | 语音专题第二讲,语言模型技术

雷锋网(公众号:雷锋网)注:曹立新,地平线机器人语音算法工程师.2011年7月毕业于哈尔滨工业大学计算机科学与技术专业,曾任百度语音资深研发工程师.负责百度超大语言模型训练,语音交互技术研发以及语音搜索.语音输入法.语音助手等产品的语音识别优化.现在地平线负责语音识别.自然语言处理等相关技术算法研究. 语言模型技术 语言模型技术广泛应用于语音识别.OCR.机器翻译.输入法等产品上.语言模型建模过程中,包括词典.语料.模型选择,对产品的性能有至关重要的影响.语言模型的建模需要利用复杂的模型公式进行

大牛讲堂 | 语音专题第一讲,麦克风阵列的语音信号处理技术

雷锋网按:徐荣强(Kevin),地平线硬件音频工程师.2011年11月毕业于英国爱丁堡大学通信与信号处理专业,曾任诺基亚,联想,微软高级音频工程师.现在Horizon-Robotics负责语音相关硬件系统设计,涉及远场高灵敏度麦克风阵列设计,高精度音频硬件编解码器评估验证,远场语音前处理算法的评估验证,涉及声源定位,波束形成,盲信号分离,回声抑制及平稳降噪等相关技术算法. 麦克风阵列的语音信号处理技术 熟悉人工智能的朋友一定明白,语音交互对于人机对话交互的重要意义,而一个完整的语音交互涉及到人的

大牛讲堂|语音专题第三讲,声学模型

雷锋网(公众号:雷锋网)按:本文作者牛建伟,地平线语音算法工程师.硕士毕业于西北工业大学,曾任百度语音技术部资深工程师.主要工作方向是语音识别中声学模型的算法开发和优化,负责深度学习技术在声学模型上的应用和产品优化.参与了百度最早的深度学习系统研发,负责优化语音搜索.语音输入法等产品:后负责百度嵌入式语音开发,其负责的离线语音识别性能超越竞品.现任地平线机器人语音识别算法工程师,深度参与地平线"安徒生"智能家居平台的研发. 声学模型 语音技术在近年来开始改变我们的生活和工作方式.对于某

《ArcGIS Engine+C#实例开发教程》第四讲 状态栏信息的添加与实现

原文:<ArcGIS Engine+C#实例开发教程>第四讲 状态栏信息的添加与实现 摘要:在上一讲中,我们完成了 MapControl 和PageLayoutControl两种视图的同步工作,本讲我们将完成状态栏信息的添加与实现.应用程序的状态栏一般用来显示程序的当前状态,当前所使用的工具. GIS应用程序一般也在状态栏显示当前光标的坐标.比例尺等信息.学习完本讲内容,您将学会状态栏编程的基本方法,并且能够在我们的程序的状态栏中添加且显示以下信息:当前所用工具信息.当前比例尺.当前坐标.  

LFCS 系列第四讲:对存储设备分区、格式化文件系统和配置交换分区

LFCS 系列第四讲:对存储设备分区.格式化文件系统和配置交换分区 去年八月份,Linux 基金会发起了 LFCS(Linux 基金会认证系统管理员Linux Foundation Certified Sysadmin)认证,给所有系统管理员一个展现自己的机会.通过基础考试后,他们可以胜任在 Linux 上的整体运维工作:包括系统支持.一流水平的诊断和监控以及在必要之时向其他支持团队提交帮助请求等. LFCS 系列第四讲 需要注意的是,Linux 基金会认证是非常严格的,通过与否完全要看个人能力

BrnShop开源网上商城第四讲:自定义插件

原文:BrnShop开源网上商城第四讲:自定义插件 重要通知:BrnShop企业版NOSQL设计(基于Redis)已经开源!源码内置于最新版的BrnShop中,感兴趣的园友可以去下载来看看.官网地址:www.brnshop.com. 好了现在进入今天的正题:自定义插件.上一讲中我们已经阐述了BrnShop插件的工作机制,现在我们详细介绍下如何自定义插件.首先BrnShop的插件从功能上分为三类,分别是: 开放授权插件(OAuth) 支付插件 配送插件 对应的接口文件(注:位于BrnShop.Co

Javascript基础与面向对象基础~第四讲 Javascript中的类对象

今天来说JS中如何实现类(class),事实上本应该昨天晚上写的,可我失言了,在些说一声"抱歉"!JS中的类是JS面向对象的基础,也是我最拿手的东西,你写的代码能否提高一个层次,一般是从这点上看出来的. 占占对类的定义: 类是对现实中的事物的抽象,一个类一般由属性和方法构成,属性是一些固定的信息,而方法是类的某种行为,类往往用来抽象一些复杂的对象,类与类这间可以进行继承,一般通过JS的function实现,JS中的类对象是实现JS面向对象的基础. 占占对结构体的定义: 一个结构体也是对

开发人员应该对IIS理论层的知识了解的多一些~第四讲 HttpModule中的几大事件

本文主要介绍HttpModule,它在一个网页请求过程中是一个怎样的过程是我们要知道的,在网页加载过程中HttpModule在何时被执行也是我们要知道的,以及,HttpModule在网页请求过程中,所被触发的各个事件也是我们要知道的,下面就带着问题来看文章吧 ASP.NET对请求处理的过程 当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给 ASPNET_ISAPI.dll(否则交给对应的应用程序去解释它),ASPN

架构,改善程序复用性的设计~第四讲 方法的重载真的用不到吗?

在第三讲中我们主要关注了代码重构的思想,从方法重构到类重构再到项目重构,这是一个过程,一种思想上的升华,今天将继续我们"程序复用性设计"的旅程,说一下方法重载的重要性. 细心的朋友一定会非常关注net frameworks的源代码,即使只能看到它内部方法的定义,也足够了,在System.Web.Mvc这个命名空间下定义了很多关于MVC架构的东西,我们就以它为例来说一下方法重载吧! 重载的好处: 1 对方法调用的程序员来说,它是友好的(程序员只关心自己调用的方法签名即可,不用管参数为NU