3

我正在开发一个 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)

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

4

2 回答 2

4

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

您可以使用词袋模型来完成这项任务——即每个“词”都是一个特征。这会导致一个维度非常高的问题——这可能会影响学习时间。

从原始数据中提取特征后,您可以使用一种分类算法,该算法与高维问题有关。我测试了SVM(线性和高斯内核)和Naive-Bayes。我发现 SVM 的得分要好得多——当我在 Amazon 上测试时,两个内核之间没有统计学意义。

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

我还发现使用特征选择(降低维度)对朴素贝叶斯非常有帮助,但对 SVM 却没有那么大的帮助。


一些更重要的注意事项:

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

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

于 2013-03-31T14:19:31.700 回答
0

如果您使用朴素贝叶斯,则在某些时候您会计算给定示例属于某个类别的概率(或对数似然),在您的情况下为负数、正数或中性。也许你可以把这个概率乘以 10 来得到你的评分?

于 2013-03-31T15:46:13.280 回答