NLP

词性标注

词性标注

10.1标记中的信息源

  1. 观察感兴趣词的邻近上下文的其它词的词性
  2. 利用词本身提供的信息,有人做了一个词性标注起dumb,这个标注器只是将所有词最常用的词性标注给这个词,就取得了90%的准确率。

因此词之间用法及其不平均,因此用统计的方法会更甚一筹。

10.2马尔可夫模型标注器

10.2.1概率模型

马尔可夫链的两个特性

  • 有限视野(limited horizon)$P(X_{i+1}=t^j|X_1,...X_i)=P(X_{i+1}=t^j|X_i)$
  • 时间不变形$P(X_{i+1}=t^j|X_1,...X_i)=P(X_{2}=t^j|X_1)$

下表指示标注预料库和句子中特殊位置的词和词性,用上标表示词典中的词和标注集中的词性类别。

有限视野的式子可以简化为


$P(t_{i+1}|t_{1,i})=P(t_{i+1}|t_i)$

标记$t^k$跟随$t^j$的最大似然估计来自于不同的标记跟随某个特定标记的相对频率估计。


$P(t_{i+1}|t_i)=\frac{C(t^j,t^k)}{C(t^j)}$

这个问题应用到马尔可夫里,对应的状态就是词的标注,而每次离开一个状态发射出的词就是我们的观察序列。

发射概率:


$P(O_n=k|X_n=s_i,X_{n+1}=s_j)=b_{ijk}$

可以通过最大似然估计来直接估计一个词被一个特定的状态(标记)发射出来的概率:


$P(w^l|t^j)=\frac{C(w^l,t^j}{C(t^j)}$

我们最终要解决这个词性标注问题的话,我们所有求解的是下面这样的式子:


$$\arg\max_{t_{1,n}}P(t_{1,n}|w_{1,n})=\arg\max_{t_{1,n}}\frac{P(w_{1,n}|t_{1,n})P(t_{1,n})}{P(w_{1,n})}\\ =\arg\max_{t_{1,n}}P(w_{1,n}|t_{1,n})P(t_{1,n})$$

这个式子在这里还是可以继续化解下去的,只需要再做两个假设,首先是词语之间是独立的,这样式子就变成了


$P(w_{1,n}|t_{1,n})=\prod_{i=1}^n P(w_i|t_{1,n}) P(t_n|t_{1,n-1}) P(t_{n-1}|t_{1,n-2})...P(t_2|t_1)$

然后在假设一下每个词的出现只依赖于自己本身的标注,那么整个式子又变为了这样


$$P(w_{1,n}|t_{1,n})=\prod_{i=1}^n P(w_i|t_{i}) P(t_n|t_{n-1}) P(t_{n-1}|t_{1,n-2})...P(t_2|t_1)\\ =\prod[P(w_i|t_i)P(t_i|t_{i-1})]$$

10.2.2 Viterbi算法

至此,可能已经一脸懵逼了,但是实际上我们已经将问题化解为了马尔可夫问题,我们可以放心地用马尔可夫链来解这个问题了。我们有了转移概率和发射概率了分别是$P(t_{i}|t_{i-1})$$P(w_{i}|t_{i})$。然后呢,这个是一个给了观测序列,叫求状态的问题,因此用动态规划对应的Viterbi算法。在马尔可夫中有讲到。

10.2.3 算法的变形

未登录词

在实践中不同的标注器在不同语料库上的不同准确率主要是由为登录词的比例决定的,智能化的标注器就需要能够对未登录词的词性进行一定的猜测。

eischedel在1993年的论文中基于三种信息估计了词语生成概率:

  1. 一个标注可以生成一个未登录词的概率有多大
  2. 生成大写词或者小写词的概率有多大
  3. 生成连字符或者特殊后缀的可能性

$P(W^l|t^j)=\frac{1}{Z} P(unknown word|t^j) P(capitalized|t^j) P(endings or hyph|t^j)$

三元语法标注器

之前使用的基本都是二元语法,就是只看当前词的前一个词,而三元语法会保留前面两个词的信息,保留了更多的信息。

插值和可变记忆

三元标注器会存在数据稀疏的问题。为了解决这个问题,可以采用一元、二元和三元的概率的线性插值。


$P(t_i|t_{1,i-1})=\lambda_1 P_1(t_i) + \lambda_2 P_2(t_i|t_{i-1})+\lambda_3 P_3(t_i|t_{i-1},t_{i-2})$

这种线性插值方法将在第六章中提及,怎样使用HMM来估计参数$\lambda_i$ 已经在第九章中讲过。

还有可变记忆马尔可夫模型(Variable Memory Markov Model,VMMM)。用混合长度的状态代替了二元或者三元语法标注器中的固定长度状态,一个VMMM标注器可以从一个记忆了前两个标记(对应三元语法模型)的状态转移到一个记忆了前三个标记(对应四元语法模型)的状态,再转移到一个没有记忆(对应一元语法模型)的状态。

平滑
线性插值是平滑估计的一种方法。例如Charniak(1993)使用了类似加1法的一种思想。


$P(t^j|t^{j-1})=(1-\epsilon)\frac{C(t^{j-1},t^j)}{C(t^{j-1})} +\epsilon$

可逆性
一个从左到右译码(标注)的马尔可夫模型。实际上,从右到左译码是等同的。


$P(t_{1,n})=P(t_1)P(t_{1,2}|t_1)P(t_{2,3}|t_2) ... P(t_{n-1,n}|t_{n-1})=\frac{P(t_1)P(t_{1,2})P(t_{2,3})...P(t_{n-1,n})}{P(t_1)P(t_2)...P(t_{n-1})}=P(t_n)P(t_{n-1,n}|t_n)...P(t_{2,3}|t_3)P(t_{1,2}|t_2)$

10.3 隐马尔可夫标注器

在我们有很大的标注语料库的时候,马尔可夫模型标注器可以工作得很好,但是这个情况不常见,我们会希望标注一个特定领域内的文本,这个领域内的词语生成概率与可获得的训练文本是不一样的。

10.3.1 隐马尔可夫模型在词性标注中的应用

就算没有训练数据,也可以使用HMM来学习标记序列的规则。第九章中介绍的HMM包含如下的元素:

  1. 一个状态集
  2. 一个输出字母表
  3. 初始状态概率
  4. 状态转移概率
  5. 符号发射概率

有两种方法可以来处理初始化HMM的所有参数,一种是基于每个词语的统计,而另一种是基于每个等价类的统计,将词语聚集到词语等价类中,让同一类的词语允许同样的标注。我们用$b_{j.l}$来表示词语(或词类)l由标记j发射的概率。

Jelinek的方法


$b_{j.l}=\frac{b^{*}_{j.l} C(w^l)}{\sum_{w^m} b^{*}_{j.m} C(w^m)}$

$b^{*}_{j.l}=0 如果t^j不是w^l所允许的词性$

$b^{*}_{j.l}=\frac{1}{T(w^l)} 其它$

Kupiec的方法

这个和前面的Jelinke的方法差不多,只是不针对每个词了,而是针对等价类,但是如果有一个很完美的数据库的话,这个方法就散失优势了。

10.3.2 隐马尔可夫模型训练中的初始化的作用

为了防止训练过度,可以在训练集上留出一个验证集,每次迭代后都测试一下,在性能下降的时候就停止迭代。

10.4 基于转换的学习

我们需要一个已经标注好的语料库和一个词典作为输入数据。首先用最常用的标记来标注训练语料库中的每个词,这就是我们需要词典的原因。接下来学习算法构建了一个转换的排序表,它把初始的标注转化为接近正确的标注。通过再次初始化来选择每个词最常用的标记,再应用转换,这个排序表就可以用来标注新的文本。

10.4.1 转换

一个转换包括两个部分,一个是触发环境,另一个是重写规则。大概的意思就是在特定的位置上出现特殊的标注的时候,这个标注需要进行转换,触发重写规则。

10.4.2 学习算法

1
2
3
4
5
6
7
8
C0:=corpus with each word tagged with its most frequent tag
for k:=0 step 1 do
v:=the transformation ui that minimizes E(ui(Ck))
if (E(Ck))-E(v(Ck)))<e then break fi
C(k+1)=v(Ck)
T(k+1)=v
end
Output sequence:T1...Tk

最初我们使用最常见的标记标注每个词。在每次迭代中,我们选择最可能减少错误率的转换,通过标注过的语料库$C_{k}$中的被错误标注的词语的数目来衡量错误率$E(C_k)$

如何应用转换也有两种方式,一种是具有立即效果的,另一种是具有延迟效果的。如果是延迟转换的话A->B会将AAAA转换为ABBB。而立即转换的话则会变为ABAB

这个标注模型的一个应用Brill(1995b)。在HMM标注中,非监督学习唯一可以获得的信息是每个词有哪些标记是允许的,我们可以利用很多词只有一种词性标记这个事实,并把它作为选择转换的积分计分函数。而且文章中展示的问题没有训练过度的问题。这个文章中使用的无监督的学习,什么是无监督的学习(unsupervised learning)呢,就是看输入的数据是没有标签的,如果有,就是有监督的学习。

会有一个转换模版,其中有context,一个待转换tags集合,一个转换目标tag,所以可见这个模版是可穷举的。然后我们假设有一个Score,先不管这个Score是怎么来了,总之每个转换(transition)都可以得出一个Score,然后选一个Score最大的,作为这个迭代产出的转换。

为了得到这个Score的计分标准比较有趣,因为如果是有监督的学习,那么可以看错误个数,但是这个方法确实无监督的。每次都是以当前已有的转换作为标准。刚开始的时候每个词都是被标注上它所有的可能词性(文中就是tags)。公式就不列举了,公式大概的意思就是找到一个好的能够消除词性标注歧义的转换是 一个通过测量在同一个context和同一个单词中无歧义地出现的一个tag的可能性大于其他tag的tag,最后的结果也不一定是完全消歧的,一个单词仍然可能含有多个可能的tag。


$freq(Y)/freq(Z)*incontext(Z,C)$

这个公式中freq(Y)是在语料库中,tag Y无歧义地出现的次数,同理freq(Z)tag Z在语料库中无歧义出现的次数,而incontext(Z,C)就是白表示在C的条件下一个单词被无歧义地被标注为Z的个数。而R是一个能让这个式子最大化的一个Z,然后Score就是等于


$incontext(Y,C)-freq(Y)/freq(R)*incontext(R,C)$

公式的主体是incontext(Y,C)和incontext(R,C),而另外的freq(Y)/freq(R)则是用于协调相对概率的。

其中有提到一种监督学习和非监督学习结合的HMM词性标注器,就是先通过监督学习,从corpus中学习到HMM的初始参数,然后再通过Baum-Welch算法在一个未标注的corpus中调整参数。

10.4.3 与其他模型的关系

决策树有点类似基于转换的方式,但是它很容易特化,在以最小化错误率为目标的情况下它很容易在训练集上获得100%的正确率,但迁移到新的数据集上的时候就会显得性能很差。

10.6 标注准确率和标注器的应用

10.6.1 标注准确率

看论文的时候,经常看到说某某标注器提高了一个百分点或者两个百分点的准确率,通常会被窝嗤之以鼻,认为在实际应用中,这么一丁点的差别不会影响很大。但是例如一个97%准确率的标注器有63%的可能性讲一个有15个词的句子标注对,而另一个准确率达到98%的标注器则有74%的可能性将一个有15个词的句子完全标注对。因此一个百分点的提高也会对应用产生挺大的影响。

分享到