目录
公元2035年,机器人在人类社会中充当着十分重要的角色,它们可以送快递,为人类提供家政服务,甚至帮主人可以遛狗……这是电影《机械公敌》中的场景,这要是放在十几年前,可能还是有点异想天开,但是现在,原先的很多设想都已经初步实现了,例如可以跟人对话的聊天机器人,某些酒店和餐厅里的服务机器人等等。MC君在这篇文章中会谈谈聊天机器人的一个非常重要的技术——语音识别,希望能用最浅显的语言解析语音识别的基本原理。
一、语音识别
语音识别,其实可以理解为说话的逆过程,我们平常说话是怎么说的?脑子里先想好一段内容,然后通过声音表达出来,而语音识别就刚好相反,计算机通过分析一段声音,来推测这段声音的内容是什么。最基本的语音识别是孤立词识别,也就是每次只能识别一个词,我们接下来通过一个简单的例子来说一下孤立词识别的原理。
假如我现在要做一台校园导航机器人,其中一个功能是要识别用户说出的地名,如教学楼、饭堂、音乐厅、体育馆等,这些地名就是一个个孤立词,我们需要设计一个算法来让计算机来识别这些孤立词的语音,怎么做呢?我们知道声音其实是一种波,在信息学里面声音就是信号,是可以用具体的数字表达的,如果按照时间顺序将语音分割成一小段一小段,那么一段语音就可以表示成一个信号串 。那么,孤立词的语音识别问题可以理解为:给定一个信号串,找出最可能与之匹配的孤立词 ,写成概率的形式即:
那其实就是求每个孤立词 的条件概率,这个概率似乎比较难计算,我们不妨利用贝叶斯公式进行一下转换:
上式中,和很明显都是已知的,所以问题的关键就是求,即给定一段信号,求出与孤立词 匹配的概率。那这个概率应该怎么求呢?这时候就要用到著名的隐马尔可夫模型(Hidden Markov Model),简称HMM。
二、隐马尔可夫模型
隐马尔可夫模型是关于序列的概率模型,前面所说的信号串在这个模型中有个名字,叫做观测序列,顾名思义,也就是可以直接观测到的序列。既然有可观测的序列,自然就有不可观测的序列,HMM定义:观测序列中,任意时刻的观测 对应着一个隐状态,这些隐状态合在一起就形成了状态序列,所以这个模型叫做“ 隐”马尔可夫模型。举个具体的例子,我们说出一个词如“教学楼”,就形成了一段语音,这段语音每一时刻的信号就是,而其对应的隐状态是观测不到的,它可以是“教学楼”这个词的音标:ji,ao,x,ue,l,ou,当然也可以是其他东西,其实我们也不需要知道这些隐状态具体是什么,只需要知道一点:任意时刻的观测 跟隐状态 是一一对应的。
所以现在回到刚才那个问题,求。如果孤立词 对应的模型参数是,那么就可以写成,因为现在多了一个状态序列,所以我们得想办法将塞进里面,怎么办呢?这就需要用到边缘分布的概念,可以表达为以下式子:
上面这条长串的式子看起来就很复杂,所以为了把问题简单化,马尔可夫同志提出了两个假设:
(1)任意时刻的观测只与该时刻的状态有关,与其他时刻的状态和观测无关(独立),即:
(2)任意时刻的状态只与前一个时刻的状态有关,与其他时刻的状态和观测无关(独立),即:
有了以上两个假设,我们就可以把那条长串的式子写成下面这个样子(具体的推导比较简单,就不再赘述了):
→1式
细心的朋友可能会发现,等式左边的模型参数 消失了,那是因为在等式右边的、、就是模型参数,所以可以直接把去掉。所以,现在问题就变成了求、、这三个参数,需要说明的是:和都是随机变量,而并非具体的数值!所以要求这三个参数,必须知道、所有可能取到的值,假设、都是离散型随机变量,那么我们可以设是隐状态一切可能取值的集合(共有个取值);是观测一切可能取值的集合(共有个取值),即:
我们先看,因为和的可能取值都有个,那么可以写成一个的矩阵