Kaldi语音识别实战(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-09 16:53:32

点击下载

作者:陈果果 等

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Kaldi语音识别实战

Kaldi语音识别实战试读:

前言

在过去的几年里,语音相关产业发展迅速,产品形态五花八门。在消费电子领域,随着语音输入、语音搜索、智能助手等产品的出现,一场人人交互和人机交互的变革正在我们身边发生。语音产业的上一次爆发出现在20世纪80年代至90年代:隐马尔可夫模型的应用,使大规模连续语音识别成为可能——这意味着用户在人机语音交互时,得以摆脱字正腔圆、一词一顿的刻板方式。在过去的十年间,随着深度学习技术的强势崛起和以GPU为代表的算力硬件的爆发,语音类产品(包括但不限于语音转文字、说话人识别、语种识别等)的使用体验又一次得到了显著的提升。更重要的是,深度学习技术带来的使用体验的提升,使语音技术更加接近商用,促成了语音产品和语音数据之间的良性循环:相比传统模型,基于深度神经网络的语音识别系统总是能更有效地利用持续增长的数据量,提升识别性能,而识别性能的提升,又会激发更多的产业应用,打通海量语音数据的获取渠道,进一步优化模型。

随着语音算法的逐代升级,语音技术链路的相关研发工具也逐步成型和完善,其中的代表是 HTK 和 Sphinx 工具集,这两个工具集都能够完成从模型的训练到产品原型的搭建等一系列工作,并催生了一批以语音识别为核心技术的公司。在20世纪90年代末,这两个工具集先后开源,再次降低了语音识别和相关领域的研发门槛与成本。

在最近的十年里,新一代的开源项目Kaldi逐步取代了 HTK 和 Sphinx 的统治地位,成为了流行的开源语音工具箱。Kaldi 诞生之初就汲取了其他语音项目的经验,并以语音识别为核心进行全局的设计:包含自成一派的文件I/O及存储、数据处理流水线、模型训练流水线,以及采用高效且优雅的加权有限状态机(WFST)作为语音识别解码的统一框架,并提供了离线/在线识别原型等。

Kaldi 项目发布不久,就吸引了国内外的大量用户,形成了一个活跃的开源社区。在社区中,有国际顶尖的语音科学家、探索新边界的博士研究生,也有初探语音识别的初学者、其他技术领域想使用语音技术的工程师,当然还有经历了HTK时代的老用户们。截至本书完稿时,Kaldi 在 GitHub 上的官方项目中获得的星标和子仓库合计已超过一万个。

尽管 Kaldi 工具箱的出现在很大程度上降低了语音识别技术的研究门槛,但与其他AI技术相比,它的语音识别技术本身链路复杂、模块多样、领域知识点众多;此外,目前 Kaldi 社区的活跃开发者们更关注推进核心技术,因此在文档建设方面,还停留在项目早期的设计理念及核心概念阶段,文档稀缺;再加上市场上少有 Kaldi相关的教程和书籍,尤其是中文书籍,更使得国内用户在入门语音识别技术及上手Kaldi 工具箱时,面临比较陡峭的学习曲线。

本书的作者来自 Kaldi 的开发团队、开源社区和企业用户,具有多年的语音研发经验和 Kaldi 使用经验。笔者长期在各Kaldi 社群中为普通用户答疑,交流的主题大致可以分为四类,即语音识别的基础理论、Kaldi 中的具体算法实现、Kaldi 工具箱的用法、搭建语音系统中经常遇到的实际问题。本书致力于系统梳理以上四类问题,深入浅出地介绍语音识别各个模块的原理,厘清 Kaldi 中各种实践技巧的来龙去脉,并结合示例解析,展示如何使用 Kaldi 构建语音识别、关键词检索、说话人识别和语种识别系统。

本书假定读者具备基础的编程知识和最基本的机器学习概念。笔者在行文中注重示例解析,尽量避免公式推导,注重阐述核心问题及对应算法的直观意义,力图帮助读者快速建立语音技术的宏观视角,并熟悉 Kaldi 工具箱的微观样貌。没有语音背景的读者,可以把本书当作快速上手语音研发的入门参考书。同时,对于一些没有详细展开的理论知识点,本书给出了相关的经典论文或参考文献,供有兴趣、有能力的读者进一步纵向深入掌握。

Kaldi 是一个仍在持续演进并快速迭代的开源项目,在 Kaldi 发布10周年之际,藉以此书对其发展历史做一个回顾,对当前状态做一次汇总,愿与广大中文 Kaldi 用户一同展望语音行业的美好未来。作 者2019年12月

读者服务

微信扫码回复:37874

· 获取博文视点学院20元优惠券

· 获取免费增值资源

· 加入读者交流群,与更多读者互动

· 获取精选书单推荐1 语音识别技术基础1.1 语音识别极简史

人类用机器处理自己语音的历史可以追溯到18世纪。在18世纪末、19世纪初,奥匈帝国的发明家Wolfgang von Kempelen设计并打造了一款手工操作的机器,可以发出简单的声音。在19世纪末的时候,美国的发明家Thomas Edison发明了留声机,被认为是人类处理语音历史上的一座里程碑。然而,语音识别,也就是让机器自动识别人类的语音,这个工作其实到20世纪中叶才有了实质性的进展。一般认为,现代语音识别起始的一个重要时间点是1952年贝尔实验室发布了一个叫作Audrey的机器,它可以识别one、two等十个英文单词。

从20世纪50年代到现在也不过70年左右的时间,语音识别的技术及效果却有了翻天覆地的变化。从早期效果极其不稳定的简单的数字识别,到现在效果达到日常生活实用要求的大词汇量连续语音识别,语音识别经历了数次技术革命,每次技术革命都带来了语音识别系统效果的质变。下面简单介绍语音识别发展历史上几个非常重要的时间节点。1.1.1 语音识别早期探索

与很多技术发展是从模仿人或动物的生理工作原理开始一样,早期的语音识别探索也试图从人如何听懂语音打开突破口。这个阶段的语音识别工作很多都把工作重心放到人类理解语音的各个环节上,并且试图用机器去逐个攻克这些环节,包括词意、句法、语法等。

基于模板匹配的语音识别方法是这个阶段比较成功的方法,其大致原理是:将训练语料中的音频提取声学特征后保存起来作为模板,当有新的音频输入机器的时候,机器会用同样的方式提取声学特征,并且和之前保存的语料特征做比较,如果新提取的特征和已经保存的模板特征比较接近,则认为两者输入的词语是同样的,系统输出模板对应的文字。基于模板匹配的方法可以在一些精心控制的场景(比如环境比较安静、系统开发者自己测试等)下得到不错的识别效果,但是在环境比较复杂,或者说话比较随意的时候,效果往往就不太理想。1.1.2 概率模型一统江湖

从20世纪70年代开始,一批具有信息论背景的研究人员进入语音识别领域,并且开始将通信工程中常用的概率模型引入语音识别领域。这其中的杰出代表是Frederick Jelinek博士。Frederick Jelinek博士早期在康奈尔大学从事信息论的研究,1972年在学术休假期间,Frederick Jelinek博士加入IBM华生实验室(IBM T.G.Watson Labs)并领导了语音识别实验室。Frederick Jelinek博士深厚的信息论背景使他敏锐地觉察到语音识别并不是一个仿生学问题,而是一个完美的统计学问题。他抛弃了早期语音识别工作中词意、句法、语法等一系列对人类理解语音来说非常重要的概念,转而用统计模型对语音识别问题进行建模。他对此的一个经典解释是:飞机飞行并不需要挥动翅膀(Airplanes don′t flap their wings)。言外之意是,计算机处理人类的语音,并不一定需要仿照人类处理语音的方式,句法、语法这些在人类语言学中很重要的概念,在语音识别中并不见得是决定因素。

虽然用概率模型来解决语音识别问题的思路从20世纪70年代开始就被提出来了,但是直到20世纪80年代,概率模型才逐渐代替老旧的基于模板、语言学等思路的方法,开始走到语音识别舞台的中心。在这个过程中,隐马尔可夫模型(Hidden Markov Model)在语音识别中的应用居功至伟。不同于早期的方法,隐马尔可夫模型使用两个随机过程,即状态转移过程和观察量采样过程,将从声音特征到发音单元的转换过程建模成一个概率问题,通过已经有的语音数据训练隐马尔可夫模型的参数。在解码时,利用相应的参数,估计从输入声学特征转换成特定发音单元序列的概率,进而得到输出特定文字的概率,从而选取最有可能代表某一段声音的文字。隐马尔可夫模型的应用一方面大大减少了语音识别系统对专家(如语言学家)的依赖,从而降低了构建语音识别系统的成本;另一方面,区别于基于模板的一些方法,隐马尔可夫模型可以从更多的语音数据中来估计更好的参数,从而使得相应的语音识别系统在实际应用中的结果更加稳定。

基于统计模型的语音识别方法,或者更确切地说,基于隐马尔可夫模型的语音识别方法,极大地提高了语音识别的准确率和稳定性,为语音识别的商业应用打下了坚实的基础。在接下来的三十多年的时间中,基于隐马尔可夫模型的语音识别方法基本上垄断了语音识别领域,直到2010年左右神经网络模型在语音识别建模中兴起。1.1.3 神经网络异军突起

确切地说,神经网络模型也是概率模型中的一种。神经网络在语音识别中的应用,其实从20世纪80年代中后期便已经开始。早期神经网络在语音识别系统中的应用,还是以和隐马尔可夫模型配合使用为主,也即后来所说的“混合模型”。在标准的隐马尔可夫模型中,从隐含发音状态输出可观察量的时候,需要对输出的概率分布进行建模。在经典的基于隐马尔可夫模型的语音识别系统中,这个过程一般是用高斯混合模型(Gaussian Mixture Model)来建模的。在“混合模型”中,高斯混合模型被神经网络所代替,由神经网络对输出的概率分布进行建模。这其中使用的神经网络可以是前馈神经网络、递归神经网络等各种神经网络。然而,受到计算资源、训练数据、神经网络本身训练方法等各种因素的影响,神经网络一直没有能够代替高斯混合模型,成为主流语音识别系统的一部分。

在2010年左右,微软的研究人员开始重新审视神经网络在语音识别系统中的应用。他们发现,如果以上下文相关的三音子作为神经网络的建模单元,并且用最好的基于隐马尔可夫、高斯混合模型的语音识别系统生成的对齐数据作为神经网络的训练数据,适当调节隐马尔可夫模型的转换概率,在当时的计算资源和训练数据(几百小时)下,所生成的基于隐马尔可夫模型、神经网络模型的语音识别系统(NN-HMM)的效果会远远好于对应的基于隐马尔可夫、高斯混合模型(GMM-HMM)的语音识别系统的效果。由于是隐马尔可夫模型和神经网络模型同时使用,因此这样的系统当时也被称为“混合系统”或“混合模型”。研究人员进而惊喜地发现,随着计算资源和训练数据的增加,“混合模型”的效果也在不断地变好。对比早期的“大规模”语音识别系统所使用的几百个小时的训练数据,现在成熟的商用语音识别系统往往采用上万小时的训练数据,得益于计算资源的丰富及并行化技术的发展,这样规模的训练往往可以在1~2周内完成。神经网络的引入让语音识别系统的效果有了质的提升,让语音识别技术进入千家万户、成为日常生活中的一部分成为了可能。

在2014年左右,谷歌的研究人员进一步发现,当使用特殊的网络结构时,“混合模型”里面的隐马尔可夫模型其实也可以被替换掉。研究人员使用双向长短期记忆神经网络(Bidirectional long short-term memory network),附之以一个叫作Connectionist Temporal Classification(CTC)的目标函数,可以直接将音频数据转换成文字,而不需要经过传统的基于隐马尔可夫模型的语音识别系统中的中间建模单元(比如基于上下文的三音子建模单元)。由于这种系统直接将音频转换成文字,所以也被称作“端到端”系统。目前,虽然基于隐马尔可夫模型的语音识别系统仍然大量存在于商业系统中,但是同时,随着更多神经网络结构被应用到“端到端”系统中,基于神经网络的“端到端”语音识别系统的效果也一直在提升,科技巨头如谷歌也逐渐将“端到端”系统应用到他们的商业系统中。在可预见的未来,神经网络模型或许可以完全代替隐马尔可夫模型在语音识别技术中的应用。1.1.4 商业应用推波助澜

技术的发展和商业的应用往往是相辅相成的。一方面,技术本身的进步可以使得商业应用成为可能,或者增加商业应用的价值;另一方面,商业的应用可以为技术的发展提供更多的资源,从而推动技术的进步。语音识别技术从最初的探索到目前进入千家万户的经历,完美地阐述了这个过程。

得益于20世纪70年代概率模型的发展,以及20世纪80年代隐马尔可夫模型的大规模应用,在20世纪80年代末、90年代初,语音识别技术在一些可控的场景(比如安静的朗读场景)下已经初步进入商用门槛。1990年,Dragon Systems公司发布了第一款语音识别商用软件Dragon Dictate。Dragon Dictate使用了当时新兴的隐马尔可夫模型,但是受限于计算机的算力,Dragon Dictate并不能自动对输入的语音分词,因此用户在说出每个单词后都必须停顿,然后让Dragon Dictate转写。尽管如此,Dragon Dictate的售价依然高达9000美元。7年之后,1997年,Dragon Systems公司推出了Dragon Dictate的后续版本Dragon NaturallySpeaking。这个版本已经可以支持连续语音输入,1分钟可以处理大约100个单词,但是为了得到更好的效果,需要用户提供大约45分钟的语音数据对模型调优。Dragon NaturallySpeaking的售价也由其前任的9000美元下降到大约700美元。值得一提的是,经过一系列的合并与收购操作之后,Dragon NaturallySpeaking产品及其品牌最终被在语音识别领域大名鼎鼎的Nuance Communications公司获得,其后续版本至今仍在销售。

经过20世纪90年代的商业验证,语音识别技术在21世纪初期持续发展,识别率也稳步攀升。语音识别技术逐渐进入当时主流的操作系统,如Windows Vista、Mac OS X等,作为键盘和鼠标输入的备选方案。然而,在20世纪第一个10年中的绝大部分时间里,语音识别技术的用户使用率都非常低,究其原因,还是因为不够准确、不够简单,使用成本相对于键盘和鼠标的使用成本更高。这个局面直到2008年末才有改观。2008年11月,谷歌在苹果手机上发布了一个语音搜索的应用,让用户可以用语音输入搜索指令,然后在谷歌自己的搜索平台上进行搜索。区别于Dragon NaturallySpeaking等商业的语音识别系统在本地机器上处理语音数据,谷歌的语音搜索应用选择将音频数据传输到谷歌的服务器进行处理,依托谷歌强大的算力,可以使用非常复杂的语音识别系统,从而大大提升了语音识别的准确率。同时,由于苹果手机上屏幕键盘比较小,输入不方便,语音输入的用户体验大大超过了键盘输入的用户体验,语音识别的用户使用率开始节节攀升。

智能手机似乎是为语音识别量身定制的一个应用场景。2010年,语音助手Siri作为一个独立的应用出现在苹果手机上,苹果公司迅速收购了这个独立的应用,并于2011年在苹果手机iPhone 4S上正式发布了默认的语音助手Siri。Siri的发布在语音识别技术的应用上具有里程碑的意义:成千上万的用户开始知道并且逐渐使用语音识别技术。值得一提的是,语音识别开源软件Kaldi于2009年在约翰霍普金斯大学开始开发,与谷歌语音搜索应用、苹果语音助手Siri的发布处于同一个时期。

谷歌语音搜索应用和苹果语音助手Siri的发布,一方面引导了用户,让用户在日常生活中逐渐接受了语音识别技术;另一方面,也为语音识别技术的发展积累了海量的用户数据。同一时期,神经网络被再度考虑应用到语音识别技术中,神经网络的训练需要海量的计算能力和用户数据,科技公司如谷歌、苹果、微软在公司发展早期所积累的计算能力,以及他们通过语音搜索、语音助手等应用所积累的海量用户数据,为神经网络在语音识别中的应用打下了坚实的基础。这些新的数据和新的模型被反馈回语音识别技术中,进一步推动了语音识别技术的发展。

2014年,亚马逊发布了一个带有语音助手的智能音箱Echo,将语音识别技术从近场语音识别推向了远场语音识别。不同于谷歌的语音搜索应用和苹果的语音助手Siri,亚马逊的智能音箱Echo并不需要用户贴近麦克风说话。相反,用户在家里任何位置说话,语音助手都可以正确地处理语音并且响应。亚马逊的Echo将语音交互的体验又推上了一个台阶。继亚马逊之后,国外科技巨头如谷歌、苹果,国内科技巨头如百度、阿里巴巴、小米,都纷纷推出了自己的带语音助手的智能音箱,语音识别开始进入百花齐放、百家争鸣的时代。语音识别技术也由最初只能在可控场景下勉勉强强地工作,发展到现在可以在非常真实的场景下非常稳定地工作。1.2 语音识别系统架构1.2.1 经典方法的直观理解

为了让没有接触过语音识别的读者可以对语音识别原理有一个快速的认识,本节将尽可能使用通俗的语言,简短直观地介绍经典语音识别方法。

首先,我们知道声音实际上是一种波。语音识别任务所面对的,就是经过若干信号处理之后的样点序列,也称为波形(Waveform)。图1-1是一个波形的示例。图1-1 用波形表示的语音信号

语音识别的第一步是特征提取。特征提取是将输入的样点序列转换成特征向量序列,一个特征向量用于表示一个音频片段,称为一帧(Frame)。一帧包含若干样点,在语音识别中,常用25ms作为帧长(Frame length)。为了捕捉语音信号的连续变化,避免帧之间的特征突变,每隔10ms取一帧,即帧移(Frame shift)为10ms,如图1-2所示。图1-2 语音信号的分帧

采样是声波数字化的方法,而分帧是信号特征化的前提,分帧遵循的前提是,语音信号是一个缓慢变化的过程,这是由人类发声器官决定的,因此在25ms内,认为信号的特性是平稳的,这个前提称为短时平稳假设。正是有了这个假设,可以将语音信号转换为缓慢变化的特征向量序列,进而可以通过时序建模的方法来描述。

在现代语音识别系统中,以隐马尔可夫模型(HMM)为基础的概率模型占据了绝对的主导地位。语音识别开源软件Kaldi也是围绕着以隐马尔可夫模型为基础的概率模型来设计的。为了进行语音识别,所有常见的发音组合可以表示成一个巨大的有向图,这可以用HMM进行建模。语音的每一帧都对应一个HMM状态。如果读者熟悉经典HMM理论,则知道可以从HMM中搜索累计概率最大的路径,其搜索算法为维特比(Viterbi)算法。HMM中累计概率最大的路径所代表的发音内容就是语音识别的结果。这个搜索过程在语音识别中也叫作解码(Decode)。路径的累计概率通过概率模型获取。下一节将介绍概率模型,包括声学模型和语言模型。1.2.2 概率模型

虽然本书会尽量避免公式的使用,但是对于经典的语音识别概率模型,公式描述会胜过很多文字描述。因此,在本书中会使用一些公式。读者不必担心,这些公式都非常简单易懂。

假设Y是输入的音频信号,w是单词序列,在概率模型下,语音识别的任务其实是在给定音频信号Y的前提下,找出最后可能的单词序列,这个任务可以由以下公式来简单概括:

这个公式所得到的便是语音识别系统基于概率模型所给出的解码结果。上述公式描述起来非常简单易懂,但是执行起来却相当困难,主要原因是概率分布P(w|Y)比较难以用可解的模型来表达。幸运的是,我们可以利用贝叶斯定理对上述公式进行变换,公式变换如下:

在上述变换中,我们用到了一个事实:因为Y已知,因此概率P(Y)是一个常量,在求极值的过程中可以被忽略。

从上述公式可见,语音识别系统的概率模型可以被拆分为两部分:p(Y|w)和P(w),我们需要分别对它们进行建模。概率p(Y|w)的含义是,给定单词序列w,得到特定音频信号Y的概率,在语音识别系统中一般被称作声学模型。概率P(w)的含义是,给定单词序列w的概率,在语音识别系统中一般被称作语言模型。

至此,语音识别的概率模型被拆分为声学模型和语言模型两部分,接下来分别对两部分建模进行介绍。

在介绍声学模型之前,首先简单介绍一下特征提取。在前面提到了音频信号为Y。在实际操作中,由于原始音频信号往往包含一些不必要的冗余信息,因此需要对原始音频信号做特征提取,使得提取出来的特征向量更容易描述语音特性,从而提升建模效率。一般来说,会每隔10ms从一个25ms的语音信号窗口中提取一个特征向量,因此实际应用中我们输入概率模型的Y是一系列特征向量的序列。常用的语音识别特征有梅尔频率倒谱系数(Mel-Frequency Cepstral Coefficient,MFCC)、感知线性预测(Perceptual Linear Prediction,PLP)等。

对于声学特性来说,单词是一个比较大的建模单元,因此声学模型p(Y|w)中的单词序列w会被进一步拆分成一个音素序列。假设Q是单词序列w对应的发音单元序列,这里简化为音素序列,那么声学模型p(Y|w)可以被进一步转写为:

其中,公式中的求和是对和单词序列w所对应的所有可能的音素序列Q集合计算边缘分布概率。这样,声学模型就被拆分成了两部分:p(Y|Q)和p(Q|w)。

第二部分p(Q|w)是一个相对容易计算的概率分布。假设单词序列w=w,...,w,也即单词序列w由单词w,w,...,w共L个单1L12L(wl)词组成,再假设每个单词w所对应的可能发音是q,那么第二部l分p(Q|w)可以进行如下拆分:((wl)wl)

其中,概率分布P(q|wl)的含义是单词wl的发音为q的概率。词典中同一个单词可能有多个发音,但是在人类语言中,多音词的不同发音往往不会有很多,因此第二部分P(Q|w)可以非常容易地从发音词典中计算出来。

第一部分p(Y|Q)是声学模型的核心所在,一般会用隐马尔可夫模型来进行建模。简单来理解,对于音素序列Q中的每一个音素,都会构建一个音素级隐马尔可夫模型单元,根据音素序列Q,会把这些隐马尔可夫模型单元拼接成一个句子级别的隐马尔可夫模型,而特征序列Y便是隐马尔可夫模型的可观察输出。在实际的语音识别系统中,隐马尔可夫模型的应用会比这个简单描述复杂得多,比如,实际系统中我们会以上下文相关的三音子单元作为最小的隐马尔可夫模型单元。关于声学模型的训练,将在本书第4章详细介绍。

类似地,可以将语言模型P(w)进行拆分和建模。假设单词序列w=w,...,w由L个单词组成,语言模型P(w)可以进行如下概率1L转换:

其中,概率分布P(w|w,...,w)的具体含义是,已知单词序ll−11列w,...,w,下一个单词为w的概率。在实践中会发现,一个已1l−1l经出现的单词,对于后续出现的单词的影响会随着距离的增大而越来越小,因此,我们一般会把单词序列的历史限制在N−1,对应的语言模型也叫作N元语法模型,用概率表示如下:

在实践中,一般使用N=3 或N=4。概率分布P(w|w,wll−1l,...,w) 的含义是,已知单词序列w,...,w,下一个单−2l−N+1l−N+1l−1词为w的概率。为了统计这个概率分布,需要收集大量的文本作为训l练语料,在这些文本中统计一元词组、二元词组直到N元词组的个数,然后根据出现的个数统计每个N元词组的概率。由于训练语料往往是有限的,为了避免稀疏概率或零概率的问题,在实际操作中往往需要采用平滑(Smoothing)、回退(Back off)等技巧。语言模型的训练和使用将在本书第5章详细介绍。1.2.3 端到端语音识别

2014年左右,谷歌的研究人员发现,在大量数据的支撑下,直接用神经网络可以从输入的音频或音频对应的特征直接预测出与之对应的单词,而不需要像我们上面描述的那样,拆分成声学模型和语言模型。研究人员使用双向长短期记忆神经网络(Bidirectional long short-term memory network),附之以一个叫作 Connectionist Temporal Classification(CTC)的目标函数,可以直接将音频信号转换成文字,而不需要经过传统的基于隐马尔可夫模型的语音识别系统中的中间建模单元(比如基于上下文的三音子建模单元)。由于这种系统直接将音频转换成文字,所以也被称作“端到端”系统。2016年左右,基于注意力(Attention)机制的端到端语音识别系统被提出,并迅速成为热门的研究方向。从2014年到现在,基于不同神经网络结构的端到端语音识别系统不断地被提出来,在特定场景中的效果也逐渐接近并超越传统的基于隐马尔可夫模型的语音识别系统的效果。同为概率模型,端到端语音识别系统极大地简化了语音识别系统的建模过程,是未来语音识别系统非常有潜力的一个方向。本书对于端到端语音识别系统的具体细节不做详细描述,建议读者关注语音识别技术在这个方向上的发展。1.3 一些其他细节

本章的前两节简要介绍了语音识别的发展历史和主流技术架构,作为补充,本节将介绍语音识别的一些其他细节。1.3.1 语音信号处理

如前文所述,语音识别系统的输入是语音信号。采集语音信号的设备是麦克风,不同类型的麦克风采集到的语音信号的特性也不同。例如,在使用手机语音搜索功能时,语音信号是由手机麦克风采集的,通常发音离麦克风比较近,称之为近场,其输出以单声道或双声道为主;在使用智能音箱进行家居设备控制时,语音信号是由音箱中的麦克风阵列采集的,通常发音离麦克风阵列比较远,称之为远场,典型的设备如4麦和6麦的阵列,其输出是多声道的音频。

无论是近场还是远场,驱动麦克风的音频芯片通常都要进行一系列的处理,包括采样、量化、回声消除、噪声抑制、动态增益控制和音频编解码等,其作用分别如下。

· 采样是将空气中传播的声波信号转换为计算机可以处理的数字信号。麦克风的振元在声波的震动下连续抖动,导致麦克风电路中的电流连续变化,采样的过程是每隔一段时间记录一个电流值,并保持至下一次采样,然后重复这个采样—保持的过程。每采样一次得到一个样点,样点之间的时间间隔就是采样周期,采样周期的倒数是采样频率。例如,每隔1/16000秒采样,采样频率就是16000Hz。

· 量化的目标是高效地保存样点值。由于麦克风的物理特性限制,振元的最大振幅是固定的,样点的电流大小在正负最大值之间连续变化。连续量的保存需要比较高的精度,因此常用16比特或8比特的整型来表示一个样点,这个样点格式转换的过程就是量化。

· 回声消除是语音交互应用,尤其是远场语音交互中一个必不可少的模块。在语音交互过程中,输出以合成语音的方式从设备的扬声器中播放出来,如果没有回声消除,输出的声音就会被麦克风采集,触发语音识别,形成回声。传统声学处理的回声分为电路回声和声学回声,这里所说的回声特指后者。

· 噪声抑制是提升语音识别性能的有效手段,常用的噪声抑制技术有频域抑制和空域抑制。空域抑制可以借助麦克风阵列技术,利用声源定位和波束形成(Beamforming)等算法,增强某个方位的语音信号。频域抑制的技术广泛应用于通信领域,大部分技术手段的目的是让人听得更清楚,但是语音识别系统的特性与人耳的特性不同,因此有很多致力于改善语音识别的频域噪声抑制技术的研发工作。

· 动态增益控制是麦克风系统中常用的模块,可以有效改善由于距离等现实环境因素导致的声音忽大忽小的现象。

· 音频编解码:如今业界的大词汇量连续语音识别主要是基于云服务的,所以语音信号在上传至云服务器之前,通常会经过音频编码以降低传输成本并提升速度,而在服务端,需要将接收到的编码比特包解码还原成音频信号。

在上述处理方法中,采样和量化是将声音信号转换成计算机数据必不可少的方法,其他处理模块的选用要依据使用场景的需要而定。1.3.2 发音和语言学

人类语音区别于其他各种各样的声音的一个重要特点是其高效的表意能力,语言学家经过多年的研究发现,在各种语言中,人类说话的声音大体可以分为有限的若干基本元素,这些元素被称为音素(Phoneme)。在各个语言中,表意的基本单元,无论是中文的字,还是英文的词,都可以由音素组合,进而将各种语言的书写系统与发音系统联系起来,这种表意单元与音素组合之间的映射就是发音词典(Pronunciation dictionary)。

由于音素是语言学家人为定义的概念,所以在每种语言中都有多种音素定义,称为不同的音素集(Phone set)。对应的,也就有不同的发音词典。例如,在美式英语的语音识别中,常用的是卡内基梅隆大学语音组发布的发音词典和音素集;在汉语语音识别中,常用拼音的声母和韵母作为音素。由于存在多发音和同音字(词)现象,因此发音词典并不是一一映射的。除语音音素外,为了使语音识别模型能够处理非语音,通常还要加入非语音音素,如静音音素、噪声音素等。

需要注意的是,音素只是对某种语言中的发音方式的笼统分类,在实际应用中,还需要考虑受上下文影响造成的协同发音现象。语音识别中的很多技术都是为了处理协同发音的,例如,每个音素往往分为多个状态,分别对应不同的发音阶段,而不同发音阶段的差异主要就是受上下文的相邻音素影响。再比如,在对每个音素建模时,建模对象实际上是由上下文音素组成的三音子(Triphone)组合。1.3.3 语音识别系统的评价

语音识别系统最常用的评价指标是词错误率(Word Error Rate,WER)。在中文里,通常使用字错误率(Character Error Rate,CER)来表示。

WER的计算方法是,对于一段音频,已知其标注文本(Reference)和语音识别的结果(Hypothesis),将识别结果中错误词的累计个数除以标注中总的词数,结果表示为一个百分数。对错误词有以下三种定义。

· 插入(Insertion)错误,表示识别出来的单词不存在于正确答案中的对应位置上,却被错误地识别出了。比如,正确答案是“My name is Andy”,却识别成了“My nick name is Andy”,这里“nick”就是一个插入错误。

· 删除(Deletion)错误,表示单词在正确答案中存在,却被漏识别了。比如,正确答案是“My name is Andy”,却识别成了“My name Andy”,这里“is”没有被识别出来,就记为一个删除错误。

· 替换(Substitute)错误,表示单词被误识别成其他单词。比如,正确答案是“My name is Andy”,却识别成了“My name are Andy”,这里“are”就是一个替换错误。

在统计一个测试集的WER时,使用累计所有测试句子的三种错误个数和全部标注文本的词数,可得WER:

除错误率外,还可以用正确率(Acc)来评价,使用累计所有测试句子的正确识别词数和全部标注文本词数,可得Acc:

在实际测试数据中,往往是多种错误类型并存于一个句子中。通过上面两个公式可以知道,正确率与错误率之和并不一定等于1,而且错误率可能超过100%。

除评价识别结果的质量外,识别的速度是实际应用中另一个需要关注的指标。评价识别速度最常用的方法是实时率(Real Time Factor,RTF),即用识别耗时除以句子时长。2 Kaldi概要介绍2.1 发展历史

本节将介绍Kaldi语音识别工具包的发展历史。了解一个工具包的发展历史,能够更好地帮助我们理解一个工具包将来的发展。2.1.1 名字的由来

关于Kaldi名字的由来,Kaldi的官方文档是这么解释的:根据传说,Kaldi是埃塞俄比亚的牧羊人,他发现了咖啡树这种植物。

其实,Kaldi名字的由来有着更有趣的故事。在2009年约翰霍普金斯大学的夏季研讨会期间,Kaldi还只是一个轻量级的语音识别解码器,由布尔诺理工大学的Ondřej Glembek写成。当时参加夏季研讨会的研究人员里面,有很多是来自布尔诺理工大学的研究人员,他们大多数都是咖啡的重度爱好者,喜欢时不时地组织咖啡品尝活动。于是Ondřej Glembek就用发现咖啡树的牧羊人的名字Kaldi命名了这个解码器。这个解码器也就是后来Kaldi语音识别工具包的前身。有趣的是,Kaldi后期的主要维护者Daniel Povey是茶的重度爱好者,几乎不怎么喝咖啡。2.1.2 约翰霍普金斯大学夏季研讨会

Kaldi起源于2009年的约翰霍普金斯大学的夏季研讨会(The Johns Hopkins University Summer Workshop),因此有必要给读者介绍一下在语音领域赫赫有名的约翰霍普金斯大学夏季研讨会。

约翰霍普金斯大学夏季研讨会由约翰霍普金斯大学语言和语音处理中心(The Johns Hopkins University Center for Language and Speech Processing,CLSP)发起和组织。吴军在《数学之美》第7章中介绍基于概率模型的语音识别领域开山鼻祖Frederick Jelinek的时候,曾经提到过Jelinek在离开IBM以后,去了约翰霍普金斯大学,建立了专注于语言和语音处理的实验室,这个实验室便是CLSP。从1992年建立实验室开始,Jelinek逐渐将CLSP发展成世界上最有名的语言和语音处理中心之一。

Jelinek自从建立了CLSP之后,每年夏天都会邀请20~30名世界顶级的科学家和学生到CLSP一起工作,解决一些特定的问题,这个邀请活动后来就演变成了赫赫有名的约翰霍普金斯大学夏季研讨会。从1995年开始,约翰霍普金斯大学夏季研讨会每年夏天举办一次,从未间断。夏季研讨会一般会由3~4个研究小组组成,其中一个专注于语音识别方向,一个专注于自然语言处理方向,剩余的研究小组专注于计算机视觉等其他方向。早期的夏季研讨会都在约翰霍普金斯大学Homewood小区举办,从2014年开始,为了缅怀2010年去世的Jelinek,约翰霍普金斯大学夏季研讨会更名为贾里尼克纪念研讨会(Jelinek Memorial Workshop on Speech and Language Technology,JSALT),从此开始交替在约翰霍普金斯大学和其他世界知名的语音和语言处理中心举办。后期的夏季研讨会主要由CLSP的Sanjeev Khudanpur博士组织举办。

约翰霍普金斯大学夏季研讨会可谓是开源工具的摇篮,除完成在语音和语言处理领域举足轻重的研究工作外,在研讨会期间还开发了一批对语音和语言处理领域影响非凡的开源工具。比如,在语言模型建模领域具有统治地位的开源工具包SRILM,在机器翻译领域举足轻重的开源工具包Moses,当然也包括本书的主角,在语音识别领域最受欢迎的开源工具包Kaldi。2.1.3 Kaldi发展简史

Kaldi起源于2009年约翰霍普金斯大学夏季研讨会。2009年的约翰霍普金斯夏季研讨会的其中一个主题是Low Development Cost,High Quality Speech Recognition for New Languages and Domains,而研究的重心则是Subspace Gaussian Mixture Model(SGMM)。为了方便实验验证效果,研究人员开发了一个简陋的基于有限状态转录机的语音识别解码器,以及一些基于语音识别工具包HTK的训练脚本,这些就是Kaldi的前身。

2010年,一部分参加了2009年约翰霍普金斯大学夏季研讨会的研究人员重新聚集在一起,在布尔诺理工大学举办了一场后续的研讨会,来完善Kaldi作为一个语音识别工具包的功能,同时开发一系列基于Kaldi自有工具的训练脚本。但是在这一年,依旧没有形成一个完整的系统。

Kaldi初版代码库的正式发布是在2011年5月14日。随后在5月27日,Kaldi的开发者们在布拉格举办的ICASSP期间为Kaldi正式举行了一场发布会。发布会当天会议厅座无虚席,很多参会者甚至都坐在了地上。

Kaldi初版代码发布之后,代码库的开发和维护主要由知名的语音识别领域研究人员Daniel Povey来主导。Povey从2013年开始成为约翰霍普金斯大学语言和语音处理中心的研究人员,自此,Kaldi的研发中心又回到了约翰霍普金斯大学。

在Kaldi的发展过程中,夏季研讨会起到了不可磨灭的作用,因此笔者也根据研讨会的时间节点整理了Kaldi的发展历程。

· 2009年的约翰霍普金斯大学夏季研讨会,语音识别工具包Kaldi正式开始开发,完成了早期的系统,包括轻量级的解码器和基于HTK的训练脚本。

· 2010年的布尔诺理工大学Kaldi研讨会,Kaldi作为语音识别工具包的功能被完善,同时研究人员开发了独立于HTK的训练脚本。大量的代码在2010年被开发。

· 2011年5月14日,Kaldi初版代码库正式发布。

· 2011年的布尔诺理工大学Kaldi研讨会,基于GMM和SGMM的区分性训练被开发。

· 2012年的布尔诺理工大学Kaldi研讨会,基于nnet1的区分性训练和Stacked-bottleneck网络被开发。

· 2013年的布尔诺理工大学Kaldi研讨会,补充并完善Kaldi。

· 2014年的布拉格首届JSALT研讨会,研究了神经网络的内部结构和语音识别置信度分析等。

· 2015年的华盛顿大学第二届JSALT研讨会,Daniel Povey开始了Kaldi中nnet3的开发。2.2 设计思想

一个开源工具包的成功离不开工具包初始的设计思想。因此,本节将从几个方面来阐述Kaldi的设计思想,试图窥探Kaldi成功背后的奥秘。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载