从一组文档中对标记句子进行分类的最佳方法

时间:2013-09-19 20:39:13

标签: machine-learning nlp classification nltk

我有分类问题,我需要找出解决问题的最佳方法。我有一套培训文件,其中一些文件中的句子和/或段落标有一些标签。并非所有句子/段落都被标记。句子或段落可能有多个标签/标签。我想做的是制作一些模型,在给出新文档的情况下,它会给出文档中每个句子/段落的建议标签。理想情况下,它只会给我高概率的建议。

如果我使用nltk NaiveBayesClassifier之类的东西,它会给出不好的结果,我认为因为它没有考虑训练文档中的“未标记”句子,这些句子将包含许多与标记句子相似的单词和短语。这些文件具有法律/财务性质,并且充满法律/财务术语,其中大多数应在分类模型中打折扣。

除了来自训练集的标记数据之外,还有一些比Naive Bayes更好的分类算法,还是有一些方法可以将未标记的数据推入朴素的贝叶斯?

2 个答案:

答案 0 :(得分:3)

以下是我稍微修改现有方法的方法:针对每个句子为每个可能的标签训练单个分类器。包括所有不表示该标记的句子作为标记的否定示例(这将隐式计算未标记的示例)。对于一个新的测试句子,运行所有n个分类器,并保留得分高于某个阈值的类作为新句子的标签。

我可能会使用Naive Bayes以外的东西。如果你想要概率性的话,Logistic回归(MaxEnt)是显而易见的选择:如果你不关心概率,SVM会非常强大(我现在认为你不会这样做)。

这实际上是一个序列标记任务,理想情况下你也可以从附近的句子中进行预测...但据我所知,CRF / StructSVM或其他序列标记方法没有原则扩展可以让实例具有多个标签。

答案 1 :(得分:1)

  

是否有某种方法可以将未标记的数据推送到朴素的贝叶斯

“标记”和“未标记”数据之间没有区别,Naive Bayes构建简单的条件概率,特别是P(label|attributes)P(no label|attributes)因此它主要基于使用的处理管道,但我非常怀疑它实际上忽略了未标记的部分。如果出于某种原因这样做,并且您不想修改代码,您还可以为所有剩余的文本段引入一些人工标签“无标签”。

  

Naive Bayes是否有更好的分类算法

是的,NB实际上是最基本的模型,并且有几十种更好(更强大,更一般)的模式,它们在文本标记中取得了更好的效果,包括:

  • 隐马尔可夫模型(HMM)
  • 条件随机字段(CRF)
  • 一般 - 概率图形模型(PGM)