【问题标题】:NLTK MaxentClassifier train with negative cases带有负例的 NLTK MaxentClassifier 训练
【发布时间】:2017-06-27 23:59:53
【问题描述】:

我是 nltk 库的新手,我尝试用我自己的语料库教我的分类器一些标签。

为此,我有一个带有 IOB 标签的文件,如下所示:

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

我这样做是:

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

它有效。

如何用负例训练我的classifier

我会有类似的带有 IOB 标签的文件,并且我会指定这个文件设置错误。 (负权重)

我该怎么做?

否定情况的示例是:

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

在那之后,我希望记住 How 可能不是 MYTag... 这样做的原因是,分类器学习得更快。

如果我可以只输入语句,程序会处理它,最后问我对结果是否满意。如果是,则此文本将添加到 train_set,否则将添加到 negative_train_set

这样,教分类器正确的东西会更容易和更快。

【问题讨论】:

  • 你能举一个负面案例的例子吗?我怀疑这(在概念上)适用于序列标记。我的意思是,您希望从错误的注释中学到什么?正 (B/I) 和负 (O) 类已在给定的注释中表示。
  • 您的编辑听起来像是在使用主动学习工作流程。当然你可以手动做:让分类器预测一些东西,手动更正标签,将它添加到训练集,重新训练。你必须具体的更正:如果你只说“这句话中的标签是错误的”,分类器怎么知道前三个标签是坏的,但是例如。第四个(O on "know")是正确的吗?
  • 请注意,如果您一开始有一个大型训练集,然后按照我刚才的建议手动添加一些手动校正的示例,则影响可能非常小。

标签: nlp tags nltk nltk-trainer


【解决方案1】:

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

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

【讨论】:

  • 谢谢。经过一番思考,我发现 MaxEnt 确实无法使用错误的数据集,因为它无法从“错误”的数据中计算熵。谢谢您的回答。现在,我将所有新的“语句”存储在带有 IOB 标签的文件中,手动更正它们并将其插入到训练语料库中。你写了一些关于神经网络的东西。这可以与 nltk 一起使用吗?我对它们一无所知,...您有一些很好的链接可以查看它们吗?
  • nltk 的默认词性标注器是PerceptronTagger()。见here
猜你喜欢
  • 2016-08-23
  • 2012-05-30
  • 2014-04-21
  • 2014-02-05
  • 2023-03-11
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 2014-01-16
相关资源
最近更新 更多