推特分类器功能选择NLTK

时间:2012-01-08 15:54:26

标签: python twitter machine-learning nltk classification

我目前正在尝试使用NLTK中的Naive Bayes分类器对Tweets进行分类。我正在使用'$'前缀(例如:$ AAPL)对与特定股票代码相关的推文进行分类。我一直在基于这篇博文的Python脚本:Twitter Sentiment Analysis using Python and NLTK。到目前为止,我已经取得了相当不错的成绩。但是,我觉得还有很大的改进空间。

在我的单词特征选择方法中,我决定实现tf-idf算法来选择信息量最大的单词。在完成这个之后,我觉得结果并不那么令人印象深刻。

然后,我在以下博客上实施了该技术:Text Classification Sentiment Analysis Eliminate Low Information Features。结果与使用tf-idf算法获得的结果非常相似,这使我更彻底地检查了我的分类器的“最具信息性特征”列表。就在那时我意识到我遇到了一个更大的问题:

推文和真实语言不使用相同的语法和措辞。在普通文本中,可以使用tf-idf或停用词来挑选出许多文章和动词。然而,在推文语料库中,一些非常无信息的词语,例如“the”,“and”,“is”等等,与正确分类文本至关重要的词语一样多。我不能只删除少于3个字母的所有单词,因为一些无法提供的功能比那些更大,而一些信息量更小的单词。

如果可以的话,我不想使用停用词,因为需要经常更新列表。但是,如果这是我唯一的选择,我想我必须坚持下去。

所以,总结一下我的问题,是否有人知道如何真正获取特定来源中最具信息性的词语?

编辑:我正在尝试将其归为三类:积极,消极和中立。另外,我想知道,对于TF-IDF,我应该只删除分数较低的单词,还是分数较高的单词?在每种情况下,您将从特征选择过程中排除文本源词汇的百分比?

1 个答案:

答案 0 :(得分:3)

您链接的博客文章介绍了 show_most_informative_features 方法,但NaiveBayesClassifier还有一个 most_informative_features 方法返回功能而不仅仅是打印它们。你可以简单地根据你的训练集设置一个截止点 - 像“the”,“和”这样的功能,其他不重要的功能将在信息量方面位于列表的底部。

确实,这种方法可能会过度拟合(某些功能在训练集中比在测试集中更重要),但对于根据训练集过滤功能的任何内容都是如此。