车载智能语音:语音识别的核心技术
什么叫自然语音交互,为什么唤醒词都需要四个字以上,为什么方言也能识别,唤醒词和后面的语音识别有什么区别,这期的内容给你精彩答案。
什么是自然交互
这样说吧,你和朋友在一起聊天,吃饭是不是很自然,这样的交互就可以理解为自然交互,这里面有眼神、动作、语音等多种交互方式,当然会让你觉得很舒服、不做作,这样就是自然交互。
举一个例子,当你饿了,你会说,今天中午咱们出去吃?
你朋友回答你,那咱们吃什么呢,吃近一些的,要不吃酸菜鱼吧。
你回答说,好吧,那我们打车去吃酸菜鱼吧。
看到没有,首先要听懂你饿了,然后根据你的喜好,推荐一些合适的菜品,最终达成目的,这个在人与人之间交互还好,如果换为机器,那么此时就是非常大的挑战。
传统语音交互
自然语音交互
语音识别的核心技术特点
在说语音识别的特点之前,我问问大家目前接触比较多的智能语音助手是哪些啊,是不是苹果手机的Siri,还有智能音箱,还有一些智能车载语音助手,当然少不了一天几个骚扰电话的智能推销。
以下是机哥在做可科大讯飞研究报告中的PPT内容,可以看到科大讯飞的核心技术就在于语音识别、语义理解、自然语音理解、机器翻译、声纹识别,其实在应用上的领域就比较好理解,比如智能可穿戴设备,智能机器人,智能手机上的语音识别,最初级的应用就是语音识别,比如在法庭上的庭审记录直接就可以把语音转换为文字作为记录,省去很大一部分的人力时间提升人工效率,智能语音客服可以回答80%左右的用户问题等等。
其实仔细想想,用户使用智能语音助手的场景,在很长一段时间是解放双手作为最大的吸引点,想想你在开车,想给某个人打电话或者导航到某个地方,无论是安全还是有效性,语音都是最佳选择,还有当你在拖地做家务时,想听听一些轻松的轻音乐,是不是直接语音唤醒音箱播放,比你要去按键,然后再去手动选择输入要巴适得很。
真正的智能语音助手就如同是一个普通朋友,首先要听清楚说的话,然后理解你表达的意思,最后是执行,也就是同你反馈你需要的东西。这一小节需要讲的语音识别就是属于听清楚的范畴,机哥这个听清楚比较容易吧,只要听力没有问题的人,听清楚语言是没有问题的,这个对于机器其实就不是那么容易了,下面我们先来看看山东大哥被车载语音气疯的一段小视频。
看到了吧,这个就是比较失败的语音识别的例子,这个没有处理好的原因就是语音转文字这里就出了问题,把135识别成133去了,这里的数字最容易识别错误,稍后看了下面的内容你就知道一个大概是什么原因了。
在讲语音识别之前,我们先了解一下指纹识别,使用过指纹解锁的手机的小伙伴几乎每天都几十次的使用频率,其实原理总结起来就比较简单,就是先把你的指纹特征点进行提前登记到指纹库里面,下次你再指纹解锁的时候,此时也是通过提取特征点后进行特征点的匹配,如果匹配OK就开锁,如果匹配不OK及不解锁。
类似于用钥匙去开门的锁一样,一个钥匙只能开一个门的锁,如果钥匙有损坏(也就是你指纹识别的时候有汗水或者其他脏污),那么你原来匹配的门的锁也打不开,想想你的手机指纹解锁的速度还是蛮快的,这个涉及到算法,识别速度指纹库的数量等等。
我们单从指纹库来说,自己使用到的手机录的指纹不会太多,一般就左右手大拇指,想想如果是公司的指纹打卡,需要比对的数据库就比非常庞大,所以耗费的时间就会更久一些,类似你要拿一把钥匙去找到整个酒店哪个房间们能打开一样的原理,需要一个一个去比对,当然如果你开每一道门的速度快,也就是比对的数据库的速度快,此时耗费的时间就会更少。
以下是公司前辈总结的语音识别的核心框图,先从一个整体框架和一个模拟的语音模型阐述,然后针对每个框图的步骤我这里进行一些详细的解释。
语音识别的过程可以大致上可以分为四个步骤:声音的预处理、特征提取转换、语音解码、文字解码。
即从音频信号到对应的文字,首先对声音信号进行滤波、分帧等预处理工作,将需要分析的音频信号从原始信号中合适地提取出来,并且通过一些方法从中提取出特征向量,再根据声学模型对特征向量所可能表示的声学特征进行得分计算,得出可能的音素状态序列,然后再通过语言模型,计算可能对应的词组序列的概率,最后根据已有的字典对词组序列进行解码,得到最后的文本表示。
举例:我爱语音识别
现在有一个初步的感觉了吧,是不是觉得语音识别就是概率学,的确,语音识别里面90%关键技术就是概率学,就如同天气预报一样,都是通过历史的数据,实际测量的风速、风向、云量、运动方向等等来预测将来的天气情况。
1、声音预处理
首先说明一个概念,芯片和机器处理的都是数字量,也就是首先要进行AD采样,正常人耳可以听到的声波的频率一般在20Hz(赫兹)至20kHz之间,但是人正常说话的声音的频率范围是100--10KHZ,所以根据奈奎斯特定理,采样的频率至少是音源的2倍,可以看到很多语音识别设备的采样率都设置为16KHZ。
我们在语音表达的时候,在时域上来看是不连续的,你说不会啊,我一直都是机关枪噼里啪啦在表达,其实看到语音的波形,还是有不连续的地方(这里没有连续的地方就是没有音频表达的地方)此时如果把这部分没有说话的语音去掉,就会减少干扰,而且可以减少数据量,加快语音识别的速度。
声音的预处理首先要对首尾端的静音(广义上的)切除,因为这部分声音不包含需要的信息,去除可以降低对后续步骤造成的干扰,这个操作一般也被称作VAD(Voice Active Detect,活动语音检测)。
其实这个操作最简单粗暴的做法就是根据能量门限值,比如你说话的时候有用的音频能量都是大于60分贝的,环境中的噪音是30分贝,此时如果采样的的值低于60分贝,我们就认为不是正常说话的声音,就丢弃掉,这里的假设条件是语音能量大于背景噪音能量,然而当噪声大到和语音一样时,能量这个特征无法区分语音还是纯噪声。这个方法虽然粗暴,在早期的语音VAD处理中是不可磨灭的贡献,将语音识别推上了一个台阶,减少了很多静音数据量的处理。
后面改进了的基于能量的方法,将宽带语音分成各个子带,在子带上求能量;因为语音在2KHz以下频带包含大量的能量,而噪声在24KHz或者4KHz以上频带比02HKz频带倾向有更高的能量,当然如果在某个频率上语音和噪音能量差不多的时候,语音和噪声的区分能力会加速下降。
统计模型的方法最先源于似然比检验(likelihood ratio test LRT),这种方法假设语音和背景噪声是独立高斯分布,这样它们的DFT系数可以用高斯随机变量来描述,这一方法考虑两种假设, 分别表示非语音和语音。
这一思想是语言的模型是通过学习得到的,目前训练数据集都是通过传统的VAD方法进行标注的,如果标注的数据里就有不准确的,那么如何通过DNN获得更准确的VAD,这类方法的难点个人认为更多的是实际强噪声场景下的训练数据集标注的问题。
接下来,要对声音进行分帧,也就是把声音切成很多小段,每一段称为一帧。这个过程通过移窗操作来完成,而不是简单的切开,所以每一帧之间是有小部分重叠的。
每帧的长度为25毫秒,每两帧之间有25-10=15毫秒的交叠。我们称为帧长25ms、帧移10ms的分帧。帧移的事情就不详细解释了,它是为了保证语音信息的完整性。感兴趣的同学可以查一下,加窗/窗函数。
2、特征提取转换
通过分帧之后得到的小段音频,还不能直接用于识别,因为在时域上的波形,几乎没有描述能力,往往需要将其变换到频域(大名鼎鼎的傅里叶变换)然后再进行特征的提取。
根据人耳的生理特性,把每一帧波形变成一个多维向量,可以简单地理解为这个向量包含了这帧语音的内容信息,这个过程叫做声学特征提取。常见的特征提取算法有线性预测倒谱系数(LPCC)和Mel 倒谱系数(MFCC)。
搞清语音是怎么产生的对于我们理解语音有很大帮助。人通过声道产生声音,声道的shape(形状?)决定了发出怎样的声音。声道的shape包括舌头,牙齿等。如果我们可以准确的知道这个形状,那么我们就可以对产生的音素phoneme进行准确的描述。声道的形状在语音短时功率谱的包络中显示出来。
而MFCCs就是一种准确描述这个包络的一种特征。MFCCs(Mel Frequency Cepstral Coefficents)是一种在自动语音和说话人识别中广泛使用的特征。它是在1980年由Davis和Mermelstein搞出来的。从那时起。在语音识别领域,MFCCs在人工特征方面可谓是鹤立鸡群,一枝独秀,从未被超越。啊(至于说Deep Learning的特征学习那是后话了)。假设声学特征是M维的,每一帧就表示为一个M维的向量,那么声音就可以成为M行、N列的矩阵,我们称之为观察序列,N为总帧数。将这个矩阵作为输入通过声学模型,就可以得到音素信息,即识别到了发音。
在上个环节提取到的特征形成的观察序列,在本步骤将会通过声学模型转换成音素信息(在上图中有部分描述,是为了帮助理解提取特征的目的,实际上是本步骤才完成的)。这里要先解释两个概念:音素和状态。
音素:单词的发音由音素构成。对英语,一种常用的音素集是卡内基梅隆大学的一套由39个音素构成的音素集,参见The CMU Pronouncing Dictionary。汉语一般直接用全部声母和韵母作为音素集,另外汉语识别还分有调无调,不详述。
状态:这里理解成比音素更细致的语音单位就行啦。通常把一个音素划分成3个状态。
从帧到音素的过程中,首先要转换成状态,这是一个难点,通常要计算特征表示为某个状态的概率,然后找到概率最大的状态。这种计算通过声学模型来进行,声学模型包含了一组参数,与提取到的特征进行运算后,得到对应状态的概率值。这组参数是在对大量语音数据的特征进行学习训练后得到的。
这里涉及到不同的语音算法的识别最小单元是不同的,音素是一个 应用于中大型词量系统的识别单元,而且训练起来也比较简单。
3、语音模型的作用
语音识别的最后一步,从音素到单词再到句子,这个过程又可以称为文字解码。在语音解码的过程中,我们得到音素通过字典的方式(以汉字为例),可以得到对应的拼音和单个文字。
但是由于发音接近的单字是比较多的,不能确定准确的单字是哪个。这时要通过语言模型,我们可以得到字与字之间组成词,词与词之间的关联概率,就可以来确定可能的词组和句子的组合。语言模型也是对大量的文本文字进行学习,统计得到的。
在上一步中,我们说状态可能会非常的乱,导致音素是不可取的。而解决这个问题的方法是用隐马尔科夫链(HMM),即构建一个状态网络,这个网络是预先构建的,可以通过声学模型和语言模型明确潜在的状态关联关系,然后再从这个网络中寻找与声音匹配的最佳路径,这样就可以得到符合语言规律的完整句子。
简单来说,就是从大量的语音数据中,找到每个帧对应状态的观察概率,同时计算从当前状态转移到自身或者下个状态的概率,这样就可以利用语言序列上的信息把状态在序列上组合出来,再利用语言模型观察到的文字概率,来得到最终的文字。所以搭建状态网络,是由单词级网络展开成音素网络,再展开成状态网络。语音识别过程其实就是在状态网络中搜索一条最佳路径,语音对应这条路径的概率最大,这称之为“解码”。路径搜索的算法是一种动态规划剪枝的算法,称之为Viterbi算法,用于寻找全局最优路径。
我们再回过头来看语音识别的过程,那个案例如下图所示,是不是有一些感觉了。
可以看到语音识别分别两大关键点,一个是生成机器能理解的声音向量。第二个是通过模型算法识别这些声音向量,最终给出识别结果。
左半部分可以看做是前端,用于处理音频流,从而分隔可能发声的声音片段,并将它们转换成一系列数值。声学模型就是识别这些数值,给出识别结果
右半边看做是后端,是一个专用的搜索引擎,它获取前端产生的输出,在以下三个数据库进行搜索:一个发音模型,一个语言模型,一个词典。
声学模型:声学模型是识别系统的底层模型,其目的是提供一种计算语音的特征矢量序列和每个发音模板之间的距离的方法。也就是说,提取到的语音特性,与某个发音之间的差距越小,越有可能是这个发音。或者说,某帧对应哪个状态的概率最大,那这帧就属于哪个状态。这个可以用GMM(混合高斯模型,就是一种概率分布)或DNN(深度神经网络)来识别。但这样识别出来的结果会比较乱, 因为一个人讲话的速度不一样, 每一帧识别出的结果可能
是:....HHH_EE_LL__LLLL__OOO.....,如下图:
这个问题可以用DTW(动态时间规整)或HMM(隐马尔科夫模型)或CTC(改进的RNN模型)来对齐识别结果,知道单词从哪里开始,从哪里结束,哪些内容是重复的没有必要的。
我们要了解的是,声学模型存在2个问题:
特征向量序列的可变长;每个人说同一个单词的时间长度都不一样,声学模型要能从不同的时间长度的语音信号中识别出是同一个单词。解决方法就是DTW(动态时间规整)、 HMM(隐马尔可夫模型)。
音频信号的丰富变化性;如说话人的性别,健康状况,紧张程度,说话风格、语速,环境噪音,周围人声,信道扭曲,方言差异,非母语口音等。
其实这里最核心的两个数学公式是贝叶斯概率公式,这个可以说是目前人工智能AI的基奠,还有使用的马尔可夫模型进行概率计算,最终得到的文字输出,这里目前行业里面都可以达到90%的识别率。
看到这里知道为什么前面那个手机号码这么难识别了吧,因为手机号码是数字,数字的识别率会比文字识别率低一些,比如拨打,这个拨打在一起的概率会在字典库中的语音模块中占的置信概率大很多,而一个一个数字前后的关联性几乎没有,所以看到这个拨打电话的语音识别率会低很多,以后4S店买车看语音识别率怎么样,直接上车手机互联后,说拨打手机的号码,而不要说拨打联系人的姓名。
4、车载语音离线库的一些特点
这里我需要给大家解释一个东西,我们在前面看到语音识别有网络和本地,其实就是我们说的边缘计算和云端计算,本质都是把语音解码输出为文字,主要是看边缘计算的能力能否满足语音识别的性能需要,一般看声学模型和语言模型的大小,总体而言不使用云端的语音识别的效果会差一些,有些甚至只能处理简单地命令词。比如当车载没有4G网络的时候,语音交互依旧可以控制车机的一些简单操作。边缘计算的好处是响应速度快。
目前车载中控最常见的做法就是本地和网络两种同时存在的做法,一般的智能音响只需要做在线的即可,你想想智能音响在不联网的时候,你不能让他播放歌曲,讲故事,所以离线的需求会非常少,但是车载不一样,离线的时候需要控制车窗、空调、FM、蓝牙等本地信息,所以需要一定的本地词库,当识别到对应的文字后进行比对,输出对应的控制,此时的本地词库就是常说的离线库,离线词库大小内容可多可少,因为离线词库的算法一般类似于唤醒词那样,是做精准比对的。
举一个例子就知道,比如拨打张三的电话,可以是拨打张三电话,给张三打电话、呼叫张三、我想打电话给张三、打电话给张三、给张三打个电话,就这样都可以是6种说法。
你想想中控有电话、空调、FM、蓝牙、等等这多信息控制,如果要体验好,就需要离线词库足够多,包含的语言说法足够多。还有一种比较好的做法是动态离线库,当在线识别到用户经常说的控制信息同离线库做比对,是否有同样的词语,如果没有,那就把说过3次以上的内容进行离线库增加,这个离线库内容所占的空间就更大,而且离线库做的公司,可以根据用户平常在线经常喜欢使用的词库自主学习增加进入离线库。
看到这里,为什么使用微信的语音最多,而其他APP用的少,很少人反馈微信语音识别率不够,因为微信这里和我们这里的语音识别基本上不挨边,你看看我们这些响应的都是需要语音转文字,微信发送的语音,你接收的也是语音,所以可以不用去进行文字编码的过程,只需要模拟信号转数字信号的过程。
下图是科大讯飞语音识别对于本地和网络的区别,本地也就是离线库,此时里面的识别引擎在本地,所以这部分如果要做好体验,对于离线库的内容大小就有非常大的需求,至少需要8G以上才能做到本地自然语音识别。
而对于本地命令和云端对于主机的性能要求也是不同的,如果是运行在本地,那么CPU的运行速度就需要更大一些,如果是云端,那么对于主机要求就没有那么高,不过目前的车载主机都能满足这些性能要求。
有趣的唤醒词
大家发现了一个问题没有,目前基本上所有的智能音响和车载中控的唤醒词都是四个字,小度小度,小派小派,天猫精灵,hey谷歌,Alexa,上汽荣威的你好,斑马,长安汽车的,小安,你好。这里给大家两个思考哈,为什么需要四个字的音节,另外一个思考是,这个唤醒词是不是可以个性化定制呢,自己设置喜欢的唤醒词比如家里的宠物小花,小花等等,这个是否可以实现呢?
那么我们来看看唤醒词唤醒的原理是什么。首先用户要输入他们的语音,然后进行端点检测,把人说话的部分给检测出来,之后就是一个信号处理的过程,对信号进行一个非常好的噪音的处理,或者是其他方面的处理。接下来就是提取声学特征,进行识别解码,之后就是置信度判别,由于现在是一个唤醒+识别的系统,那唤醒成功之后需要送到服务器进行在线解码,最后获取到识别结果。
可以看到唤醒词识别和正常的语音识别的技术是不一样的,唤醒单元作为语音识别功能的触发来使用,即唤醒模块和语音识别是两个独立的模块。不需要字典和语言模型,只需要做前面的声学模型对比,这里一般都放置在本地+云端,如果是存储在本地的话,那么唤醒词的声学模型需要找不同的人去训练存储的,比如这个是小孩故事机,需要找不同年龄段小孩的声音去训练声学模型,此时老人的声学模型可能就需要的少一些。根据不同产品的定位,需要找的声学模型是不同的。
唤醒词唤醒率和误唤醒率一直都是一个头痛的问题,唤醒率的影响因素有这几点,
为了能够成功唤醒,而且不被误唤醒,每个词在3个字到5个汉字之间,4个字最佳,行业内唯一做到双音节词的是若琪,音节覆盖尽量多,差异大,响亮,建议选择不常用词语。
所以大家看到的唤醒词都是四个字的,而且是在正常说话中不怎么使用的字,大家没有在跟谁沟通的过程中还说你好,斑马。
这里跟大家说一个有趣的事情,亚马逊的第一代智能音响刚进入中国的时候,hello Alexa的唤醒率很低,因为中国人的英文声调模型和外国人是有一定的区别的,所以鼻音要重一些才能唤醒。
唤醒词的定制更换如果是在本地,通常要经过训练,即需要使用设备的拾音麦克风采集足够多的人声样本进行特征的学习,你车上的麦克不可能喊不同人来训练学习,否则的话,更换后的唤醒词只能自己单独唤醒,其他人用新的唤醒词就唤不醒。目前百度更换唤醒词的识别判断内容放在云端,云端那边可以有很多大量的训练。
因为车上的使用环境和智能音响还差别比较大,车上使用实体按键唤醒的方式比较多,而且车上基本上都有一个语音交互的按键,按下这个按键语音助手就出来了,下图就是荣威RX5的方向盘按键上语音唤醒按键。
语音识别中的技术难点
语音识别大家这样看了觉得还是挺简单的嘛,实际情况下还有哪些技术难点需要解决的呢。上图表中的技术难点唤醒和VAD已经有介绍,剩下回声消除、低信噪比、鸡尾酒会问题都是和噪音相关,其实很多情况下都是噪音需要去处理,这里我们一起来看看处理噪音都有哪些方法。
在说噪音之前,我们先解释一下什么是噪音,噪音就是我们的底噪么?比如很多人说话的时候,我只需要拾取某一个人的声音,那么其他人的声音也在此处属于噪声。
在进入下一个降噪相关解说之前,我们先了解噪音的特性。
噪声来源于实际的应用环境,因而其特性变化无穷,噪声可以是加性的,也可以是非加性的。考虑到加性噪声更普遍且易于分析问题,并且对于部分非加性噪声,如乘积性噪声或卷积性噪声,可以通过同态变换而成为加性噪声,这里我们仅讨论加性噪声。加性噪声大致可分为周期性噪声、冲激噪声和宽带噪声。
加性噪声一般指热噪声、散弹噪声等,它们与信号的关系是相加,不管有没有信号,噪声都存在。而乘性噪声一般由信道不理想引起,它们与信号的关系是相乘,信号在它在,信号不在它也就不在。一般通信中把加性随机性看成是系统的背景噪声;而乘性随机性看成系统的时变性(如衰落或者多普勒)或者非线性所造成的。
(1)周期性噪声
周期性噪声的特点是有许多离散的窄谱峰,它往往来源于发动机等周期运转的机械,如或交流声会引起周期性噪声。周期性噪声引起的问题可以通过功率谱发现,并通过滤波或变换技术将其去掉。
(2)冲激噪声
冲激噪声表现为时域波形中突然出现的窄脉冲,它通常是放电的结果。消除这种噪声可根据带噪语音信号幅度的平均值确定阈值,当信号幅度超过这一阈值时判为冲激噪声,然后进行消除。
(3)宽带噪声
宽带噪声的来源很多,如热噪声、气流如风、呼吸噪声及各种随机噪声源等,量化噪声也可视为宽带噪声。由于宽带噪声与语音信号在时域和频域上完全重叠,因而消除它最为困难,这种噪声只有在语音间歇期才单独存在。对于平稳的宽带噪声,通常认为是白色高斯噪声不具有白色频谱的噪声,可以先进行白化处理。对于非平稳的宽带噪声,情况就更为复杂一些。
1、频谱减法:是利用噪声的统计平稳性以及加性噪声与读音不相关的特点而提出的一种语音增强方法。这种方法没有使用参考噪声源,但它假设噪声是统计平稳的,即有语音期间噪声振幅谱的期望值与无语音间隙噪声的振幅谱的期望值相等。用无语音间隙测量计算得到的噪声频谱的估计值取代有语音期间噪声的频谱,与含噪语音频谱相减,得到语音频谱的估计值。当上述差值得到负的幅度值时,将其置零。
频谱减法的主要思想是认为:含噪语音在噪声平均功率以上的部分就是语音功率,其余则认为是噪声功率。这种显然忽略了噪声和语音的随机特性。在含噪语音的功率谱中,噪声平均功率以上部分并非全是语音,其中肯定有不少加性噪声成分存在,其下部分则也必有语音成分存在。因此,这种方法对提高语音信噪比十分有限,而且还会引起语音的失真。特别是在低信噪比时,这种方法很难提高语音质量,更难提高语音可懂度。普减法的优点在于它的算法简单,并且可以较大幅度地提高信噪比,其缺点是增强后的语音中含有明显的音乐噪声,这是由频谱相减而产生的一种残留噪声,具有一定的节奏起伏感,故而被称为音乐噪声。
线性滤波法:
线性滤波法主要是利用了语音的产生模型。对于受加性稳态白噪声干扰的语音信号来说,语音的频谱又以根据语音的产生模型近似地用含噪语音来预测得到。而噪声频谱则用其期望值来近似。这样得到了语音和噪声近似的频谱后就可得到滤波器,由此滤波器可使语音得到增强。
线性滤波法不仅用到了噪声的统计知识,还用到了部分语音知识,但显然这些知识都是一种近似的代替。因此这种方法对提高语音信噪比和可懂效果十分有限。特别是当信噪比较低时,对语音参数的预测误差明显增大,从而降噪效果就不明显,并且当噪声不是白噪声时,按照语音的产生模型就很难准确预测语音参数,因此对有色噪声线性滤波方法就能难以应付。
小波变换法和子空间语音降噪法这里就不做展开和介绍了,有兴趣的朋友可以下来一起讨论学习。
2、车载语音降噪相关介绍
车载语音识别把语音转为文字的过程中,有很多技术问题要解决,首先这个过程中肯定有环境中的干扰,这些都主要是实际驾驶中的情况而来,比如在听音乐的时候,要做到语音交互,本身就有回声的干扰,有空气中噪音的干扰,前排的驾驶位置,但如果是后座的乘客想要使用中控区的语音交互就显得有些困难,用户需要大声呼叫或者是身体向前倾,也就是必须要让声源和麦克风的距离足够的近,才能够采集到声源信息。。这些技术的根本问题就是两个,一个是降噪(噪音包括回声和环境噪音),一个是声源定位。
降噪和声源定位都可以用一种技术来解决,就是多麦克风或者麦克风阵列技术来解决,首先说说声源定位,通过麦克风声源接收到的大小,来判断语音说话者的方案,那么把其他方位的噪音进行滤除,定向接收这个方向沟通者的声音,当然更具体的原理我会在精讲课程进行讲述。这里还有一个好处是知道哪里声源发过来的声音,进行个性化服务,比如右后排的乘坐人员说我好闷,那么语音定位后,只需要开右后排的车窗,不必把所有车窗都进行打开,可以做到人性化服务,目前威马的EX5已经实现,而且华为车载事业部的最新专利,就写了关于声源定位后不同使用者对于车载语音助手的权限分布,比如小孩就不能控制前排车窗的升降等等。
由于车上的结构布置,不像智能音响可以做到MIC风阵列,这里简单啰嗦一句,车上的MIC风总成一般都是放置在阅读灯的位置,基本上是双MIC风,要么就在车载中控显示屏那里,因为大家要交互基本上会看屏幕反馈的信息,所以声音方向会偏向于那里,同时目前车上麦克风都以数字硅麦为主了,直接把模拟信号转为数字信号,这样受到的干扰程度会小很多。当我们语音识别率降低的时候,需要检查一下MIC风那里是不是有灰尘了,那里灰尘多了会影响语音的识别。
目前也有很多车厂准备用ADI的A2B方案来实现多MIC方案,百度就在做这个方案,以前的MIC总成的越多,线材会越多,这样走线和干扰都无法消除,现在A2B方案类似于I2C总线,从设备挂在这个线材上即可,这样可以进行声源定位,而且可以主从交互。
开车途中哪些操作对于语音识别的影响最大呢,也就是噪音最大呢,其实最大是空调、车速快起来后的轮胎噪音,还有开窗开车的风噪,因为这些噪音的频率都是在咱们人耳可接受的频率,也就是MIC风可以接收进去的频率。
针对这些噪音的处理和其它智能音箱的算法处理还不一样,这里的算法需要去除周期性噪声。
3、回声消除
举一个例子就知道:你在KTV唱歌,你上一句话,我爱你,爱着你,刚从音箱中播放出来,你紧接着唱就像老鼠爱大米,此时麦克风里面就会有两个声音同时混合,“我爱你,爱着你” “就像老鼠爱大米”,你想想此时如果两句话都同一时间进入到麦克风,那么音箱出来的声音就混合了,就不好听了。
此时就需要麦克风芯片去把音箱混进来的“我爱你,爱着你”消除掉,正常情况下因为上一句话内容麦克风芯片有存储,此时又进来相同的内容,把这部分滤除掉就行,但是由于线路上有一定的失真,第一次进去的声音大小和音箱返回的声音大小是不同的,而且声音快慢也有一定差别,这个声音的处理就最考验芯片的算法,如果要滤除的干干静静,此时需要的时间又比较久,如果时间收敛比较快,那么又存在一定滤除不干净,这个才是回声消除最难的算法地方,而且还需要自适应,因为返回到麦克风的回音有很多不同地方返回来的,需要快速响应并适应不同地方返回来的回声算法。
试想一下,对一个至少混合了两个声音的语音流,要把它们分开,然后去掉其中一个,难度何其之大。就像一瓶蓝墨水和一瓶红墨水倒在一起,然后需要把红墨水提取出来,这恐怕不可能了。
所以回声消除被认为是神秘和难以理解的技术也就不奇怪了。诚然,如果仅仅单独拿来一段混合了回音的语音信号,要去掉回音也是不可能的(就算是最先进的盲信号分离技术也做不到)。但是,实际上,除了这个混合信号,我们是可以得到产生回音的原始信号的,虽然不同于回音信号。
其中,我们可以得到两个信号:一个是蓝色和红色混合的信号1,也就是实际需要发送的speech和实际不需要的echo混合而成的语音流;另一个就是虚线的信号2,也就是原始的引起回音的语音。那大家会说,哦,原来回声消除这么简单,直接从混合信号1里面把把这个虚线的2减掉不就行了?
请注意,拿到的这个虚线信号2和回音echo是有差异的,直接相减会使语音面目全非。我们把混合信号1叫做近端信号ne,虚线信号2叫做远端参考信号fe,如果没有fe这个信号,回声消除就是不可能完成的任务,就像“巧妇难为无米之炊”。
虽然参考信号fe和echo不完全一样,存在差异,但是二者是高度相关的,这也是echo称之为回音的原因。至少,回音的语义和参考信号是一样的,也还听得懂,但是如果你说一句,马上又听到自己的话回来一句,那是比较难受的。既然fe和echo高度相关,echo又是fe引起的,我们可以把echo表示为fe的数学函数:echo=F(fe)。函数F被称之为回音路径。在声学回声消除里面,函数F表示声音在墙壁,天花板等表面多次反射的物理过程;在线路回声消除里面,函数F表示电子线路的二四线匹配耦合过程。很显然,我们下面要做的工作就是求解函数F。得到函数F就可以从fe计算得到echo,然后从混合信号1里面减掉echo就实现了回声消除。
举一个例子就知道:你在KTV唱歌,你上一句话,我爱你,爱着你,刚从音箱中播放出来,你紧接着唱就像老鼠爱大米,此时麦克风里面就会有两个声音同时混合,“我爱你,爱着你” “就像老鼠爱大米”,你想想此时如果两句话都同一时间进入到麦克风,那么音箱出来的声音就混合了,就不好听了。
此时就需要麦克风芯片去把音箱混进来的“我爱你,爱着你”消除掉,正常情况下因为上一句话内容麦克风芯片有存储,此时又进来相同的内容,把这部分滤除掉就行,但是由于线路上有一定的失真,第一次进去的声音大小和音箱返回的声音大小是不同的,而且声音快慢也有一定差别,这个声音的处理就最考验芯片的算法,如果要滤除的干干静静,此时需要的时间又比较久,如果时间收敛比较快,那么又存在一定滤除不干净,这个才是回声消除最难的算法地方,而且还需要自适应,因为返回到麦克风的回音有很多不同地方返回来的,需要快速响应并适应不同地方返回来的回声算法。
下期内容NLP预估:
前面已经有语音转为文字了,那么机器识别到文字后要操作什么,反馈什么,这个就是NLP需要处理的事情。
这里最难的就是NLP,怎么让机器像人一样理解我们的语音,这里是最难的。大家常说的97%的语音识别率,就是仅仅是前端,把语音转为为文字的正确率为97%,现在理解了吧,这里的正确率不是指的机器最终反馈的结果正确率,而仅仅是语音转为文字的正确率,执行我们心里想要的命令的准确率这个最多只有80%,是说语音识别率这么高,我说话就不好使了呢,不是我普通话不标准,是理解有问题。
就跟做考试试题一样,每个字都能认识,就是不懂怎么做,还有同同事沟通,明明每句话都听到了耳朵里面了,但是就是不知道对方要表达什么意思,我需要做什么,最后就笑笑回答,你很棒。