目录
讲义链接:http://www.cs.columbia.edu/~mcollins/hmms-spring2013.pdf
一、标注问题
标注问题的任务是对于一个序列,给出其标记序列,也称为序列标记问题。nlp中常见的两种标记问题是词性标记和命名实体识别。下面给出两个例子:
在命名实体识别中, 咋一看不像是标注问题,如果将不是实体部分的单词标记为NA,则整个句子的所有单词都有了对应的标记,也就可以看成是标注问题了。一个更加直观的例子:
二、标注问题的生成模型
2.1 问题的定义及转换
定义x是一个单词序列,y是标注序列,标注问题的任务就是学习一个函数,将句子映射到标注序列。可将函数视为一个条件概率模型:。根据贝叶斯公式,有:
所以,实际上,任务变成了对和建模。
2.2 隐马尔科夫模型
容易发现其实和语言模型中的句子概率相似,只是这里单词变成了tag,其建模也同样可以采用马尔科夫模型。但由于序列不是观测序列,是隐变量,所以称为隐马尔科夫模型。
隐马尔科夫模型的的关键思想是:
这里做了两个重要的假设。假设一是假设第i个tag只与前两个tag有关,即 :
假设二是假设第i个单词的出现概率仅与第i个tag有关,与其他tag无关,也与它前面的单词无关,即:
在三元隐马尔科夫模型中,我们可以认为一个句子是通过一下过程生成的:
其中,定义 和。
2.3 三元隐马尔科夫模型的参数估计
模型中的参数有:和。通过极大似然估计法对参数进行估计,有:
其中,和分别表示三元标签和二元标签在训练语料中的出现次数,和分别表示标签s和单词x对应出现以及标签s出现的次数。
2.4 模型的解码——维特比算法
当我们估计出模型的参数后,下一步要做的就是计算出。最直接、最暴力的做法当然就是算出所有可能的的条件概率,找到概率最大的那个。显然,这样子算的时间复杂度是指数级别的。因此,我们需要更加高效的计算方法——维特比算法。维特比算法本质上是用动态规划算法来求解最大概率路径。
首先,定义函数:,则有。为了方便,我们先定义,表示序列中第k个位置可能的标签的集合。具体来说,有,其中表示标签的集合。
那么,对于任意的,定义是所有序列的集合,其中。也就是说是满足长度为,并且以结尾的所有序列的集合。定义,则表示长度为,并且以结尾的所有标注序列中的最大概率。容易得到如下基本情况和递推关系式:
1.;
2.。
基于此,可得:,也就可以求出最大概率了。算法具体流程如下:
算法的时间复杂度为,最内层循环寻找需要,第二层循环需要,外层循环需要。
至此,我们只是求得了最大的概率,并没有求出使得概率取最大值的标注序列。其实,在动态规划的执行过程中,我们已经确定了最佳序列,只需要保存一下最内层循环中选取的,以及最终选取的。完整的维特比算法如下: