现在人机语音交互已经成为我们日常生活的一部分,语音交互更自然,大大的提高了效率。
一、什么是语音识别
文字绝对算是人类最伟大的发明之一,正是因为有了文字,人类的文明成果才得以延续。但是文字只是记录方式,人类一直都是依靠声音进行交流,所以人脑是可以直接处理音频信息的,就像你每次听到别人和你说话的时候,你就会很自然地理解,不用先把内容转变成文字再理解。而机器目前只能做到先把音频转变成文字,再按照字面意思理解。
微信或者输入法的语音转文字相信大家都用过,这就是语音识别的典型应用,其实就是把我们说的音频信息转换成文字内容。
语音识别技术(Automatic Speech Recognition)是一种将人的语音转换为文本的技术。
概念理解起来很简单,但整个过程还是非常复杂的,正是由于复杂,对算力的消耗比较大,一般我们都将语音识别模型放在云端去处理。这也就是我们常见的,不联网无法使用的原因。当然也有在本地识别的案列,像输入法就有本地语音识别的包。
二、语音识别的应用
语音识别的应用非常广泛,常见的有语音交互、语音输入。随着技术的逐渐成熟和5G的普及,未来的应用范围只会更大。 语音识别技术的应用往往按照应用场景进行划分,会有私人场景、车载场景、儿童场景、家庭场景等,不同场景的产品形态会有所不同,但是底层的技术都是一样的。
1、私人场景
私人场景常见的是手机助手、语音输入法等,主要依赖于我们常用的设备--手机。如果你的手机内置手机助手,你可以方便快捷的实现设定闹钟,打开应用等,大大的提高了效率。语音输入法也有非常明显的优势,相较于键盘输入,提高了输入的效率,每分钟可以输入300字左右。
2、车载场景
车载场景的语音助手是未来的趋势,现在国产电动车基本上都有语音助手,可以高效的实现对车内一些设施的控制,比如调低座椅,打开空调,播放音乐等。开车是需要高度集中注意力的事情,眼睛和手会被占用,这个时候使用语音交互往往会有更好的效果。
3、儿童场景
语音识别在儿童场景的应用也很多,因为儿童对于新鲜事物的接受能力很高,能够接受现在技术的不成熟。常见的儿童学习软件中的跟读功能,识别孩子发音是否准确,这就应用的是语音识别能力。还有一些可以语音交互的玩具,也有ASR识别的部分。
4、家庭场景
家庭场景最常见的就是智能音箱和智能电视了。我们通过智能音箱,可以语音控制家里面的所有电器的开关和状态,通过语音控制电视切换节目,搜索我们想要观看的内容。
三、语音识别详解
整个从语音识别的过程,先从本地获取音频,然后传到云端,最后识别出文本,就是一个声学信号转换成文本信息的过程。整个识别的过程如下图:
3.1、VAD技术
在开始语音识别之前,有时需要把首尾端的静音切除,降低对后续步骤造成干扰,这个切除静音的炒作一般称为VAD。这个步骤一般是在本地完成的,这部分需要用到信号处理的一些技术。
VAD(Voice Activity Detection),也叫语音激活检测,或者静音抑制,其目的是检测当前语音信号中是否包含话音信号存在,即对输入信号进行判断,将话音信号与各种背景噪声信号区分出来,分别对两种信号采用不同的处理方法。
算法方面,VAD算法主要用了2-3个模型来对语音建模,并且分成噪声类和语音类,还有静音类。目前大多数还是基于信噪比的算法,也有一些基于深度学习(DNN)的模型。
一般在产品设计的时候,会固定一个VAD截断的时间,但面对不同的应用场景,可能会要求这个时间是可以自定义的。主要是用来控制多长时间没有声音进行截断。比如小孩子说话会比较慢,常常会留尾音,那么我们就需要针对儿童场景,设置比较长的VAD截断时间,而成人就可以相对短一点,一般会设置在400ms-1000ms之间。
3.2、本地上传(压缩)
人的声音信息首先要经过麦克风整列收集和处理,然后再把处理好的音频文件传到云端,整个语音识别模型才开始工作。这里的上传并不是直接把收音到的音频丢到云端,而是要进行压缩的,主要考虑到音频太小,网络等问题,会影响整体的响应速度。从本地到云端是一个压缩➡上传➡解压的过程,数据才能够到达云端。
整个上传的过程也是实时的,是以数据流的形式进行上传,每隔一段时间上传一个包。你可以理解为每说一个字,就要上传一次,这也就对应着我们常常看到的一个字一个字的往屏幕上蹦的效果,一般一句“明天天气怎么样?”,会上传大约30多个包到云端。
一般考虑我们大部分设备使用的都是Wi-Fi和4G网络,每次上传的包的大小在128个字节的大小,整个响应还是非常及时的。
3.3、信号处理
这里的信号处理一般指的是降噪,有些麦克风阵列本身的降噪算法受限于前端硬件的限制,会把一部分降噪的工作放在云端。像专门提供云端语音识别能力的公司,比如科大讯飞、谷歌,自己的语音识别模型都是有降噪能力的,因为你不知道前端的麦克风阵列到底是什么情况。
除了降噪以外可能还涉及到数据格式的归一化等。当然有些模型可能不需要这些步骤,比如自研的语音识别模型,只给自己的机器用,那么我解压完了就是我想要的格式。
3.4、特征提取
特征提取是语音识别关键的一步,解压完音频文件后,就要先进行特征提取,提取出来的特征作为参数,为模型计算做准备。简单理解就是语音信息的数字化,然后再通过后面的模型对这些数字化信息进行计算。
特征提取首先要做的是采样,前面我们说过音频信息是以数据流的形式存在,是连续不断的,对连续时间进行离散化处理的过程就是采样率,单位是Hz。可以理解为从一条连续的曲线上面取点,取的点越密集,越能还原这条曲线的波动趋势,采样率也就越高。理论上越高越好,但是一般10kHz以下就够用了,所以大部分都会采取16kHz的采样率。
具体提取那些特征,这要看模型要识别那些内容,一般只是语音转文字的话,主要是提取音素;但是想要识别语音中的情绪,可能就需要提取响度、音高等参数。 最常用到的语音特征就是梅尔倒谱系数(Mel-scaleFrequency Cepstral Coefficients,简称MFCC),是在Mel标度频率域提取出来的倒谱参数,Mel标度描述了人耳频率的非线性特性。
3.5、声学模型(AM)
声学模型将声学和发音学的知识进行整合,以特征提取模块提取的特征为输入,计算音频对应音素之间的概率。简单理解就是把从声音中提取出来的特征,通过声学模型,计算出相应的音素。
声学模型目前的主流算法是混合高斯模型+隐马尔可夫模型(GMM-HMM),HMM模型对时序信息进行建模,在给定HMM的一个状态后,GMM对属于该状态的语音特征向量的概率分布进行建模。现在也有基于深度学习的模型,在大数据的情况下,效果要好于GMM-HMM。
声学模型就是把声音转成音素,有点像把声音转成拼音的感觉,所以优化声学模型需要音频数据。
3.6、语言模型(LM)
语言模型是将语法和字词的知识进行整合,计算文字在这句话下出现的概率。一般自然语言的统计单位是句子,所以也可以看做句子的概率模型。简单理解就是给你几个字词,然后计算这几个字词组成句子的概率。
语言模型中,基于统计学的有n-gram 语言模型,目前大部分公司用的也是该模型。还有基于深度学习的语言模型。
语言模型就是根据一些可能的词(词典给的),然后计算出那些词组合成一句话的概率比较高,所以优化语言模型需要的是文本数据。
3.7、词典
词典就是发音字典的意思,中文中就是拼音与汉字的对应,英文中就是音标与单词的对应,其目的是根据声学模型识别出来的音素,来找到对应的汉字(词)或者单词,用来在声学模型和语言模型建立桥梁,将两者联系起来。简单理解词典是连接声学模型和语言模型的月老。
词典不涉及什么算法,一般的词典都是大而全的,尽可能地覆盖我们所有地字。
词典这个命名很形象,就像一本“新华字典”,给声学模型计算出来的拼音配上所有可能的汉字。
整个这一套组成了一个完整的语音识别模型,其中声学模型和语言模型是整个语音识别的核心,各家识别效果的差异也是这两块内容的不同导致的。一般我们更新的热词,更新的都是语言模型中的内容,后面会详细阐述。
四、语音识别扩展内容
语音识别除了把语音转换成文本以外,还有一些其他用处,这里也简单提一下。
4.1、方言识别/外语识别
这里把方言和外语一起讨论,是因为训练一个方言的语音识别模型,和训练一个外语的模型差不多,毕竟有些方言听起来感觉和外语一样。所以方言和外语识别,就需要重新训练的语音识别模型,才能达到一个基本可用的状态。
这里就会遇到几个问题:
- 从零开始训练一个声学模型需要大量的人工标注数据,成本高,时间长,对于一些数据量有限的小语种,就更是难上加难,所以选择新语种(方言)的时候要考虑投入产出,是否可以介入第三方的先使用,顺便积累数据。
- 除了单独的外语(方言)识别之外,还有混合语言的语音识别需求,比如在香港,英文词汇经常会插入中文短语中。如果把每种语言的语言模型分开构建,会阻碍识别的平滑程度,很难实现混合识别。
4.2、语种识别(LID)
语种识别(LID)是用来自动区分不同语言的能力,将识别结果反馈给相应语种的语音识别模型,从而实现自动化的多语言交互体验。简单理解就是计算机知道你现在说的是中文,它就用中文回复你,如果你用英文和计算机说话,计算机就用英文回复你。
语种识别主要分三个过程,首先根据语音信号进行特征提取,然后进行语种模型的构建,最后是对测试语音进行语种判决。算法层面目前分为两类,一类是基于传统的语种识别,一种是基于神经网络的语种识别。
传统的语种识别包括基于HMM的语种识别、基于音素器的语种识别、基于底层声学特征的语种识别等。神经网络的语种识别主要基于融合深度瓶颈特征的 DNN语种识别,深度神经网络中,有的隐层的单元数目被人为地调小,这种隐层被称为瓶颈层。
目前基于传统的语种识别,在复杂语种之间的识别率,只有80%左右,而基于深度学习的语种识别,理论上效果会更好。当然这和语种的多样性强相关,比如两种语言的语种识别,和十八种语言的语种识别,之间的难度是巨大的。
4.3、声纹识别(VPR)
声纹识别也叫做说话人识别,是生物识别技术的一种,通过声音判别说话人身份的技术。其实和人脸识别的应用有些相似,都是根据特征来判断说话人身份的,只是一个是通过声音,一个是通过人脸。
声纹识别的原理是借助不同人的声音,在语谱图中共振峰的分布情况不同这一特征,去对比两个人的声音,在相同音素上的发声来判断是否为同一个人。主要是借助的特征有:音域特征、嗓音纯度特征、共鸣方式特征等。而对比的模型有高斯混合模型(GMM)、深度神经网络(DNN)等。
注:
- 共振峰:共振峰是指在声音的频谱中能量相对集中的一些区域,共振峰不但是音质的决定因素,而且反映了声道(共振腔)的物理特征。提取语音共振峰的方法比较多,常用的方法有倒谱法、LPC(线性预测编码)谱估计法、LPC倒谱法等
- 语谱图:语谱图是频谱分析视图,如果针对语音数据的话,叫语谱图。语谱图的横坐标是时间,纵坐标是频率,坐标点值为语音数据能量。由于是采用二维平面表达三维信息,所以能量值的大小是通过颜色来表示的,颜色深,表示该点的语音能量越强。
声音识别也会有1to1、1toN、Nto1三种模式:
- 1to1是判断当前发声和预存的一个声纹是否一致,有点像苹果手机的人脸解锁,判断当前人脸和手机录的人脸是否一致。
- 1toN是判断当前发声和预存的多个声纹中的哪一个一致,有点像指纹识别,判断当前的指纹和手机里面录入的五个指纹中的哪一个一致。
- Nto1就比较难了,同时有多个声源一起发声,判断其中那个声音和预存的声音一致,简单理解就是所有人在一起拍照,然后可以精确的找到其中某一个人。当然也有NtoN,逻辑就是所有人一起拍照,每个人都能认出来。
除了以上的分类,声纹识别还会区分为:
- 固定口令识别,就是给定你文字,你照着念就行,常见于音箱付款的验证;
- 随机口令识别,这个就比较厉害了,他不会限制你说什么,自动识别出你是谁。
声纹识别说到底就是身份识别,和我们常见的指纹识别、人脸识别、虹膜识别等都一样,都是提取特征,然后进行匹配,只是声纹的特征没有指纹等特征稳定,会受到外部条件的影响,所以没有其他的身份识别常见。
4.4、情绪识别
目前情绪识别方式有很多,比如检测生理信号(呼吸、心率、肾上腺素等),检测人脸肌肉变化,检测瞳孔扩张程度等。通过语音识别情绪,也是一个维度,但是所能参考的信息有限,相较于前面谈到的方法,目前效果一般。
通过语音的情绪识别,首先要从语音信息中获取可以判断情绪的特征,然后根据这些特征再进行分类。这里主要借助的特征有:能量(energy)、音高(pitch)、梅尔频率倒谱系数(MFCC)等语音特征。常用的分类模型有:高斯混合模型(GMM)、隐马尔可夫模型(HMM)长短时记忆模型(LSTM)等。
语音情绪识别一般会有两种方法,一种是依据情绪的不同表示方式进行分类,常见的有难过、生气、害怕、高兴等等,使用的是分类算法。还有一种是将情绪分为正面和负面两种,一般会使用回归算法。
具体使用以上哪种方法,要看实际应用情况。如果需要根据不同的情绪,伴随不同的表情和语气进行回复,那么需要使用第一种的分类算法;如果只是作为一个参数进行识别,判断当前说话人是消极还是积极,那么第二种的回归算法就够了。