月度归档:2018年03月

第24章 语音识别基础

语音作为最自然便捷的交流方式,一直是人机通信和交互最重要的研究领域之一。自动语音识别(Automatic Speech Recognition,ASR)是实现人机交互尤为关键的技术,其所要解决的问题是让计算机能够“听懂”人类的语音,将语音中传化为文本,或其它语言的语音(如同声翻译)等。
自动语音识别技术起源于上世纪五十年代,经过几十年的发展已经取得了显著的成效。尤其是近些年,把深度学习融入其中,使ASR取得突飞猛进的发展。越来越多的语音识别智能软件和应用走入了人们的日常生活,比较典型的有苹果的Siri、亚马逊的Alexa、微软的小娜、科大讯飞的语音输入法、叮咚智能音箱等。

本章主要介绍语音识别的基本概念、发展轨迹及主要技术和原理等。包括:
 语音识别系统架构
 语音识别基础
 语音识别发展轨迹
 语音识别未来方向

24.1 语言识别系统的架构

图24.1为语言识别系统的典型结构,其中关键技术涉及信号处理、特征提取、解码器及声学模型和语言模型的建立等。

图24.1 语音识别系统的架构
 信号处理及特征提取
该模块的主要任务是从输入信号中提取特征,供声学模型处理。同时,它一般也包括了一些信号处理技术,以尽可能降低环境噪声、信道、说话人等因素对特征造成的影响。
 声学模型
声学模型充分利用了声学、语音学、环境特性以及说话人性别口音等信息,对语音进行建模。目前的语音识别系统往往采用隐含马尔科夫模型(Hidden Markov Model,HMM)建模,表示某一语音特征矢量序列对某一状态序列的后验概率。隐含马尔科夫模型是一种概率图模型,可以用来表示序列之间的相关关系,常常被用来对时序数据建模。
 词典
词典包含系统所能处理的词汇集及其发音。词典实际提供了声学模型建模单元与语言模型建模单元间的映射。
 语言模型
语言模型对系统所针对的语言进行建模。理论上,包括正则语言,上下文无关文法在内的各种语言模型都可以作为语言模型,但目前各种系统常用的还是基于统计的N 元文法(N-Gram),即统计前后 N 个字出现的概率。
 解码器
解码器是语音识别系统的核心之一,其任务是对输入的信号,根据声学、语言模型及词典,寻找能够以最大概率输出该信号的词序列。
这节我们介绍了语音识别系统的主要架构,接下了我们从基本概念入手,进一步分析语音识别系统如果把语音或声音一步步变成文字或语句的。

24.2 语音识别的原理

上节介绍了语音识别系统的架构,这节我们对上节内容进行细化或具体化,为了大家对语音识别系统有直观认识,主要介绍系统涉及的一般基本概念及其原理。
语音识别系统的输入是何种形式的文件?
语音识别系统的输入自然是语音或声音,我们知道声音实际上是一种波。常见的MP3等格式都是压缩格式,必须转成非压缩的纯波形文件来处理,比如通常看到wav文件。wav文件里存储的除了一个文件头以外,就是声音波形的一个个点了。下图24.2是一个波形的示例

图24.2 声音波形示意图
所以输入文件一般是wav文件。有了输入文件后,接下就需要文件进行预处理,一般需要做哪些预处理呢?
(1)去首尾静音
利用信号处理的一些技术,切除首尾端的静音,这种操作一般称为VAD,以降低对后续步骤造成的干扰。
(2)分帧
对声音分帧,也就是把声音切成一小段一小段,每小段称为一帧。分帧操作一般不是简单的切开,而是使用移动窗口函数来实现。帧与帧之间一般有交叠,如图24.3

图24.3 分帧示意图
图24.3中,每帧的长度为25毫秒,每两帧之间有25-10=15毫秒的交叠。我们称为以帧长25ms、帧移动10ms分帧。
(3)特征提取
通过分帧后,语音变成了很多小段。但这些小段波形计算机还是无法处理,因此需要将波形作变换,常用的一般变换方法是提取MFCC特征,依据人耳的生理特性,把每一帧波形变成一个多维向量,这个向量包含了这帧语音的内容信息,这个过程称为声学特征提取。
这样声音就成了12行(假设声学特征为12维)、N列的一个矩阵(N是总帧数),称为观察序列。观察序列如图24.4,每一帧都用一个12维的向量表示,色块的颜色深浅表示向量值的大小。至此,准备工作基本完成,接下就是训练模型了。

图24.4 观察序列
(4)训练模型
在开始训练模型前,我们先介绍两个基本概念:
音素:单词的发音由音素构成。对英语,一种常用的音素集是卡内基梅隆大学的一套 由39个音素构成的音素集。汉语一般直接用全部声母和韵母作为音素集,另外汉语识 别还分有调无调。
状态:这里理解成比音素更细致的语音单位就可。通常把一个音素划分成3个状态。
具体训练过程可分为三步来实现:
第一步,把帧识别成状态(难点);
第二步,把状态组合成音素;
第三步,把音素组合成单词。
首先看第一步,如何把帧识别成状态?如图24.5所示


图24.5 音素的合作过程
在图24.5中,每个小竖条代表一帧,若干帧语音对应一个状态,每三个状态组合成一个音素,若干个音素组合成一个单词。也就是说,只要知道每帧语音对应哪个状态,语音识别的结果也就出来了。如何由帧音素来确定对应的状态呢?有个容易想到的办法,看某帧对应哪个状态的概率最大,那这帧就属于哪个状态。如图24.6所示,这帧在状态S3上的条件概率最大,因此就猜这帧属于状态S3。

图24.6 由音素确定其对应状态的过程
图24.6中的那些用到的概率从哪里读取呢?有个叫“声学模型”的东西,里面存了一大堆参数,通过这些参数,就可以知道帧和状态对应的概率。获取这一大堆参数的方法叫做“训练”,需要使用巨大数量的语音数据,训练的方法比较繁琐,这里不讲。
但这样做有一个问题:每一帧都会得到一个状态号,最后整个语音就会得到一堆乱七八糟的状态号,相邻两帧间的状态号基本都不相同。假设语音有1000帧,每帧对应1个状态,每3个状态组合成一个音素,那么大概会组合成300个音素,但这段语音其实根本没有这么多音素。如果真这么做,得到的状态号可能根本无法组合成音素。实际上,相邻帧的状态应该大多数都是相同的才合理,因为每帧很短。这里就涉及第二步,如何由状态合成音素的问题。
解决这个问题的常用方法就是使用隐马尔可夫模型(Hidden Markov Model,HMM)。这东西听起来好像很高深的样子,实际上用起来很简单,主要由以下两步来实现:
第一步,构建一个状态网络;
第二步,从状态网络中寻找与声音最匹配的路径。
这样就把结果限制在预先设定的网络中,避免了刚才说到的问题。当然也带来一个局限,比如你设定的网络里只包含了“今天晴天”和“今天下雨”两个句子的状态路径,那么不管说些什么,识别出的结果必然是这两个句子中的一句。
如果想识别任意文本呢?只要把这个网络搭得足够大,包含任意文本的路径就可以了。但这个网络越大,想要达到比较好的识别准确率就越难。所以要根据实际任务的需求,合理选择网络大小和结构。
如何由音素合成单词呢?首先搭建状态网络,它是由单词级网络展开成音素网络,再展开成状态网络,其中涉及到HMM、词典以及语言模型等。具体如图24.7所示。语音识别过程其实就是在状态网络中搜索一条最佳路径,语音对应这条路径的概率最大,这称之为“解码”。路径搜索的算法是一种动态规划剪枝的算法,称之为Viterbi算法,用于寻找全局最优路径。

图24.7 状态网络示意图
这里所说的概率,由三部分构成,分别是:
观察概率:每帧和每个状态对应的概率
转移概率:每个状态转移到自身或转移到下个状态的概率
语言概率:根据语言统计规律得到的概率
其中,前两种概率从声学模型中获取,最后一种概率从语言模型中获取。语言模型是使用大量的文本训练出来的,可以利用某门语言本身的统计规律来帮助提升识别正确率。语言模型很重要,如果不使用语言模型,当状态网络较大时,识别出的结果基本是一团乱麻。
至此,语音识别主要过程就完成了,这就是语音识别技术的原理。
【备注】本节内容主要参考知乎,作者:张俊博,链接:https://www.zhihu.com/question/20398418/answer/18080841

24.3 语音识别发展历程

语音识别与上世纪50年代就开始了,当时主要尝试对单个的孤立词进行识别;
60-70年代人们开始开始探索连续语言识别工作,但进展比较缓慢;
80年代得到开始发展,得益于两个关键技术的应用:隐马尔科夫模型(HMM)的理论和N-gram语言模型;
90年代是语音识别基本成熟的时期,主要进展是语音识别声学模型的区分性训练准则和模型自适应方法的提出。这个时期剑桥语音识别组推出的HTK工具包对于促进语音识别的发展起到了很大的推动作用。此后语音识别发展很缓慢,主流的框架GMM-HMM趋于稳定,但是识别效果离实用化还相差甚远,语音识别的研究陷入了瓶颈;
2006年。这一年辛顿(Hinton)提出深度置信网络(DBN),促使了深度神经网络(Deep Neural Network,DNN)研究的复苏,掀起了深度学习的热潮,从此语音识别开始了新篇章,基于GMM-HMM的语音识别框架被打破,大量研究人员开始转向基于DNN-HMM的语音识别系统的研究。用DNN替换GMM,主要优势有:
(1)使用DNN估计HMM的状态的后验概率分布不需要对语音数据分布进行假设;
(2)DNN的输入特征可以是多种特征的融合,包括离散或者连续的;
(3) DNN可以利用相邻的语音帧所包含的结构信息。
图24.8为基于深度神经网络的语音识别系统框架。

图24.8 基于深度神经网络的语音识别系统框架
不过这种框架中DNN对语音信号的长时相关性解决不很理想,于是,循环神经网络(Recurrent Neural Network,RNN)近年来逐渐替代传统的DNN成为主流的语音识别建模方案。如图24.9。


图24.9 基于RNN和CTC的主流语音识别系统框架
循环神经网络在隐层上增加了一个反馈连接,这就很好解决长时相关性问题,再加上序列短时分类(Connectionist Temporal Classification,CTC)输出层,使整个训练更加高效,实现有效的“端对端”训练。
近几年,随着大数据、深度学习及云计算的进一步发展和融合,语音识别性能得到进一步提升,现在已有很多商业化应用,并且正在不断拓展其应用的广度和深度。