2

使用朴素贝叶斯算法考虑垃圾邮件或非垃圾邮件的文本分类问题。

问题如下:

如果在该组词中你看到一个新词 wordX 是你的模型根本没有看到的(所以你甚至没有估计它的拉普拉斯平滑概率),你如何对文档进行预测?

通常要做的事情就是忽略那个 wordX,即使它在当前文本中被看到,因为它没有相关的概率?即我知道有时使用拉普拉斯平滑来尝试解决这个问题,但如果这个词绝对是新词怎么办?

我想到的一些解决方案:

1)在估计分类时忽略那些词(最简单,但有时是错误的......?但是,如果训练集足够大,这可能是最好的做法,因为我认为假设你的特征是合理的如果您有 1M 或 20M 数据,则选择的东西足够好)。

2)将该词添加到您的模型中并完全更改您的模型,因为词汇表发生了变化,所以概率必须随处变化(这确实有问题,因为这可能意味着您必须经常更新模型,特别是如果您的分析 1M 文档, 说)

我对此进行了一些研究,阅读了 Dan Jurafsky NLP 和 NB 的一些幻灯片,观看了 coursera 上的一些视频,并浏览了一些研究论文,但我找不到我认为有用的东西。我觉得这个问题一点也不新鲜,应该有一些东西(启发式..?)。如果没有,那也太棒了!

希望这是对社区有用的帖子,并提前致谢。

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

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

4

1 回答 1

2

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

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

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

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

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

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

于 2013-07-22T21:38:30.313 回答