评级文章 - 情绪分析

时间:2013-03-31 14:09:02

标签: java algorithm math probability sentiment-analysis

我正在研究一个Java程序(分类器),它读取给定的文本文件并输出相关的情绪(正面或负面或中性)。

该程序计算三个类别(正或负或中性)的三个概率。考虑到这三个概率,我想给文章一个分数(最多10个)。

示例 - 如果想的话,

P(Positive) = 0.0006
P(Negative) = 0.0001
P(Neutral)  = 0.0002

然后很明显,该文章是高度正面的,因此评级应该高,即8或以上。

PS - 概率不等于1并且数字非常小(在~10 ^ - (100)范围内)

有人可以指出任何可以帮我评价文章的算法吗?

由于


修改 我不能简单地拿比率。例如

P(Positive) = 1.2*E(-117)
P(Negative) = 4.7*E(-112)
P(Neutral)  = 9.3*E(-110)

上面显示的概率变化很大。因此,采用比率将毫无意义。

2 个答案:

答案 0 :(得分:4)

我在6个月前的亚马逊评论上做了类似的事情(估计准确性的基本事实是星级评定)。

您可以使用Bag of Words model执行此任务 - 即每个“字词”都是一项功能。这会导致维度非常高的问题 - 这可能会影响学习时间。

从原始数据中提取要素后,您可以使用具有高维度问题的classification algorithms之一。我测试了SVM(线性和高斯内核)和Naive-Bayes。我发现SVM得分要好得多 - 当我在亚马逊上测试时,这两个内核之间没有统计意义。

我使用名义分类器和3个可能的值(类)作为我的学习算法 - pro / neutral / against。

我还发现使用feature selection(以减少维度)对于Naive-Bayes非常有用,但对于SVM却没有那么多。


更重要的一些注意事项:

  1. 词干也有帮助。
  2. 除了单词之外,使用bi-gram(单词对)也有帮助(尽管进一步增加了问题的维度)。
  3. 对于该任务,我使用Wekalib-svm库来实现 学习算法。
  4. 我建议拆分测试和训练数据以估算数据的准确性,并使用cross-validation查找算法的参数(例如,SVM所需的参数)

  5. 我的结果:使用SVM,正面评论的准确率为85%,负面评论的准确率为80%。真正的问题是中立,我们得到了70%,而且赞成和反对的错误也主要是因为分类器将其归类为“中立”,几乎没有(少于5%)被归类为亲/反对他们是恰恰相反。

答案 1 :(得分:0)

如果你正在使用朴素贝叶斯,在某些时候你会计算一个给定例子在某个类别中的概率(或记录可能性),在你的情况下为负,正或中性。也许您可以将该概率乘以10以获得您的评分?