有监督学习的情感分类

时间:2015-10-18 09:31:48

标签: python machine-learning scikit-learn sentiment-analysis text-classification

我正在使用python的scikit-learn在Livejournal的博客上进行情感分类。我有大约40000个帖子,我使用其中的4/5作为训练集,剩下的作为测试集。

有6种情绪:['joy','sadness','anger','surprise','love','fear']

我遇到了几个分类器(包括天真的贝叶斯,svm,sgd ..),但问题是预测非常不准确。实际上它几乎是微不足道的,因为几乎测试集中的每个博客都被预测为“快乐”,这是火车组中最常见的情绪(45%)。

这个功能集基本上包括一些单词功能(我试过unigrams和bigrams),unigram总共有613822个功能。

Besiedes,我使用SentiWordnet分数添加了一些基于词典的功能:计算名词,adjs,ajvs,动词和总词的正负分数之和。在博客中。因此,对于每个博客,将有613822 + 5个功能。

我还应用了一些特征选择方法,例如chi2来减少特征数,但是没有任何明显的改进。

scikit-learn CountVectorizerDictVectorizer用于对要素进行矢量化,Pipeline.FeatureUnion用于连接它们。

我猜这个糟糕的结果是由于过多的单词功能集 - 可能是文本中有太多错误拼写的单词? (我已经删除了单词并完成了一些词形还原工作) 我还认为基于词典的功能并不常用,因为BOW功能太大了。

我希望在我的方法中找到任何明显的错误,或者我可以做些什么来提高准确性。

感谢您的任何建议!!

1 个答案:

答案 0 :(得分:1)

你是对的,问题出在这个过多的功能上,而且你过度适应它......

请考虑以下事项:

1-规范化每个博客,删除数字,标点符号,链接,html标签(如果有)。

2-考虑词干而不是词形还原,Stemmers比词形化器更简单,更小,通常更快,对于许多应用来说,它们的结果足够好。

http://nlp.stanford.edu/IR-book/html/htmledition/stemming-and-lemmatization-1.html

  

词干通常指的是粗略的启发式过程,它会切断单词的末尾,以期在大多数时间内正确地实现这一目标,并且通常包括删除派生词缀。词形还原通常指的是使用词汇和词汇的形态分析来正确地做事,通常只是为了消除屈折结局

3-之前我曾在类似的问题中工作,我为特征提取做了什么,是针对6种情绪的每一种情绪, 我得到了最常见的500个单词(每个班级),然后删除了他们的联合之间的共同词干。 结果列表包含大约2000个单词,然后用作功能列表。 然后我使用Naive Bayes分类器。