语音识别长篇研究(三)

语音识别长篇研究(三)

承接上文

五、深度学习进行语音识别

1、机器翻译的工作流程


如果你知道神经机器翻译是如何工作的,那么你可能会猜到,我们可以简单地将声音送入神经网络中,并训练使之生成文本。

一个大问题是语速不同。一个人可能很快地说出「hello!」而另一个人可能会非常缓慢地说「heeeelllllllllllllooooo!」。这产生了一个更长的声音文件,也产生了更多的数据。这两个声音文件都应该被识别为完全相同的文本「hello!」而事实证明,把各种长度的音频文件自动对齐到一个固定长度的文本是很难的一件事情。

2、声音转换成比特:

声音是作为波(wave) 的形式传播的。我们如何将声波转换成数字呢?让我们使用我说的「hello」这个声音片段举个例子:



我说「hello」的波形

声波是一维的,它在每个时刻都有一个基于其高度的值(声波其实是二维的,有时间,还有振幅(即这个基于高度的值))。让我们把声波的一小部分放大看看:

为了将这个声波转换成数字,我们只记录声波在等距点的高度:

给声波采样

这被称为采样(sampling)。我们每秒读取数千次,并把声波在该时间点的高度用一个数字记录下来。这基本上就是一个未压缩的 .wav 音频文件。

「CD 音质」的音频是以 44.1khz(每秒 44100 个读数)进行采样的。但对于语音识别,16khz(每秒 16000 个采样)的采样率就足以覆盖人类语音的频率范围了。

让我们把「Hello」的声波每秒采样 16000 次。这是前 100 个采样:

每个数字表示声波在一秒钟的 16000 分之一处的振幅。

3、数字采样小助手

因为声波采样只是间歇性的读取,你可能认为它只是对原始声波进行粗略的近似估计。我们的读数之间有间距,所以我们必然会丢失数据,对吧?

数字采样能否完美重现原始声波?那些间距怎么办?
但是,由于采样定理,我们知道我们可以利用数学,从间隔的采样中完美重建原始声波——只要我们的采样频率比期望得到的最高频率快至少两倍就行。
我提这一点,是因为几乎每个人都会犯这个错误,并误认为使用更高的采样率总是会获得更好的音频质量。其实并不是。

4、预处理采样的声音数据

我们现在有一个数列,其中每个数字代表 1/16000 秒的声波振幅。

我们可以把这些数字输入到神经网络中,但是试图直接分析这些采样来进行语音识别仍然很困难。相反,我们可以通过对音频数据进行一些预处理来使问题变得更容易。

让我们开始吧,首先将我们的采样音频分成每份 20 毫秒长的音频块。这是我们第一个 20 毫秒的音频(即我们的前 320 个采样):

将这些数字绘制为简单的折线图,我们就得到了这 20 毫秒内原始声波的大致形状:

虽然这段录音只有**** 1/50 ****秒的长度,但即使是这样短暂的录音,也是由不同频率的声音复杂地组合在一起的。其中有一些低音,一些中音,甚至有几处高音。但总的来说,就是这些不同频率的声音混合在一起,才组成了人类的语音。
为了使这个数据更容易被神经网络处理,我们将把这个复杂的声波分解成一个个组成部分。我们将分离低音部分,再分离下一个最低音的部分,以此类推。然后将(从低到高)每个频段(frequency band)中的能量相加,我们就为各个类别的音频片段创建了一个指纹(fingerprint)。
想象你有一段某人在钢琴上演奏 C 大调和弦的录音。这个声音是由三个音符组合而成的:C、E 和 G。它们混合在一起组成了一个复杂的声音。我们想把这个复杂的声音分解成单独的音符,以此来分辨 C、E 和 G。这和语音识别是一样的道理。
我们需要傅里叶变换**(FourierTransform)来做到这一点。它将复杂的声波分解为简单的声波。一旦我们有了这些单独的声波,我们就将每一份频段所包含的能量加在一起。

最终得到的结果便是从低音(即低音音符)到高音,每个频率范围的重要程度。以每 50hz 为一个频段的话,我们这 20 毫秒的音频所含有的能量从低频到高频就可以表示为下面的列表:

列表中的每个数字表示那份 50Hz 的频段所含的能量

不过,把它们画成这样的图表会更加清晰

你可以看到,在我们的 20 毫秒声音片段中有很多低频能量,然而在更高的频率中并没有太多的能量。这是典型「男性」的声音。

如果我们对每 20 毫秒的音频块重复这个过程,我们最终会得到一个频谱图(每一列从左到右都是一个 20 毫秒的块):

「hello」声音剪辑的完整声谱

频谱图很酷,因为你可以在音频数据中实实在在地看到音符和其他音高模式。对于神经网络来说,相比于原始声波,从这种数据中寻找规律要容易得多。因此,这就是我们将要实际输入到神经网络中去的数据表示方式。

5、短声音识别字符

现在我们有了格式易于处理的音频,我们将把它输入到深度神经网络中去。神经网络的输入将会是 20 毫秒的音频块。对于每个小的音频切片(audio slice),神经网络都将尝试找出当前正在说的声音所对应的字母。

我们将使用一个循环神经网络——即一个拥有记忆,能影响未来预测的神经网络。这是因为它预测的每个字母都应该能够影响它对下一个字母的预测。例如,如果我们到目前为止已经说了「HEL」,那么很有可能我们接下来会说「LO」来完成「Hello」。我们不太可能会说「XYZ」之类根本读不出来的东西。因此,具有先前预测的记忆有助于神经网络对未来进行更准确的预测。

当通过神经网络跑完我们的整个音频剪辑(一次一块)之后,我们将最终得到一份映射(mapping),其中标明了每个音频块和其最有可能对应的字母。这是我说那句「Hello」所对应的映射的大致图案:



我们的神经网络正在预测我说的那个词很有可能是「HHHEE_LL_LLLOOO」。但它同时认为我说的也可能是「HHHUU_LL_LLLOOO」,或者甚至是「AAAUU_LL_LLLOOO」。

我们可以遵循一些步骤来整理这个输出。首先,我们将用单个字符替换任何重复的字符:

然后,我们将删除所有空白:

这让我们得到三种可能的转写——「Hello」、「Hullo」和「Aullo」。如果你大声说出这些词,所有这些声音都类似于「Hello」。因为神经网络每次只预测一个字符,所以它会得出一些纯粹表示发音的转写。例如,如果你说「He would not go」,它可能会给出一个「He wud net go」的转写。

在我们可能的转写「Hello」、「Hullo」和「Aullo」中,显然「Hello」将更频繁地出现在文本数据库中(更不用说在我们原始的基于音频的训练数据中了),因此它可能就是正解。所以我们会选择「Hello」作为我们的最终结果,而不是其他的转写。

六、语音识别评估标准

在语音识别中,常用的评估标准为词错误率(Word Error Rate,WER)。

我们上面讲了帧向量识别为单词,需要用声学模型。因为识别出来的整个词序列是混乱的,需要进行替换、删除、插入某些词,使得次序列有序完整。

WER就是反映上述过程的标准,能直接反映识别系统声学模型的性能,也是其他评估指标如句错误率SER的基础。

传统的词错误率评估算法在语音识别中存在三种典型的词错误:
1)替换错误(Substitution)
在识别结果中,正确的词被错误的词代替;
2)删除错误(Deletion)
在识别结果中,丢失了正确的词;
3)插入错误(Insertion)
在识别结果中,增加了一个多余的词;所以,词错误率为:


S 为替代错误词数,D 为删除错误词数,I 为插入错误词数。T为参照句子中的所有词数。
需要注意的是,因为有插入词,所以WER有可能大于100%。

七、语音识别的关键要素

1、语音激活检测(voice active detection,VAD)

(1)定义:语音激活检测,简称VAC,是一种用于检查人声的技术,判断什么时候有语音什么时候没有语音(静音);解决识别到声音中人的语音的问题,因为有声音但不一定是人的语音。

(2)需求背景:

在近场识别场景,比如使用语音输入法时,用户可以用手按着语音按键说话,结束之后松开,由于近场情况下信噪比(signal to noise ratio, SNR))比较高,信号清晰,简单算法也能做到有效可靠。
但远场识别场景下,用户不能用手接触设备,这时噪声比较大,SNR下降剧烈,必须使用VAD了。

智能音箱在实际使用场景中,一般是放在一个空间内,然后人对他喊话,它进行识别和回应,“喊话 》回应”的过程是一个最小的交互过程。但空间内的声音不单只有你说话的声音,也有其他的声音,比如水龙头的流水声、空调的声音、开水沸腾的声音等等,音箱出于对用户隐私保护和设备功耗的问题,不能实时都让设备处在一个运行的状态(自己猜想、未求证),需要对这些这些声音进行识别,只在有人声的时候才运行对应需要的系统进行处理操作,于是就需要先做“语音激活检测”。

(3)难点:

A.噪声:开关门的声音、鼓掌、跺脚、宠物叫声,困难的如:电视的声音、多人的交谈声等。

2、语音唤醒(voice trigger,VT)

(1)定义:

语音唤醒,简称VT,可以理解为喊名字,引起听者的注意。上面通过“语音激活检测”技术检测到人的语音后,那是不是所有人的声音都需要进行回应处理呢?答案是NO,因为现实环境中存在鸡尾酒效应。在吵杂的环境中,我们一般只会获取到对你说的话,其他人的对话的声音我们会自动屏蔽掉,除非你在偷听旁边的对话,但其实偷听的时候你也会屏蔽掉其他的一些声音,但如果这时候有人喊了你名字,你也会马上反应过来,并进行对话回应,这是一个锚定的过程,把你我锚定在你我对话的过程中来,那么后面的对话就都是对你讲的了,那你就会去听他见的每句话。

(2)需求背景:

在近场识别时,用户可以点击按钮后直接说话,但是远场识别时,需要在VAD检测到人声之后,进行语音唤醒,相当于叫这个AI(机器人)的名字,引起ta的注意,比如苹果的“Hey Siri”,Google的“OK Google”,亚马逊Echo的“Alexa”等。

回到智能音箱的场景,周围环境的声音中,有很多人的语音,家里的成员在对话,小孩子在吵闹,电视里的演员在说话,这么多的声音,那么那一句话是我应该去听且进行回应的呢?那么就需要先做“语音唤醒”了,相当于喊人的名字,你需要喊一下智能音箱的名字,让它知道你接下来是在和它说话,然后它才对你说的话做出反应,那么你喊名字后它响应的过程就是“语音唤醒”的过程。

所以每个智能音箱都有一个名字,这有产品拟人化的目的,但更根本的原因是技术上需要有个名字对设备进行“语音唤醒”的过程。

(3)难点:语音识别,不论远场还是进场,都是在云端进行,但是语音唤醒基本是在(设备)本地进行的,要求更高。

A.唤醒响应时间:据傅盛说,世界上所有的音箱,除了Echo和他们做的小雅智能音箱能达到1.5秒之外,其他的都在3秒以上。

B.功耗要低:iphone 4s出现Siri,但直到iphone 6s之后才允许不接电源的情况下直接喊“hey Siri”进行语音唤醒。这是因为有6s上有一颗专门进行语音激活的低功耗芯片,当然算法和硬件要进行配合,算法也要进行优化。

C.唤醒效果:喊它的时候它不答应这叫做漏报,没喊它的时候它跳出来讲话叫做误报。漏报和误报这2个指标,是此消彼长的,比如,如果唤醒词的字数很长,当然误报少,但是漏报会多;如果唤醒词的字数很短,漏报少了,但误报会多,特别如果大半夜的突然唱歌或讲故事,会特别吓人的

D.唤醒词:技术上要求,一般最少3个音节。比如“OK google”和“Alexa”有四个音节,“hey Siri”有三个音节;国内的智能音箱,比如小雅,唤醒词是“小雅小雅”,而不能用“小雅”。注:一般产品经理或行业交流时,直接说汉语“语音唤醒”,而英文缩写“VT”,技术人员可能用得多些。

3、低信噪比(signal to noise ratio, SNR):

远场环境要求拾音麦克风的灵敏度高,这样才能在较远的距离下获得有效的音频振幅,同时近场环境下又不能爆音(振幅超过最大量化精度)。这样的环境下,噪音必然会很大,从而使得语音质量变差,即SNR降低。另外作为家庭助手,家庭环境中的墙壁反射形成的混响对语音质量也有不可忽视的影响。为了对语音信号进行增强,提高语音的SNR,远场语音识别通常都会采用麦克风阵列。amazon的echo采用了6+1的设计(环形对称分布6颗,圆心中间有1颗),google home目前采用的是2mic的设计。在算法方面,基于麦克风阵列的波束形成(beamforming)技术已经有很多年的发展,最新的一些论文里有提到使用使用DNN来替代波束形成,实现语音增强。但效果仍然还有很大的提升空间,尤其是背景噪声很大的环境里,如家里开电视、开空调、开电扇,或者是在汽车里面等等。

4、麦克风阵列(Microphone Array)

(1)定义:

由一定数目的声学传感器(一般是麦克风)组成,用来对声场的空间特性进行采样并处理的系统。一是由麦克风硬件组成,完成对对声音的的拾取,就是机器的“耳朵”;二是由算法软件组成,对拾取到的原声进行处理,保证输出更清晰,信噪比更高的声音。

(2)需求背景:

在会议室、户外、商场等各种复杂环境下,会有噪音、混响、人声干扰、回声等各种问题。比如家里的风扇声、脚步声、流水声、小孩玩闹的声音、大人们交谈的声音等,从这么复杂的声音中提炼出目标信号声,使得声音更纯净,噪音更少。应用在人机交互的语音识别场景中,就是从拾取到的声音中提取出来人的语音,最大化去除非其他的噪音,使得处理后输出的声音最大化保证是人的语音。特别是远场环境,要求拾音麦克风的灵敏度高,这样才能在较远的距离下获得有效的音频振幅,同时近场环境下又不能爆音(振幅超过最大量化精度)。另外,家庭环境中的墙壁反射形成的混响对语音质量也有不可忽视的影响。

(3)作用:

1)语音增强(Speech Enhancement):当语音信号被各种各样的噪声(包括语音)干扰甚至淹没后,从含噪声的语音信号中提取出纯净语音的过程。

2)声源定位(Source Localization):使用麦克风阵列来计算目标说话人的角度和距离,从而实现对目标说话人的跟踪以及后续的语音定向拾取。

3)去混响(Dereverberation):声波在室内传播时,要被墙壁、天花板、地板等障碍物形成反射声,并和直达声形成叠加,这种现象称为混响。

混响在语音识别中是个蛮讨厌的因素,混响去除的效果很大程度影响了语音识别的效果。

我们知道,当声源停止发声后,声波在房间内要经过多次反射和吸收,似乎若干个声波混合持续一段时间,这种现象叫做混响。

混响会严重影响语音信号处理,比如互相关函数或者波束主瓣,降低测向精度。

1.利用麦克风阵列去混响的主要方法有以下几种:

A.基于盲语音增强的方法(Blind signal enhancement approach),即将混响信号作为普通的加性噪声信号,在这个上面应用语音增强算法。

B.基于波束形成的方法(Beamforming based approach),通过将多麦克风对收集的信号进行加权相加,在目标信号的方向形成一个拾音波束,同时衰减来自其他方向的反射声。

C.基于逆滤波的方法(An inverse filtering approach),通过麦克风阵列估计房间的房间冲击响应(Room Impulse Response, RIR),设计重构滤波器来补偿来消除混响。

对于汽车来说,车内吸音材料很多,一般混响问题倒不是特别大。

(4)回声抵消:

严格来说,这里不应该叫回声,应该叫“自噪声”。回声是混响的延伸概念,这两者的区别就是回声的时延更长。一般来说,超过100毫秒时延的混响,人类能够明显区分出,似乎一个声音同时出现了两次,我们就叫做回声。

实际上,这里所指的是语音交互设备自己发出的声音,比如Echo音箱,当播放歌曲的时候若叫Alexa,这时候麦克风阵列实际上采集了正在播放的音乐和用户所叫的Alexa声音,显然语音识别无法识别这两类声音。回声抵消就是要去掉其中的音乐信息而只保留用户的人声,之所以叫回声抵消,只是延续大家的习惯而已,其实是不恰当的,在通信的电话机行业,这个叫消侧音。

(5)声源信号提取/分离:声源信号的提取就是从多个声音信号中提取出目标信号,声源信号分离技术则是需要将多个混合声音全部提取出来。

信号的提取和分离主要有以下几种方式:
(1)基于波束形成的方法,即通过向不同方向的声源分别形成拾音波束,并且抑制其他方向的声音,来进行语音提取或分离; 这是一种通用的信号处理方法,这里是指将一定几何结构排列的麦克风阵列的各麦克风输出信号经过处理(例如加权、时延、求和等)形成空间指向性的方法。波束形成主要是抑制主瓣以外的声音干扰。

(2)基于传统的盲源信号分离的方法进行,主要包括主成分分析和基于独立成分分析的方法。


(6)麦克风阵列的分类:

1)按阵列形状分:线性、环形、球形麦克风。
在原理上,三者并无太大区别,只是由于空间构型不同,导致它们可分辨的空间范围也不同。
比如,在声源定位上,线性阵列只有一维信息,只能分辨180度;
环形阵列是平面阵列,有两维信息,能分辨360度;
球性阵列是立体三维空间阵列,有三维信息,能区分360度方位角和180度俯仰角。
2)按麦克风个数分:单麦、双麦、多麦
麦克风的个数越多,对说话人的定位精度越高,在嘈杂环境下的拾音质量越高;
但如果交互距离不是很远,或者在一般室内的安静环境下,5麦和8麦的定位效果差异不是很大。
傅盛说,全行业能做“6+1”麦克风阵列(环形对称分布6颗,圆心中间有1颗)的公司可能不超过两三家,包括猎户星空(以前行业内叫猎豹机器人)在内。而Google Home目前采用的是2mic的设计。

(7)模型匹配:

主要是和语音识别以及语义理解进行匹配,语音交互是一个完整的信号链,从麦克风阵列开始的语音流不可能割裂的存在,必然需要模型匹配在一起。实际上,效果较好的语音交互专用麦克风阵列,通常是两套算法,一套内嵌于硬件实时处理,另外一套是基于该硬件的匹配语音软件处理,还有基于云端的语音识别的深度学习处理。

(8)原理(以车载场景为例):

因为汽车的拾音距离都比较近,适合使用近场模型。如下图所示是一个简单的基于均匀线阵的近场模型,声波在传播过程中要发生幅度衰减,衰减因子与传播距离成正比。近场模型和远场模型最主要的区别在于是否考虑麦克风阵列各阵元接收信号的幅度差别。下图中,q为麦克风阵元的个数,r为声源到阵列中心(参考点)的距离,α为声源与阵元连线之间的夹角,rn为声源到阵元n的距离,dn为阵元n到参考点的距离,Δd为相邻阵元间距。

下图为均匀圆阵的近场模型,多个麦克风均匀地排列在一个圆周上,就构成了一个麦克风均匀圆阵列 (UCA)。以UCA中心(圆心O)作为参考点,d0 表示信源S与阵列中心的距离,A为信源到UCA平面的垂足,以OA连线所在的半径为参考线,号麦克风所在半径与OA夹角为Δφθ,表示信号到达方向(SO与参考线的夹角),di(i = 1 ,2 , …, M)表示信源到第个麦克风的距离。


UCA任意两个相邻麦克风对应的圆周角为2π/ M,M为麦克风的个数,如下图所示:

当信源离麦克风阵列较近时,大家熟知的基于平面波前的远场模型不再适用,必须采用更为精确也更为复杂的基于球面波前的近场模型。声波在传播过程中要发生幅度衰减,其幅度衰减因子与传播距离成正比。信源到麦克风阵列各阵元的距离是不同的,因此声波波前到达各阵元时,幅度也是不同的。近场模型和远场模型最主要的区别在于是否考虑麦克风阵列各阵元因接收信号幅度衰减的不同所带来的影响。对于远场模型,信源到各阵元的距离差与整个传播距离相比非常小,可忽略不计;对于近场模型,信源到各阵元的距离差与整个传播距离相比较大,必须考虑各阵元接收信号的幅度差。

具体的算法既要考虑到麦克风阵列各阵元接收信号的相位差,又得考虑到各阵元接收信号的幅度差,从而实现对声源的二维(或三维)定位。根据声源的方位信息,可以使用波束形成技术获得形成一个或多个波束指向感兴趣的声源,从而更好地去噪,完成对该声源信号的提取和分离。由于可以利用的方位信息是二维的,因此,相应的波束具有二维特性。即除了对某一方向的信号有增强作用外,还能对同一方向、不同距离的信号有选择作用,这对于背景噪声和回声消除是非常有用的。

下图为一个实际算法的仿真结果,可以看到,声源相对于参考点,它的角度和距离都相当清晰可辨:

(9)现状:

当前成熟的麦克风阵列的主要包括:讯飞的2麦、4麦和6麦方案,思必驰的6+1麦方案,云知声(科胜讯)的2麦方案,以及声智科技的单麦、2麦阵列、4(+1)麦阵列、6(+1)麦阵列和8(+1)麦阵列方案,其他家也有麦克风阵列的硬件方案,但是缺乏前端算法和云端识别的优化。由于各家算法原理的不同,有些阵列方案可以由用户自主选用中间的麦克风,这样更利于用户进行ID设计。其中,2个以上的麦克风阵列又分为线形和环形两种主流结构,而2麦的阵列则又有同边和前后两种结构。

从汽车的整体结构来看,选用多麦是可行和必须的,至少6麦以上为好,每个前后每个座位处可以各放置1个,前端中控上可以放置1至2个(司机可多1个,另一个可以单独用来指向性收集噪声用来消噪),中部的扶手置物盒处可以放置1个,这样下来定位、消噪、消回声都能比较好的解决。

(10)未来趋势:

1)声学的非线性处理研究:现在的算法基本忽略了非线性效应,所以当前麦克风阵列的基本原理和模型方面就存在较大的局限,今后在非线性处理方面会有比较深入的研究。

2)麦克风阵列的小型化:现今的麦克风阵列受制于半波长理论的限制,现在的口径还是较大,借鉴雷达领域的合成孔径方法,麦克风阵列可以做的更小。

3)麦克风阵列的低成本化:随着近年来新技术的应用,多麦克风阵列的成本下降将会非常明显。

4)多人声的处理和识别:现在的麦克风阵列和语音识别还都是单人识别模式,对于人耳的鸡尾酒会效应(人耳可以在嘈杂的环境中分辨想要的声音,并且能够同时识别多人说话的声音),随着深度学习的研究深入和应用普及,这方面应该会有较大突破。

5)结论

总之,语音操作时代已经来临,尤其在于车机方面,已经要成为标配了,但是由于各个应用和底层系统之间的接口问题,比如采用的基础语音识别厂家不一、各个应用的语音命令可能冲突或不支持语音、进而车机整体层面语音命令混乱,从而导致语音操作还不具有统一标准,在实际使用中问题层出不穷。

这个问题可能需要等到各大原车厂意识到之后,统一指定语音识别的底层基础厂商,统一指定上层应用厂商的语音命令,进一步的统一控制和调度各个应用的语音命令之后才可能带来体验很好的语音操作。后装市场还没有哪家有实力和号召力实现这三个统一,所以目前国内还看不到很好用的语音操作车机。

5、全双工通讯模式

(1)单双工:单向通讯,只能往固定的方向做通讯,只有一条通讯通道,不能逆向通讯,如电视、广播;

光头强:熊大,二货....

(2)半双工:可双向通讯,但同时只能往一个方向进行通讯,虽然只有一条通讯通道,但却可逆向通讯,如对讲机,必须一个人讲完,另一个人才能讲话;

光头强:熊大,你屁股着火了,over;

熊大:光头强你又骗我,我一巴掌呼死你,over。

(3)全双工通讯:可即时双向通讯,通讯双方的信息可实时传送给对方,会有两条通讯通道,每一条通道负责一个方向的通讯,例如手机通讯。

光头强:熊大,过来呀,造作呀;

熊大:死秃驴,来呀,我一屁股坐死你

光头强:来呀,来呀,打不到我吧.......

(4)特征:

人声检测、智能断句、拒识(无效的语音和无关说话内容)和回声消除(Echo Cancelling,在播放的同时可以拾音)
特别说下回声消除的需求背景:近场环境下,播放音乐或是语音播报的时候可以按键停止这些,但远场环境下,远端扬声器播放的音乐会回传给近端麦克风,此时就需要有效的回声消除算法来抑制远端信号的干扰。

5、自动纠错

(1)定义:语音交互中还有一个重要的技术是自动纠错,就是当你说错了某个词,或者是发音不准确,说话带地方口音等情况下,系统能够自动纠正过来,能听懂你说的话,并给出正确的回应。

(2)用户主动纠错:
比如用户语音说“我们今天,不对,明天晚上吃啥?”,经过云端的自然语言理解过程,可以直接显示用户真正希望的结果“我们明天晚上吃啥”。

(3)根据场景/功能领域不同,AI来主动纠错。这里,根据纠错目标数据的来源,可以进一步划分为3种:

1)本地为主。
比如,打电话功能。我们一位联合创始人名字叫郭家,如果说“打电话给guo jia时”,一般语音识别默认出现的肯定是“国家”,但(手机)本地会有通讯录,所以可以根据拼音,优先在通讯录中寻找更匹配(相似度较高)的名字——郭家。就显示为“打电话给郭家”。

比较个性的个人信息,只存储于本地中的数据应用场景,例如手机通讯录、常用系统/网站等~,比如“打开weixin”,很大程度可能会被理解成“卫星”,但当手机中有“微信”这个APP时,优先拿本地的APP列表进行纠正,这时候就就会很高概率理解成“微信”了。

2)本地+云端。

个人理解,这是一种对本地纠错的补充,如果但本地数据匹配不到合适的对象时,自动转向云端数据库去匹配更合适的对象,或者是按照本地数据和云端数据匹配到对应对象后进行排序呈现,使用本地数据匹配的结果优先呈现,如你说要要听某首歌,优先找到你本地收藏的歌曲,再去匹配云端数据相似的歌曲名,最后做一个排序呈现。
比如,音乐功能。用户说,“我想听XX(歌曲名称)”时,可以优先在本地的音乐库中去找相似度较高的歌曲名称,然后到云端曲库去找,最后再合在一起(排序)。
我们之前实际测试中发现过的“纠错例子”包括:
夜半小夜曲—>月半小夜曲
让我轻轻地告诉你—>让我轻轻的告诉你
他说—>她说
望凝眉—>枉凝眉
一听要幸福—>一定要幸福
苦啥—>哭砂
鸽子是个传说—>哥只是个传说

3)云端为主
对于数据量较大,或者实时性较高的业务场景,不适合存储在本地,会存储在云端,纠错时调用云端数据进行纠正,如地图、天气预报等业务,比如说“查询xinjiang2019年1月12日的天气”,知道是天气业务,所以到云端去匹配“xinjiang”的地方,匹配到最后的结果就会是“新疆”,于是去调新疆2019年1月12日的天气情况,通过语音合成技术(TTS)合成语音,并说给你听。

比如地图功能,由于POI(Point of Interest,兴趣点,指地理位置数据)数据量太大,直接到云端搜索可能更方便(除非是“家”、“公司”等个性化场景)。比如,用户说“从武汉火车站到东福”,可以被纠正为“从武汉火车站到东湖”。


精彩下文继续

参考文章链接如下:

jianshu.com/p/8041e1f4f

jianshu.com/p/a3e2915a3

jianshu.com/p/1cfa15eaa

jianshu.com/p/2c99885b9

jianshu.com/p/60ef7117a

zhihu.com/search?

jianshu.com/p/350a4f447

jianshu.com/p/c088c89a7

jianshu.com/p/45a764b53

jianshu.com/p/7c94467f5

woshipm.com/pd/894645.h

jianshu.com/p/dc8954aeb

jianshu.com/p/3edca44c3

blog.csdn.net/zhinengxu

blog.csdn.net/baidu_314

zhuanlan.zhihu.com/p/43

编辑于 2020-02-06 20:12