2017-02-09 10 views
0

我是新的在nltk图书馆,我试图教我的分类器一些标签与我自己的语料库。NLTK MaxentClassifier与否定案例列车

为此,我有IOB标签像这样的文件:由

self.classifier = nltk.MaxentClassifier.train(train_set, algorithm='megam', trace=0) 

How O 
do B-MYTag 
you I-MYTag 
know O 
, O 
where B-MYTag 
to O 
park O 
? O 

(PS这仅仅是一个由样本...)

我这样做

,它的工作原理。

我的问题是如何训练我的classifier负面情况。 所以我会有类似的文件与IOB标签,我会指定该文件设置错误。 (负重)

我该怎么做?


编辑:

例为负的情况将是:

How B-MYTag 
do O 
you O 
know O 
, O 
where B-MYTag 
to O 
park O 
? O 

在那之后,我预计要记住,怎么可能不是一个MYTag ... 这样做的原因是,分类器学得更快。 如果我只能输入语句,程序会处理它,最后问我对结果是否满意。如果是,则将该文本添加到train_set,否则将添加到negative_train_set。通过这种方式,教授分类器会更容易,更快速。

+1

你能举一个负面情况的例子吗?我怀疑这样做(概念上)与序列标签。我的意思是,你期望从错误的注释中学到什么?正面(B/I)和负面(O)类已经在给定的注释中表现出来了。 – lenz

+0

您的编辑听起来像是在积极学习工作流程之后。当然,你可以手动完成:让分类器预测一些东西,手动校正标签,将其添加到训练集中,重新训练。你必须具体说明修正:如果你只说“这个句子中的标签是错误的”,分类器应该怎么知道前三个标签是坏的,但是例如。第四个(“知道”上的'O')是正确的? – lenz

+0

请注意,如果您有大量训练集开始,然后按照我的建议手动添加一些手动校正的示例,则影响可能非常小。 – lenz

回答

1

我猜你尝试了一个分类器,在结果中看到了一些错误,并且想要将错误的输出反馈为额外的训练输入。有一些学习算法可以根据哪些答案是错误或正确的(神经网络,Brill规则)进行优化,但MaxEnt分类器不是其中之一。像这样工作的分类器在内部完成所有工作:他们标记培训数据,将结果与黄金标准进行比较,相应地调整权重或规则,并一次又一次地重复。

简而言之:您不能将不正确的输出用作训练数据集。这个想法甚至不适合机器学习模型,因为训练数据是通过假设正确的,所以不正确的输入具有概率零。专注于通过使用更好的功能,更多的数据或不同的引擎来改进分类器。

+0

谢谢。经过一番思考,我发现MaxEnt确实无法使用错误的数据集,因为它无法从“错误”的数据中计算出熵。谢谢您的回答。现在我用IOB标签将所有新的“语句”存储在文件中,手动修改并将其插入训练语料库。你写了一些关于神经网络的东西。这是否适用于nltk?我对他们不了解,......你有一些很好的链接来检查他们吗? –

+0

nltk的defalt POS tagger是'PerceptronTagger()'。见[这里](https://explosion.ai/blog/part-of-speech-pos-tagger-in-python)。 – alexis