推特分类器 特征选择 NLTK

5 投票
1 回答
5725 浏览
提问于 2025-04-17 09:48

我现在正在用NLTK里的朴素贝叶斯分类器来分类推文,主要是针对一些特定的股票符号,像是以'$'开头的(例如:$AAPL)。我参考了一篇博客来写我的Python脚本:使用Python和NLTK进行推特情感分析。到目前为止,我的结果还算不错,但我觉得还有很大的改进空间。

在选择单词特征的方法上,我决定使用tf-idf算法来挑选最有信息量的单词。不过,做完之后,我觉得结果并没有那么令人满意。

接着,我又在另一篇博客上实现了这个技术:文本分类情感分析:消除低信息特征。结果和之前用tf-idf算法得到的结果非常相似,这让我更仔细地检查了分类器的“最有信息量特征”列表。这时我意识到我遇到了一个更大的问题:

推文和正常语言的语法和用词并不相同。在正常文本中,很多冠词和动词可以通过tf-idf或停用词来筛选出来。然而,在推文中,一些极其没有信息量的词,比如“the”、“and”、“is”等,出现的频率和那些对正确分类至关重要的词是一样的。我不能仅仅去掉所有少于三个字母的词,因为一些没有信息量的词可能更长,而一些有信息量的词可能更短。

如果可以的话,我希望不需要使用停用词,因为这需要频繁更新列表。不过,如果这是我唯一的选择,那我想我也只能这样做了。

所以,总结一下我的问题,有人知道怎么才能真正找到推文中最有信息量的词吗?

编辑:我想把推文分成三类:积极、消极和中立。另外,我在想,对于TF-IDF,我是应该只去掉低分的词,还是也要去掉一些高分的词?在每种情况下,你会从特征选择过程中排除文本源词汇的多少百分比?

1 个回答

2

你提到的博客文章讲的是show_most_informative_features这个方法,但NaiveBayesClassifier还有一个most_informative_features的方法,它是用来返回特征的,而不是仅仅打印出来。你可以根据你的训练集来设置一个阈值——像“the”、“and”这些不重要的特征在信息量上会排在列表的底部。

确实,这种方法可能会出现过拟合的问题(某些特征在你的训练集里可能比在测试集中更重要),但任何基于训练集来过滤特征的方法都会有这个问题。

撰写回答