本文由竹间智能科技(Emotibot)出品,作者为Research Engineer叶俊杰。

Emotibot以情感计算研究为核心,深度学习、认知科学等尖端技术为基础,主攻自然对话理解、多模态情感计算等技术,致力于研发新一代的人机交互、开创未来的虚拟机器人。

如需转载,请联系Emotibot情感机器人微信公众号(Emotibot_tech),并注明出处。

前言

人工智能当道,除了机器人、自动驾驶汽车等人工智能产品外,你一定还知道Siri,Alexa,Cortana,Google Now等这些语音助手。

2010年Siri的诞生使得智能语音助手开始真正走进消费领域。近年来,语音助手不仅仅作为系统或App的一部分存在于智能手机中,还随着可穿戴设备、智能家居等的兴起与火热,成为人机交互界面中不可缺少甚至最重要的一部分。当我们的生活中出现越来越多种计算设备时,语音界面就成了跨越不同大小设备的通用UI之一,这时,语音识别技术则显得尤为重要了。

本文将主要从语音识别的难点、整体技术思路和系统框架方面介绍语音识别技术,对语音识别的技术的算法细节不做具体阐述。

语音识别api推荐(Tech人机交互入口之语音识别)(1)

目前语音转文字错误率高

我们知道,智能语音助手的功能是要理解你的语音指令。为了做到这一点,语音助手需要做两步处理:

  1. 自动语音识别(ASR,Automatic Speech Recognition):用来把人类说出的语音转换为文本,然后提供给第2步,也就是

  2. 自然语言理解(NLU,Natural Language Understanding):用来理解转换后的文本语义信息,产生相应的指令。

在日常生活中使用很多智能语音助手时,我们经常会碰到许多啼笑皆非的错误,可能是语音转文字时识别错误,也可能是文字转对但指令转换错误。事实上,大多数能明显感知到的错误都是在第1步,即语音转文字的时候发生的。

语音识别api推荐(Tech人机交互入口之语音识别)(2)

▲Siri

这是为什么呢?

原因之一是语音助手的服务意图通常集中在快速提供服务,包括记录日历日程/提醒事项、拨打电话、发送信息、搜索网页和App、查看邮件、导航等等。我们可以发现,这些服务都是功能导向的(Function-oriented),这就意味着,此时自然语言理解的对象通常会比较局限在以动词为核心的动作上,而非聊天这样的开放场景。当碰到用户随意闲聊的情况时,语音助手就往往会以“我不明白你在说什么”这样的回答进行回复或直接用搜索网页的办法来解决。在这样的设计下,自然语言理解出现明显错误的几率就明显降低了。

另一个原因在于,语音识别本身存在不少难点。

语音识别的难点

语音识别的研究历史其实非常悠久,然而这一领域的飞速发展主要集中在最近几十年。为什么语音识别这么困难呢?

其实语音识别对于人类本身而言也并非那么简单。看看我们的日常生活,是不是我们自己也时不时会碰到听不懂别人在说什么的情况呢?

最显而易见的原因之一就是语言因素。《圣经·旧约·创世纪》中巴别塔的故事,就是试图解释世界上出现的不同语言和种族。此外,同一语言下还会有不同的方言,我国就素有“十里不同音,百里不同俗”的说法,在东南地区尤其如此。

假设我们再限定只说普通话呢?还会碰到个人的口音问题。播音员、主持人这样字正腔圆的发音大家都能听懂,但是也许周围朋友说的话我们就不太能听懂。再者也许说话者声音太高或太低?说话太快或太慢?有谐音字?更不能忘了我们经常还会处在嘈杂的环境中,环境噪音完全可能使得你的同伴像是在表演哑剧。

这许许多多的变量使得同一句文字会产生太多各种各样的变种。人脑为什么能够处理这样的语音变异性是神经科学所要研究的课题。那计算机要如何做到语音识别呢?

历史上出现过两类解决方案。其一是用Linguistic Knowledge的方式,构建各种语言的语音规则,从而试图覆盖所有可能的语音。这种方法起源于早期构建人工智能专家系统(Expert System)成功后的启发。然而这种方式的缺陷现在看来也非常明显:我们没有办法穷举出所有可能的语音规则。

第二种方式则是统计语音识别(Statistical Speech Recognition),意在构建可以从数据中学习的语音模型(Data-driven machine learning speech models)。机器学习的解决途径经检验后被证明是成功有效的实现高正确率语音识别的方法。以下我们只讨论统计语音识别技术。

语音识别的基本解法

在了解机器怎么做语音识别之前,我们先来看看人类自己是怎么做到语音识别的:

语音识别api推荐(Tech人机交互入口之语音识别)(3)

说话者在脑中想到的原始信息S,经过发声器官发声和传播媒介传播(传播媒介假设为是一个有噪声的环境,如空气中会有背景噪音,其他的人声等等)到倾听者处的时候,已经从原始信息S变成了含有噪声的信息N(原始信息S和噪声Z的随机组合)。倾听者所做的是,从有噪信息N中还原出原始信息S。我们可以说倾听者听到每一句话时其实都是在下意识地“猜”或者“解码”说话者传递过来的有噪语音。在信息论(Information Theory)中,这样一个自然的人类识别语音的过程可以被抽象为下图所示的噪声信道模型(Noisy Channel Model)

语音识别api推荐(Tech人机交互入口之语音识别)(4)

▲Noisy Channel

当用计算机做语音识别时,我们不过是把倾听者替换成了计算机,依旧需要通过得到的有噪信息N(此时为语音录音)去“猜”原始信息S(说话者真实所要表达的文本)。

既然说做语音识别也是要“猜”,而“猜”的原则就是找可能性最高的那个答案,那语音识别的问题就变成了:“寻找与给出的语音匹配度最高的文字”。这个问题包含了两个重点:

  1. 如何计算语音与任意一段文字的匹配度?

  2. 如何在所有可能的文本中,寻找最大的匹配度?

语音识别api推荐(Tech人机交互入口之语音识别)(5)

通常而言,语音识别系统中的语言模型比较容易,准确率较高。我们所说的“提高语音识别系统的准确率”,其实一般都是提高了声学模型的准确率

语音识别的系统架构

语音识别系统输入的是语音,输出的文字。那整个系统中间包括了哪些部分呢?

语音识别api推荐(Tech人机交互入口之语音识别)(6)

1. 数据预处理

首先我们要认识到,输入的语音数据是连续的时间序列数据(Time Series Data),建模处理时需要把连续数据分成一个个小段。用U表示整段语音数据,则每一小段可以表示为:

语音识别api推荐(Tech人机交互入口之语音识别)(7)

这个处理称为分帧,通常会把语音分为每段10ms(也可以分为其他的时长)的一帧帧。分帧后的语音数据还需要做特征提取(Feature Extraction),如频域转换,傅立叶变换等,来产生标准化的声学特征(Acoustic Features),例如常用的梅尔频率倒谱系数MFCC。

每一帧数据的声学特征都是一个D维的特征向量(Feature Vector)。这部分主要涉及到信号处理(Signal Processing),这里不做具体阐述。

2. 核心系统:词典

上面的系统架构图中,除了前面提及的声学模型和语言模型之外,还有一个衔接模块:词典(Lexicon)。它有什么功能呢?

在只有声学模型和语言模型的系统中,语音U和文字W是直接关联起来的。但当我们深入去看它们之间的映射关系时会发现,其实它们中间需要做更细的划分。

语音识别api推荐(Tech人机交互入口之语音识别)(8)

▲hierarchica

如上图所示,文本需要先切分为单词,之后再切分为语音音素(Phones),才可以映射到语音。以英文为例,一个单词发音可以切分为标准国际音标,这样音标就成为了比单词更加细致的处理单元。

那么问题来了:一个单词的音素表示是否唯一?

显然不是。还是以英文为例,同一个单词有不同发音的情况可能会有:

  1. 英式英语/美式英语,如tomato

  2. 不同的词性可能会有不同的发音

  3. 连音,吞音等日常语音现象,如“bury him”很多时候 h 的发音会不发,听起来就像是“barium”。

  4. 口音,方言

  5. ...

单词和音素组合并不是唯一对应的,这样我们就可以建立一个映射表,把每个单词的常见音素组合列出来,这个部分就是词典。

你可能会问,上面不是说语音规则很难穷举吗,这边的映射表怎么就穷举了呢?其实大规模词汇系统(英文)的实际情况是,当细致到单词层面的时候,每个单词平均有1.1个可能发音,也就是说大多数单词的发音是唯一确定的。

在系统中加入词典之后,原来的核心公式就需要做一点微调了。假设音素用Q表示,则公式可以改写为:

语音识别api推荐(Tech人机交互入口之语音识别)(9)

此时:

  1. 声学模型(Acoustic Model),P(U|Q):计算任意音素Q与语音数据U匹配的概率。

  2. 发音模型(PronunciationModel),P(Q|W):计算文本(单词)W与音素Q匹配的概率。上文提到用词典的方式实现这一部分,实际上也可以使用更复杂的模型。

  3. 语言模型(Language Model),P(W):计算文本(单词)W语义上合理的概率。

3. 核心系统:声学模型

语音数据时序性的特征,要求我们在建模的时候不能把每一帧数据独立考虑,而必须体现他们的前后关系。在处理这样的时序数据时,状态机模型(State Machines Model)是一种很好的抽象。状态机模型是对一系列状态(States)和状态关系的建模。

状态机模型可以根据状态转移是否随机分为确定性模型(Deterministic Models)和随机模型(Stochastic Models),随机模型通常又可以被称为马尔可夫模型(Markov Models)

语音识别api推荐(Tech人机交互入口之语音识别)(10)

通俗地说,假设我们把一次聊天对话当作是随机过程,我在聊天过程中说了一句“今天天气真差”(一个状态),那出现这句话是因为之前聊天中说过的所有话导致的结果。但是马尔可夫假设把这一点简化为了,这句话出现只是因为上一句说了什么。这种做法看起来十分简单粗暴,但也正是这样的假设,使得很多问题的分析建模得到了简化,并且依然能获得非常不错的最终结果。

语音识别api推荐(Tech人机交互入口之语音识别)(11)

▲MarkovModels

如上图所示,马尔可夫模型又可以分为四种主要的类型。哪一种更加适合做语音识别的建模呢?

在声学模型中,我们需要考虑两类状态:

  1. 语音音素状态:未知

  2. 语音特征状态:已知

语音识别api推荐(Tech人机交互入口之语音识别)(12)

▲hm

上图以 “mining a year of speech” 为例,最上面一层是单词,中间一层是切分出来的音素,下面一层是实际输入的语音数据,声学模型处理第二层和第三层的状态映射。

图中这样做状态连接的原因在于:

  1. 语音音素状态由于单词构成和语义内涵,彼此之间会具有状态关联性。

  2. 语音特征状态是有隐含的语音音素产生的,因此它们之间具有状态关联性。而语音特征本身并没有语义上的关联性。

这样的建模出来的结果其实就是隐马尔可夫模型(HMM,Hidden Markov Model)。下图是HMM的概率图模型:

语音识别api推荐(Tech人机交互入口之语音识别)(13)

▲HmmOrig

语音识别api推荐(Tech人机交互入口之语音识别)(14)

隐马尔可夫模型是语音识别技术中的主要模型。虽然目前已经发展出了端到端的深度学习语音识别模型(如百度的Deep Voice),但HMM仍然是ASR系统中非常普遍常用的模型

4.核心系统:语言模型

语言模型用以计算一段文本是不是“合理”。比如,“今天天气不好”在语法上没有问题,语义也很清楚;而“不好气天今天”这样的句子就很难看懂它到底表达了什么含义,因此第一句话出现的概率就会比第二句话出现的概率高不少。

在语音识别中,同一句语音若只是对应音素和单词的话,还是会拼凑出很多可能的句子,其中的很多可能根本不符合语法,没有合理的语义。通过语言模型,我们可以从中筛选出那些有含义的句子。

语言模型中最常用的是n-grams模型,其中n代表我们要关联前面几个词。以最简单的Bigram模型(即n=2)为例,我们用

语音识别api推荐(Tech人机交互入口之语音识别)(15)

是不是觉得似曾相识?前面说到的马尔可夫假设其实就是指当n=2时的状况,也就是我们只考虑这个词之前一个词。

你一定会觉得,不是考虑的越多越好吗?如果n大一点的话,不就可以囊括更多的信息吗?但是实际上,n并非越大越好,n太大的话,概率的计算成本就会变得非常非常大。在权衡n的大小和计算效率时,可能选择n在3~5的范围内就足够使模型有非常好的准确率了。

n-grams模型在语言模型中已经能取得非常好的效果,并且模型也非常简单,是非常普遍常用的模型。然而在神经网络重新兴起之后,又出现了神经网络语言模型。其中以递归神经网络(RNN,Recurrent Neural Network Language Model)语言模型为代表,取得了比n-grams模型更好的效果。

语音识别api推荐(Tech人机交互入口之语音识别)(16)

▲RNNL

图中是Mikolov等人提出的RNN语言模型架构。

其中的转移概率通常是通过解码算法(Decoding Algorithms)来计算的,例如Viterbi Algorithm。而输出概率有多种计算方法,这些不同的计算方法就是不同的声学模型。(眼熟?把h换成Wv换成U,输出概率就是声学模型所要计算的东西)。

5. 搜索/解码算法

上文我们提到了HMM的概率图模型,包含了两类概率:

语音识别api推荐(Tech人机交互入口之语音识别)(17)

在HMM框架下,一般会使用Viterbi解码算法。这里对于算法细节不做详述。除了Viterbi算法之外,也有其他的搜索算法,在不同的条件下适合使用,如Beam Search,Multipass Search,Weighted Finite State Transducer(WFST)等方法。

提高语音识别准确率的最大瓶颈

本节介绍一下语音识别中比较复杂的声学模型部分。

声学模型一直是提高语音识别准确率的最大瓶颈。这一部分主要介绍高斯混合模型和神经网络模型

1. 高斯混合模型

我们看到在HMM框架中包含了声学模型要计算的输出概率,这个概率并不是由HMM模型产生的,而是需要用到其他模型。

在机器学习中要计算某个概率,最简单的假设一般是,这个概率服从高斯分布。在语音识别的背景下,假设要计算的输出概率服从多元高斯分布(Multivariate Gaussian):

语音识别api推荐(Tech人机交互入口之语音识别)(18)

事实上,在深度神经网络重新进入语音识别领域之前,语音识别领域一直都是HMM-GMM混合模型的天下,并且至今仍有不少使用。GMM可以模拟任意精度的概率分布曲线,并且训练容易(EM算法)。

但是使用GMM有一点让人觉得不满意的地方:GMM假设每个声学特征向量都是独立的,这和我们之前说的语音数据的时序性是相冲突的。

GMM中的协方差可以描述特征向量的前后关联性,但这样做的代价是使得模型的训练计算太过复杂,计算成本太大。

在没有找到更好的计算输出概率的办法之前,GMM可以获得不错的效果。但是最近十年神经网络模型获得了飞速的发展,使得其替代GMM成为主流的声学模型。

2. 深度学习模型

在神经网络模型(NN,Neural Networks)重新兴起之后,其很快就被再次应用到了语音识别领域。关于神经网络模型这里不做具体介绍。相比于上面提到的高斯混合模型GMM,神经网络的好处在于:

  1. 可以输入连续多帧的特征向量(GMM只能输入一帧)

  2. 可以加大模型深度(GMM只有一层)

  3. 可以去掉HMM做到端到端模型

神经网络模型可以以多种形式应用在语音识别的声学建模中:

  1. NN / HMM 混合系统(Hybrid NN / HMM System):即在HMM框架中,用NN替换GMM来计算输出概率密度函数。这种方法是最常用也是最便利的,不需要重新设计整个系统。

  2. Tandem特征:这种方式把神经网络模型作为一个特征抽取的工具,从输入数据产生额外的特征,再和输入数据一起提供给 HMM / GMM 模型。如下图所示:

语音识别api推荐(Tech人机交互入口之语音识别)(19)

语音识别api推荐(Tech人机交互入口之语音识别)(20)

3. 端到端模型(End-to-EndModel):即用神经网络完成从输入向量到输出结果的整个过程。由于神经网络能够很好地抽取特征,尤其是在高维空间中,使得其可以替换掉HMM框架完成整个系统流程。

近年来主流的深度学习语音识别模型,通常是用第一种混合系统的模式。我们可以将其中的 DNN 替换为其他的深度学习架构,例如RNN, CNN,LSTM等等。

语音识别api推荐(Tech人机交互入口之语音识别)(21)

▲RNN

总结

近几年,语音识别技术得到了飞速发展,在标准测试上,其整体识别的正确率已经与人类相近。

但在日常的使用过程中,我们还是发现这些语音助手总会犯很多好笑的错误。

实际上,语音识别领域还仍有很多问题亟待解决。比如当在复杂的声音环境中,如何辨别哪些声音是语音识别的使用者发出的声音;如何解决方言发音的语音识别问题;如何解决跨语言语音识别的问题等等,这些都是语音识别领域正在研究的课题。让我们共同期待“能动嘴就不用动手”的那一天!

参考资料:

1. JURAFSKY, D., AND MARTIN, J. H.Speech & language processing. Pearson Education India, 2000.

2. ABDEL-HAMID, O., MOHAMED,A.-R., JIANG, H., DENG, L., PENN, G., AND YU, D. Convolutional neural networksfor speech recognition. IEEE/ACM Transactions on Audio, Speech and LanguageProcessing (TASLP) 22, 10 (2014), 1533–1545.

3. BOURLARD, H. A., AND MORGAN, N.Connectionist speech recognition: a hybrid approach, vol. 247. Springer Science& Business Media, 2012.

4. GALES, M., AND YOUNG, S. Theapplication of hidden markov models in speech recognition. Foundations andtrends in signal processing 1, 3 (2008), 195–304.

5. GAROFOLO, JOHN, E. A. Timitacoustic-phonetic continuous speech corpus.https://catalog.ldc.upenn.edu/LDC93S1. Accessed April 06, 2015.

6. GRAVES, A., JAITLY, N., ANDMOHAMED, A.-R. Hybrid speech recognition with deep bidirectional lstm. InAutomatic Speech Recognition and Understand- ing (ASRU), 2013 IEEE Workshop on(2013), IEEE, pp. 273–278.

7. RAVES, A., MOHAMED, A.-R., ANDHINTON, G. Speech recognition with deep recurrent neural networks. InAcoustics, Speech and Signal Processing (ICASSP), 2013 IEEE InternationalConference on (2013), IEEE, pp. 6645–6649.

8. HANNUN, A., CASE, C., CASPER,J., CATANZARO, B., DIAMOS, G., ELSEN, E., PRENGER, R., SATHEESH, S., SENGUPTA,S., COATES, A., ET AL. Deepspeech: Scaling up end-to-end speech recognition.arXiv preprint arXiv:1412.5567 (2014).

9. HINTON, G., DENG, L., YU, D.,DAHL, G. E., MOHAMED, A.-R., JAITLY, N., SENIOR, A., VANHOUCKE, V., NGUYEN, P.,SAINATH, T. N., ET AL. Deep neural networks for acoustic modeling in speechrecognition: The shared views of four research groups. Signal ProcessingMagazine, IEEE 29, 6 (2012), 82–97.

10. ROBINSON, T., HOCHBERG, M., AND RENALS, S. The use of recurrentneural networks in continuous speech recognition. In Automatic speech andspeaker recognition. Springer, 1996, pp. 233–258.


Emotibot产品体验:

在各大应用市场均可下载小影机器人APP

或微信搜索:小影机器人公众号

即可体验小影机器人

Bot Factory情感机器人工厂:

http://botfactory.emotibot.com/api/ApiKey/platform.html

(定制你的专属机器人)

,