我正在用Python的scikit-learn对Livejournal的博客进行情感分类。我有大约40000个职位,我使用其中的4/5作为训练集,剩余部分作为测试集。有监督学习的情感分类
有6种情绪:['joy','sadness','anger','surprise','love','fear']
我experiented几个分类(包括朴素贝叶斯,SVM,SGD ..)但问题是,预测是非常非常不准确的。其实这几乎是微不足道的,因为几乎测试集中的每个博客都被预测为“喜悦”,这是火车集中最常见的情绪(45%)。
该功能集基本上包括一袋文字功能(我试过unigrams和bigrams),对于unigram,总共有613822个功能。
Besiedes,我添加了一些使用SentiWordnet分数的基于词典的特征:计算名词,形容词,形容词,动词和总词的正面和负面分数的总和。在博客中。所以每个博客都会有613822 + 5个功能。
我也应用了一些特征选择方法,如chi2来减少特征数量,但没有任何明显的改进。
scikit-learn的CountVectorizer
和DictVectorizer
用于向量化特征,Pipeline.FeatureUnion
用于连接它们。
我猜这个糟糕的结果是由于过大的单词功能集 - 可能是文本中有太多拼错的单词? (我已经删除了停用词并完成了一些词形化作业) 我还认为基于词典的功能并不真正起作用,因为BOW功能太大。
我希望在我的方法中找到任何明显的错误,或者我可以做些什么来提高准确性。
感谢您的任何建议!
原谅潜在的无知问题,但你的任何技术解释句子长度和标点符号?如果没有,并且你在乎回答,为什么不呢? –