Michael collins nlp课程笔记(二)Tagging Problems, and Hidden Markov Models

目录

 

一、标注问题

二、标注问题的生成模型

2.1 问题的定义及转换

2.2 隐马尔科夫模型

2.3 三元隐马尔科夫模型的参数估计 

2.4 模型的解码——维特比算法

讲义链接:http://www.cs.columbia.edu/~mcollins/hmms-spring2013.pdf

一、标注问题

标注问题的任务是对于一个序列,给出其标记序列,也称为序列标记问题。nlp中常见的两种标记问题是词性标记和命名实体识别。下面给出两个例子:

Michael collins nlp课程笔记(二)Tagging Problems, and Hidden Markov Models_第1张图片

 

Michael collins nlp课程笔记(二)Tagging Problems, and Hidden Markov Models_第2张图片

在命名实体识别中, 咋一看不像是标注问题,如果将不是实体部分的单词标记为NA,则整个句子的所有单词都有了对应的标记,也就可以看成是标注问题了。一个更加直观的例子:

Michael collins nlp课程笔记(二)Tagging Problems, and Hidden Markov Models_第3张图片

二、标注问题的生成模型

2.1 问题的定义及转换

定义x是一个单词序列,y是标注序列,标注问题的任务就是学习一个函数f : X \rightarrow Y,将句子映射到标注序列。可将函数视为一个条件概率模型:f(x) = \arg \max \limits_{y \in Y} p(y|x)。根据贝叶斯公式p(y|x) = \frac {p(x,y)}{p(x)} = \frac {p(x|y)*p(y)}{p(x)},有:

Michael collins nlp课程笔记(二)Tagging Problems, and Hidden Markov Models_第4张图片

所以,实际上,任务变成了对p(y)p(x|y)建模。

2.2 隐马尔科夫模型

容易发现p(y)其实和语言模型中的句子概率相似,只是这里单词变成了tag,其建模也同样可以采用马尔科夫模型。但由于序列y不是观测序列,是隐变量,所以称为隐马尔科夫模型。

隐马尔科夫模型的的关键思想是:

Michael collins nlp课程笔记(二)Tagging Problems, and Hidden Markov Models_第5张图片

这里做了两个重要的假设。假设一是假设第i个tag只与前两个tag有关,即 :

假设二是假设第i个单词的出现概率仅与第i个tag有关,与其他tag无关,也与它前面的单词无关,即:

 

Michael collins nlp课程笔记(二)Tagging Problems, and Hidden Markov Models_第6张图片

在三元隐马尔科夫模型中,我们可以认为一个句子是通过一下过程生成的:

 

Michael collins nlp课程笔记(二)Tagging Problems, and Hidden Markov Models_第7张图片

其中,定义 

2.3 三元隐马尔科夫模型的参数估计 

模型中的参数有:q(s|u,v)e(x|s)。通过极大似然估计法对参数进行估计,有:

Michael collins nlp课程笔记(二)Tagging Problems, and Hidden Markov Models_第8张图片

其中,c(u,v,s)c(u,v)分别表示三元标签和二元标签在训练语料中的出现次数,c(s \rightarrow x)c(s)分别表示标签s和单词x对应出现以及标签s出现的次数。

2.4 模型的解码——维特比算法

当我们估计出模型的参数后,下一步要做的就是计算出y = \arg \max \limits_{y \in Y} p(y|x)。最直接、最暴力的做法当然就是算出所有可能的y的条件概率,找到概率最大的那个。显然,这样子算的时间复杂度是指数级别的。因此,我们需要更加高效的计算方法——维特比算法。维特比算法本质上是用动态规划算法来求解最大概率路径。

首先,定义函数:,则有。为了方便,我们先定义K_k,k \in \{-1...n\},表示序列中第k个位置可能的标签的集合。具体来说,有K_{-1} = K_0 = \{*\},K_k = K(k \in \{1...n\}),其中K表示标签的集合。

那么,对于任意的k \in \{1...n\},u \in K_{k-1},v \in K_k,定义S(k,u,v)是所有序列y_{-1},y_0,y_1,...,y_k的集合,其中y_{k-1} = u,y_k = v,y_i \in K_i ,\; for\;i \in \{-1...k\}。也就是说S(k,u,v)是满足长度为k,并且以bigram(u,v)结尾的所有序列的集合。定义,则\pi(k,u,v)表示长度为k,并且以bigram(u,v)结尾的所有标注序列中的最大概率。容易得到如下基本情况和递推关系式:

1.\pi(0,*,*) = 1;

2.

基于此,可得:,也就可以求出最大概率了。算法具体流程如下:

Michael collins nlp课程笔记(二)Tagging Problems, and Hidden Markov Models_第9张图片

算法的时间复杂度为O(n|K|^3),最内层循环寻找w需要|K|,第二层循环需要|K|^2,外层循环需要n

至此,我们只是求得了最大的概率,并没有求出使得概率取最大值的标注序列y。其实,在动态规划的执行过程中,我们已经确定了最佳序列,只需要保存一下最内层循环中选取的w,以及最终选取的u,v。完整的维特比算法如下:

Michael collins nlp课程笔记(二)Tagging Problems, and Hidden Markov Models_第10张图片

 

你可能感兴趣的:(自然语言处理)