【问题标题】:Predicting Classifications with Naive Bayes and dealing with Features/Words not in the training set使用朴素贝叶斯预测分类并处理不在训练集中的特征/词
【发布时间】:2013-07-21 15:27:13
【问题描述】:

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

问题如下:

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

通常的做法是忽略那个 wordX,即使它在当前文本中出现,因为它没有相关的概率? IE。我知道有时会使用拉普拉斯平滑来尝试解决这个问题,但如果这个词绝对是新词呢?

我想到的一些解决方案:

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

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

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

希望这是对社区有用的帖子,并在此先感谢。

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-06-20
      • 2015-06-25
      • 2015-12-18
      • 2014-02-21
      • 2020-09-13
      • 2020-03-07
      • 2023-03-23
      • 2017-06-21
      相关资源
      最近更新 更多