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),即用识别耗时除以句子时长。