如何定义与理解NLTK中Brill词性标注器的规则及模板?
关于NLTK Brill标注器规则的疑问解答
我最近在实操NLTK的词性标注,用Brill标注器生成一系列规则。我使用的模板代码如下:
templates = [ Template(Pos(1,1)), Template(Pos(2,2)), Template(Pos(1,2)), Template(Pos(1,3)), Template(Word(1,1)), Template(Word(2,2)), Template(Word(1,2)), Template(Word(1,3)), Template(Pos(-1, -1), Pos(1,1)), Template(Word(-1, -1), Word(1,1)) ]
运行后生成的规则表输出如下:
Found 149 useful rules. B | S F r O | Score = Fixed - Broken c i o t | R Fixed = num tags changed incorrect -> correct o x k h | u Broken = num tags changed correct -> incorrect r e e e | l Other = num tags changed incorrect -> incorrect e d n r | e ------------------+------------------------------------------------------- 24 24 0 1 | VB->VBP if Pos:NN@[1] 14 14 0 2 | JJ->NN if Pos:CD@[1] 14 14 0 0 | NN->VBP if Pos:NNS@[1,2,3] 11 11 0 0 | TO->IN if Pos:NN@[1,2] 9 9 0 0 | JJ->VBP if Pos:NN@[1] 1 1 0 0 | TO->IN if Pos:VB@[1] 1 1 0 0 | VBP->NN if Word:my_group@[1]
针对生成的规则,我有几个具体疑问,这里整理出对应的解答:
疑问与解答
疑问1:规则
NN->VBP if Pos:NNS@[1,2,3]是否表示:若句子中1、2或3位置的词性标注为NNS,则将当前词的NN转为VBP?
这个理解完全正确!这条规则的意思是:如果当前词右侧第1、2或3个位置的词被标注为NNS(复数名词),就把当前词的标签从NN(单数名词)修正为VBP(非第三人称单数现在时动词)。疑问2:规则中的1、2、3是相对于当前词的相对索引,还是句子中的绝对索引?
这些数字是相对当前词的索引:- 正数代表当前词右侧的位置(比如
@[1]是当前词右边第一个词,@[2]是右边第二个); - 负数则代表当前词左侧的位置(比如
@[-1]是当前词左边第一个词); - Brill标注器的规则都是基于上下文相对位置生成的,不会用到句子的绝对索引。
- 正数代表当前词右侧的位置(比如
疑问3:模板与规则的关联是什么?比如
Template(Pos(1,2,3))是否负责生成规则NN->VBP if Pos:NNS@[1,2,3]?
没错,模板就是标注器生成规则的“搜索蓝图”:Template(Pos(1,2,3))这个模板定义了“要检查当前词右侧第1、2、3个位置的词性标签”这个上下文特征;- 标注器在训练数据中遍历这个特征对应的所有可能情况,找出能最大化修正错误标签的规则——
NN->VBP if Pos:NNS@[1,2,3]就是它挖掘到的有效规则,从得分(Fixed=14,Broken=0)也能看出这条规则修正效果很好。
内容的提问来源于stack exchange,提问作者Mangu Singh Rajpurohit
相关产品推荐
相关产品推荐

