java - 评级文章 - 情绪分析

标签 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)

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

最佳答案

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

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

从原始数据中提取特征后,您可以使用 classification algorithms 之一这是具有高维问题的下降。我测试了 SVM (线性和高斯内核)和 Naive-Bayes .当我在 Amazon 上测试时,我发现 SVM 的得分要好得多 - 两个内核之间没有统计显着性。

我的学习算法使用了具有 3 个可能值(类别)的名义分类器 - 赞成/中立/反对。

我还发现使用 feature selection (以降低维度)对朴素贝叶斯非常有帮助,但对 SVM 却没有太大帮助。


一些更重要的注意事项:

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

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

关于java - 评级文章 - 情绪分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15730254/

相关文章:

algorithm - 通过适应度函数从种群中选择个体

c++ - 我的构建二叉树解决方案有什么问题?

javascript - 如何在提供迭代次数的同时获取两个数字之间的值范围?

java - Java 中的幂运算符?

java - JSONProvider 返回空对象,例如 String

java - 如果 main 方法完成执行,任何长时间运行的线程会发生什么?

java - 获取Spring MVC相对路径

python - 动态规划,带约束的最大子数组

java - Codenameone 谷歌地图

javascript - 根据 x 距离增加行高