序列标注

1.什么是序列标注?

        这是我们在NLP任务中一直面临的一个元问题,我们希望在一个序列中为每个元素分配一个标签。对我们来说,一个序列通常是一个句子,一个词是一个元素。我们试图分配的元素通常是词性、句法块标签(是名词短语、动词短语等的一部分),命名实体标记(这是一个人吗?)凡此种种,不一而足。信息提取系统(比如从电子邮件中提取会议时间和地点)也可以被视为序列标记问题。

1.1.任务:

$f:{X} {sequence} \to {Y} sequence $

$X:X_1 \: X_2\: X_3\:…X_L$

$Y:Y_1 \: Y_2 \: Y_3 \: …Y_L$

目标:$Given\:X,predcit\: Y$

1.2 .有两种序列标注:



1. raw labeling:Raw labeling is something like POS tagging where each element gets a single tag

2. joint segmentation and labeling: Joint segmentation and labeling is where whole segments get the same label.

举个例子,在命名实体识别中,像

“Yesterday , George Bush gave a speech. ”

这里我们想给“George Bush”整个标注“PERSON”而不是单个的字。如果两个字被命名,我们需要在哪隔开。

        解决这个问题最容易的方法是把他们转换为raw labeling problems。标准的方法是通过“B-X”,“I-X”或者“O”对每个字进行“BIO”编码,其他的编码方式也是可以的。如下所示:

         Yesterday/O ,/O George/B-PER Bush/I-PER gave/O a/O speech/O ./O

        注意要避免产生不可能的序列,如”I-X” 只可能出现在”B-X” 或者 “I-X”后面。

2.标签编码表示

2.1. IO 编码

        最简单的编码是IO编码,标签要么是实体X的(I_X)要么是无实体(O)。这种编码是有缺陷的,因为它不能表示彼此相邻的两个实体,因为没有边界标记。

2.2 .BIO Encoding

        行业标注编码是“BIO”编码,它划分实体标签要么是实体的开始部分“B_X”和实体的延续“I_X”

2.3.BMEWO Encoding

        BMEWO编码进一步区分实体,增加了结束标签E_X,M和I是一样的,尤其增加了一个完整的单实体标签。BMEWO编码最早介绍在Andrew Borthwick的 NYU thesis 和1998年相关的论文最大熵命名实体识别中。

3.序列标注

        类似的,分词、词性标注、语块识别、语义角色标注等任务都可通过序列标注来解决。序列标注可以分为Sequence Classification、Segment Classification和Temporal Classification三类Supervised Sequence Labelling with Recurrent Neural Networks],这里只考虑Segment Classification,即对输入序列中的每个元素在输出序列中给出对应的标签。对于NER任务,由于需要标识边界,一般采用BIO标注方法定义的标签集。在raw labeling中,我们面临的问题是给序列中的每个字打上一个标签。也许最容易的方法是独立的预测每个标签。然后可以看做一个多分类的任务(每个标签是不同的分类)。我们可以使用各种分类器来解决这个问题。尽管它很简单,但这种方法对许多问题是非常有效

        直觉上,我们通常认为这些问题中的标签不是独立的。以词性标注为例,不可能有一个动词跟着限定词。因此,我们想使用局部序列信息来提高我们的性能。传统的方法是用隐马尔科夫。在这里我们有两个概率分布:一个是转移概率(限定词后面跟着动词的可能性);二是发射概率(“the”是限定词的可能性)。

        用隐马尔可夫的潜在问题是我们知道发射概率$ P(word|tag)$,但是我们想知道模型$P(tag|word)$ 后者更可取,因为他包含了许多重叠特征(大写、单词标识、前缀,后缀,主干等)。局部的解决是用最大熵马尔科夫模型MEMM ,即使用最大熵模型对模型$P(tag|word)$ 建模,而其他的地方跟隐马尔可夫模型保持一样。最大熵马尔科夫模型比隐马尔可夫模型的训练复杂一点,但是效果好得多。

        最大熵马尔科夫潜在的问题是当模型训练的时候,它们训练出来与先前的正确标签的有冲突。这是因为我们创建一个与时间$t+1$ 中的标签相对于的分类示例时,我们包含的特征依赖于时间$t$的标签,它们在训练的时刻总是对的,但是在测试的时刻是错误的。这导致了著名的“标签偏移”问题。CRF是解决这个问题的答案。CRF经常表现比MEMM更好。CRF implement

参考资料:

https://nlpers.blogspot.com.au/2006/11/getting-started-in-sequence-labeling.html

https://lingpipe-blog.com/2009/10/14/coding-chunkers-as-taggers-io-bio-bmewo-and-bmewo/

本文标题:序列标注

文章作者:goingcoder

发布时间:2018年01月16日 - 01:01

最后更新:2018年01月21日 - 19:01

原始链接:https://goingcoder.github.io/2018/01/16/sequence-laneling/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------