使用朴素贝叶斯预测分类并处理不在训练集中的特征/单词

时间:2013-07-22 18:58:35

标签: machine-learning nlp bayesian supervised-learning text-classification

使用Naive Bayes算法考虑垃圾邮件或非垃圾邮件的文本分类问题。

问题如下:

如何对文档做出预测W =如果在那组单词中你看到一个新单词wordX,你的模型根本没有看到它(所以你甚至没有估算出拉普拉斯平滑概率)?

通常要做的就是忽略wordX,尽管它在当前文本中看到了,因为它没有与之相关的概率?即我知道有时使用拉普拉斯平滑来试图解决这个问题,但如果这个词肯定是新的呢?

我想到的一些解决方案:

1)在评估分类时忽略这些词(最简单,但有时是错误的......),但是,如果训练集足够大,这可能是最好的事情,因为我觉得它是合理的假设如果您说1M或20M数据,则选择的功能和内容已经足够好了。

2)将该单词添加到模型中并完全更改模型,因为词汇表已更改,因此概率必须随处更改(这确实存在问题,因为这可能意味着您必须经常更新模型,特别是如果您的分析1M文件,比如说)

我已经对此进行了一些研究,阅读了一些Dan Jurafsky NLP和NB幻灯片,并观看了一些关于课程的视频,并查看了一些研究论文,但我找不到我认为有用的东西。我觉得这个问题根本不是新问题,应该有一些东西(启发式......?)。如果没有,那么知道它也会很棒!

希望这对社区有用,并提前致谢。

PS:使用我见过的解决方案之一让问题更明确一点,比如我们在垃圾邮件中看到一个未知的新单词wordX,那么对于那个单词我们可以做1 / count(垃圾邮件) + |词汇+ 1 |,我这样做的问题是,那么,这是否意味着我们改变了词汇量的大小,现在,我们分类的每个新文档都有一个新的特征和词汇单词?这个视频似乎试图解决这个问题,但我不确定是否,这是一件好事或2,也许我误解了它:

https://class.coursera.org/nlp/lecture/26

1 个答案:

答案 0 :(得分:2)

从实际角度来看(请记住,这不是你所要求的),我建议采用以下框架:

  1. 使用初始火车组训练模型,并开始使用它进行分类

  2. 每当出现一个新单词(相对于您当前的模型)时,请使用一些平滑方法来解释它。例如如问题所示,拉普拉斯平滑可能是一个良好的开端。

  3. 使用新数据(通常除原始列车集之外)定期重新训练您的模型,以解决问题域中的变化,例如:新条款。这可以按预设的时间间隔完成,例如每月一次;在遇到一些未知单词之后,或以在线方式,即在每个输入文档之后。

  4. 这种重新训练步骤可以手动完成,例如收集包含未知术语的所有文档,手动标记它们并重新训练;或使用半监督学习方法,例如自动将得分最高的垃圾邮件/非垃圾邮件文档添加到相应的模型中。

    这将确保您的模型保持更新并考虑新术语 - 通过不时地将它们添加到模型中,并在此之前对其进行核算(简单地忽略它们通常不是一个好主意)。