首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

人工智能如何听懂你说话

作者介绍

王赟:Carnegie Mellon University ,Language Technologies Institute,在读 PhD

参与过语音领域多种课题研究,博士论文课题为声音事件检测。作者在做声音检测方面的研究之余,对各类语言也非常感兴趣,他自学了日、韩、西、法、越五门外语,还制作了安卓APP应用“汉字古今中外读音查询”。他平时还活跃在知乎上,为语言、数学、机器学习等相关话题提供了许多高质量回答,并写作专栏文章,是位坐拥5万粉丝的大网红O(∩_∩)O。

人工智能如何听懂你说话

作者|王赟

原载|Ph Dig

我们都知道,人与智能机械的交互可以通过多种方式,比如文字、动作、声音等等。其中,“声音”这种方式对于人来说是最省力的;在开车等手、眼被占用的场景下,“声音”也是一种不可替代的交互方式。机器要能通过“声音”的方式与人交互,就需要识别出人说的话的内容。语音识别便是将声音转换为文字的过程。

语音识别技术从上世纪80年代开始发展,到现在已经在许多场合得以实现。讯飞语音输入法、iPhone Siri,Amazon Echo……这些都是成功的语音识别产品。你一定非常好奇,这些产品的内部,有着怎样的工作原理呢?这篇文章就来满足你的好奇心,带你走进语音识别背后的技术。

01

声音采集与特征提取

在了解机器如何“听”之前,我们先看看人是怎么听声音的:外界的声波首先通过耳朵收集起来,然后转换成生物电流,引起神经冲动,经听觉神经传输到大脑进行处理。机器也是一样,要做语音识别,首先要采集声音,并从中提取便于识别的特征。

语音识别首先要通过麦克风采集声音。我们都知道,声音的本质是空气的振动,麦克风可以感受空气振动引起的气压变化,并将其转化为电信号。经过采样、量化的步骤,声音就可以表示成一个数字序列。语音常用的采样频率介于8 kHz 与 44.1 kHz 之间,也就是说每秒有8千至4万多个数字。这个数字序列称为“波形”(waveform),一段典型的语音波形如下图所示。

语音“yes”的波形图

从波形上我们能够窥见语音的一些特点,比如振幅对应音量大小,但对于语音识别来说,还是太不直观。这时,信号处理的核心武器——傅里叶变换就派上用场啦。简单来说,傅里叶变换可以将一段信号映射到不同频率上,解析出各种频率成分的强弱。在实际操作中,我们把语音波形切成小段(称为“帧”),并对每一段做傅里叶变换,得到如下的图,称为“语谱图” (spectrogram)。你知道吗?我们耳朵里的耳蜗,执行的也是类似的功能,它就是一个天然的傅里叶变换器!

语音“yes”的语谱图

语谱图的横轴是时间,纵轴是频率,颜色表示能量的强弱。它的每一列就是一帧语音的特征向量。语谱图中包含了语音的各种信息。比如,在0.3到0.6秒处,高频段有很强的能量,这代表“s”、“f”等擦音;在0.1到0.2秒处,有许多平行的横细线。这代表元音。横细线的间距代表了音高,而有些频率(如1000 Hz以内、2000 Hz左右)处的横细线特别强,组成了粗条,这些粗条的位置就代表了元音的具体音值。经过训练的人,仅仅通过看语谱图,就能看懂语音的内容呢!

语音识别实际用到的特征,是语谱图经过进一步处理的结果。一种常见处理是压缩频率轴的分辨率,把语谱图的高度(即特征维数)从几百降低到40左右。这种压缩在高频段比低频段更厉害,这也是模仿人耳“对低频更敏感”的特点。经过压缩之后,语谱图上的横细线就不明显了,也就是丢失了音高信息。对于很多语言来说,音高对语音识别的用处不大;对于汉语等有声调的语言,我们会添加其它的、更直观地表示音高的特征。

经过压缩的语谱图,即滤波器组特征

经过压缩的语谱图称为“滤波器组” (filterbank)特征,它们是现今语音识别系统最常用的输入。在十几年前,由于计算能力的限制,人们还会在这种特征的基础上再做一次离散余弦变换,把特征维数从40进一步降低至13(得到的特征称为MFCC特征),但现在这一步操作已经不必要了。如果你有Google那么多的数据量,甚至也可以不做特征提取,把波形直接送进神经网络,让神经网络自己探索波形中的有用信息。

02

声学模型

要从特征中识别出文字,就要知道每个单词的发音是怎样的。这首先需要一个“词典”,把单词转化成一串音素(phoneme),比如“yes”这个单词就是由“/j/”, “/ɛ/”, “/s/”三个音素组成的。而每个音素对应的特征是什么样的,则由声学模型来描述。

传统上,声学模型是使用GMM + HMM来建模的。GMM的全称叫“高斯混合模型”(Gaussian mixture models),它描述的是各个音素的特征在特征空间中的分布;上文说过的“高频段能量强则是擦音”就是GMM包含的典型信息。HMM的全称叫“隐马尔可夫模型”(Hidden Markov models),它描述的是各个音素之间,以及一个音素内部的各个段落之间的转移概率。这些转移概率可以粗略地提示各个音素的典型长度:发音比较长的音素,停留在原地的概率就比较大;发音比较短的音素,则转移走的概率比较大。

GMM示意图

HMM示意图

声学模型要考虑很多复杂的情况。比如,同样的音素,由不同性别、年龄的人发出来,声音会有很大差别。上下文也会影响到音素的发音,例如“nine”中间的“/aɪ/”音素会受到两边鼻音的影响,而“five”中间的“/aɪ/”则不会。为了应对这些变化,声学模型常常要进行说话人适应训练,也会使用上下文有关音素。

最近十年,神经网络的兴起颠覆了声学模型的实现方式。使用神经网络,可以更灵活地描述各音素特征的分布和持续时间,也更容易综合考虑不同的说话人与上下文。

03

语言模型

语音识别仅有声学模型是不够的。自然语言中往往有许多同音词和发音相近的词,仅仅依靠语音本身很难区分它们。但是,如果你熟悉一门语言的词汇搭配和语法,你就很容易地挑出正确的识别结果,比如,“我是中国人”就比“我市种果仁”的可能性大得多,因为前一句更“像话”。

在语音识别系统中,会有一个叫做“语言模型”的模块,负责判断一句话是不是“像话”。“像话”可以用语法规则来描述,但这样做有一定的缺陷。因为从人们口中说出来的话往往并不严格符合语法规则,如果拘泥于语法规则,识别结果的错误率就会很高。

实际的系统中,语言模型是通过在大规模语料库中统计词语及其搭配的出现频率来判断一句话有多么“像话”的。最简单的语言模型是bigram模型,它考虑的是相邻两个词搭配出现的概率,比如“我”的下一个词是“是”的概率、“是”的下一个词是“中国”的概率、“中国”的下一个词是“人”的概率。很明显这些概率会大于“我”后面接“市”、“市”后面接“种”、“种”后面接“果仁”的概率,所以“我是中国人”是更有可能的识别结果。稍微高级一点儿的trigram语言模型则可以考虑到连续三个词搭配出现的概率。

Bigram、trigram这些语言模型(统称为n-gram)的一个局限性是它们只能看到连续的几个词,而无法考虑跨度较大的搭配关系,比如“因为、所以”等关联词。现今的语音识别系统中,语言模型常常用神经网络来实现,因为神经网络可以“记住”比较久远的信息。

04

解码算法

正如霍金在《时间简史》中给出了唯一的公式 E = mc²一样,我在这里也给出本文唯一的公式,称为“语音识别基本方程”:

在这个公式中,X代表输入语音,W代表识别结果(句子)。式子的意思是,最优的识别结果(W*),要让两个概率的乘积最大:一个是P(X|W),即这句话与输入的语音有多么匹配,这是由声学模型计算的;另一个是P(W),即这句话本身有多么“像话”,这是由语言模型计算的。

语音识别系统的任务,就是在所有可能的识别结果中,挑出最优的识别结果,这称为“解码”(decoding)。显然,“所有可能的识别结果”是不可能一一枚举的。好在各种可能的识别结果之间会有很多重叠,比如“我是中国人”和“我是美国人”的开头、结尾都是一样的。动态规划(dynamic programming)算法可以利用这些重叠,高效地找出最优的识别结果。在HMM上的动态规划解码算法还有个专门的名字,叫Viterbi算法。

动态规划算法利用重叠,把“枚举所有可能的识别结果”的复杂度降到了可以接受的程度。但在本质上,它依然考虑了所有可能的识别结果。事实上,有很多识别结果要么与输入语音不匹配,要么本身不像话,是可以在解码的过程中就发现并舍弃的。在解码过程中随时舍弃不够好的识别结果(“剪枝”)的算法称为beam search,它比完整的动态规划效率更高;通过调整剪枝的力度,可以在解码效率和识别准确率之间求得平衡。

通过解码,我们可以得到最优的一个识别结果;我们也可以得到最优的若干个识别结果(称为n-best list),并做进一步处理。比如,为了解码方便,我们可以在解码过程中使用一个比较简陋的语言模型(如bigram);得到n-best list之后,再用一个更高级的语言模型(如神经网络)重新计算各个句子的概率,从中再取最优。这个技巧称为二次打分(rescoring)。n-best list里的句子之间往往有很多重叠,所以也常常把它们组织成一个网状结构,称为lattice。

lattice示例

05

语音识别的前沿与周边

俗话说“天下大势,分久必合”,语音识别的前沿,就发生着这样“合”的过程。在传统的系统中,声学模型、语言模型以及词典等模块都是独立训练的,于是常常发生“劲儿使不到一块儿”的状况。近几年的语音识别系统,大多用一个神经网络囊括了声学模型、语言模型、词典乃至特征提取等所有模块,称为“端到端”(end-to-end)模型,这种模型的识别准确率与传统模型相比有明显提升。

如今的语音识别系统,在安静、标准口音的条件下,已经可以实用了;但一旦遇到噪音、回音、非标准口音等恶劣条件,就马上现出原形。如何应对这些恶劣条件,是语音识别的一个老大难问题。传统上人们会使用信号处理的手段来进行除噪等语音增强的操作,但收效有限。现在人们也开始利用功能强大的神经网络来应对恶劣条件。例如去年11月百度的一篇论文就利用最近很火的生成对抗式网络(GAN),让干净语音与带噪语音提取出尽可能相似的特征,以对抗噪声。

(论文链接:https://arxiv.org/pdf/1711.01567.pdf)

许多人工智能产品,只做到语音识别还是不够的,还需要做一些相关的周边任务。比如, Siri、Echo等语音助手,在听到用户的指令后,需要按指令去查询信息或执行操作,这就需要自然语言理解;查询信息或执行操作后,它们需要用语音的形式向用户汇报结果,这就需要语音合成。有的产品可能同时供多个用户使用,它需要识别出当前是哪个用户在跟它说话,这就需要说话人识别。有的产品(如自动驾驶汽车)除了要识别用户的指令,还需要对周围的各种非语音声音做出反应,这就需要声音事件检测。这些任务与语音识别一样,都是十分有趣的研究课题。

(本文旨在分享,版权归原作者所有。)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180727F11QAW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券