评级文章 - 情感分析

3

我正在开发一个Java程序(分类器),它可以读取给定的文本文件并输出相关情感(积极、消极或中性)。

该程序计算三个类别(积极、消极或中性)的概率。基于这三个概率,我想给这篇文章打分(最高为10分)。

例如 - 假设,

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

很明显,这篇文章非常正面,因此评分应该很高,即8分或以上。

附:这些概率不相加且非常小(在10的-100次方范围内)。

有人能指出哪个算法可以帮助我评价这些文章吗?

谢谢。


编辑:我不能简单地取比例。例如

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

上面显示的概率差异巨大,因此进行比率计算是没有意义的。

我不认为这与编程有关。最好在stats.stackexchange.com上提问。 - leonbloy
感谢@leonbloy。我是StackOverflow的新手,将在stats.stackexchange.com上发布这个问题。 - Ankit Rustagi
1
如果{正面,负面,中性}是样本空间,那么严格来说,你在这里处理的不是概率测度,因为它们的P(x)不加起来等于1;这可能在这里看起来无关紧要,而且可能确实如此(如果无关紧要,你可以忽略它),但是根据你对P值所做的操作,如果你假设P是概率测度,你可能会遇到麻烦。 - G. Bach
@G.Bach 你说得对,这些是每个类别的可能性。我在随意地将它们称为概率。如果您阅读一些与情感分析相关的研究论文,您会发现这些概率永远不可能加起来等于1。这意味着可能还有另一个类别,即“未分类”,适用于那些不属于其他任何类别的文档。由于我们只想要估计文档可能属于哪个类别,因此我们可以忽略其他类别,并从三个中选择最合适的类别。PS-我正在使用机器学习来训练分类器。 无论如何,谢谢! - Ankit Rustagi
2个回答

4

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

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

在从原始数据中提取特征之后,您可以使用其中一种分类算法来解决高维问题。我测试了SVM(线性和高斯内核)和朴素贝叶斯。我发现SVM得分更高 - 在我在亚马逊上测试时,两个内核之间没有统计学显着性差异。

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

我还发现使用特征选择(以减少维度)对朴素贝叶斯非常有帮助,但对支持向量机的帮助不是很大。


一些更重要的注意事项:

  1. 对单词进行词干提取也有帮助。
  2. 除了单词,使用 bi-gram(两个单词的组合)也有帮助(但会进一步增加问题的维度)。
  3. 为了完成任务,我使用了 Wekalib-svm 库来实现学习算法。
  4. 建议将数据分为测试集和训练集以估计数据的准确性,并使用 交叉验证 来找到算法的参数(例如 SVM 所需的参数)。

我的结果:使用支持向量机,我们得到了85%的正面评论准确率和约80%的负面评论准确率。真正的问题在于中性评论,我们只得到了70%的准确率,而且支持和反对的错误分类也大多是因为分类器将其归类为“中性”,几乎没有(不到5%)被归类为支持/反对,而实际上它们完全相反。

谢谢Amit!我正在使用朴素贝叶斯算法,因为某些原因。我们的项目似乎相似。但是,除了测试给定的评分(像你的情况一样),我还需要生成一个评分。使用词袋模型可以简化文档的表示方式,但是如何将其用于生成0到10的分数?您知道是否有任何有助于基于3个类的概率生成评分/分数的算法吗? - Ankit Rustagi
@AnkitRustagi 我使用了 *监督学习*。在监督学习中,您需要有初始的训练数据,并使用它来生成分类器(这称为学习过程)。通常,在此模型中进行学习需要几千个样本(经验法则)。有时会做的一件事是外包此任务,将其分成10个块(例如),并让人们为您对训练数据进行情感分类(当然需要付费)。 - amit

0
如果你正在使用朴素贝叶斯算法,那么在某个时刻你需要计算出一个概率(或对数似然),即给定示例属于某个类别(比如负面、正面或中性)的概率。也许你可以将该概率乘以10来得到你的评分?

谢谢@justin!实际上,我得到的概率非常小。这可能是因为我用大约**100篇文章训练了分类器。我发现每个类别大约有30,000个单词(不唯一)。因此,由于大量的唯一单词,我通常得到的可能性通常在10^(-100)**的范围内。因此,在这里简单地乘以10是行不通的! - Ankit Rustagi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接