【问题标题】:Rating Articles - Sentiment Analysis [closed]评级文章-情绪分析[关闭]
【发布时间】:2023-07-08 02:57:01
【问题描述】:

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

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

【问题讨论】:

  • 我认为这与编程无关。最好在 stats.stackexchange.com
  • 谢谢@leonbloy。我是 * 的新手,将在 stats.stackexchange.com 上发布这个问题。
  • 如果 {positive,negative,neutral} 是样本空间,那么严格来说,您在这里没有处理概率度量,因为它们的 P(x) 不等于 1;这在这里可能看起来无关紧要并且可能是(所以如果它无关紧要,你显然可以忽略它),但根据你对 P 的这些值所做的事情,如果你假设 P 是一个概率度量,你可能会遇到麻烦。
  • @G.Bach 你是对的,这些是每个类的可能性。我松散地将它们称为概率。如果您浏览一些与情绪分析相关的研究论文,您会发现这些概率永远不会等于 1。这意味着可能存在另一个类别,即 - 对于不属于其他类别的文​​档的“未分类” .由于我们只想估计文档可能属于哪个类,我们可能会忽略其他类并在三者中选择最合适的。 PS - 我正在使用机器学习来训练分类器。无论如何谢谢!

标签: java algorithm math probability sentiment-analysis


【解决方案1】:

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

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

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

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

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


一些更重要的注意事项:

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

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

【讨论】:

  • 谢谢阿米特!由于某些原因,我正在使用朴素贝叶斯。我们的项目看起来很相似。 但我必须做的另外一件事是生成一个评级,而不是测试给定的评级(如你的情况)。使用词袋模型我可以简化文档的表示,但是 我如何使用它来生成满分 10 分?你知道任何这样的算法有助于生成 3 个类的概率的评级/分数吗?
  • @AnkitRustagi 我用过 supervised learning。在监督学习中,您需要有一个初始训练数据,并使用它来生成分类器(这称为学习过程)。通常你需要几千个样本来学习这个模型(经验法则)。有时要做的一件事是将此任务外包,将其分散到 10 个块(示例),然后让人们为您对训练数据的情绪进行分类(当然要收费)。
【解决方案2】:

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

【讨论】:

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