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