English 中文(简体)
确定一个陈述/文本是积极还是消极的算法
原标题:
  • 时间:2008-11-15 20:14:25
  •  标签:

我需要一种算法来确定一句话、段落或文章的情感是负面的还是正面的……或者更好的是,它有多负面或多正面。

例如:

杰森是我见过的最差的SO用户(-10)

Jason是一个SO用户(0)

Jason是我见过的最好的SO用户(+10)

杰森在SO上最擅长地糟糕(-10)。

当然,在SO上,杰森是最糟糕的做坏事的人(+10)。

不容易,是吧? :)

我不希望有人向我解释这个算法,但我假设在学术界已经有很多类似这样的工作了。如果您能指向一些文章或研究,我会非常感激。

谢谢。

最佳回答

有一种名为情感分析的自然语言处理子领域专门处理这个问题领域。由于消费者产品在在线用户论坛(ugc或用户生成内容)中受到如此严格的审查,所以该领域有相当多的商业工作。还有一个名为GATE的文本分析原型平台,来自谢菲尔德大学,以及一个名为nltk的python项目。两者都被认为是灵活的,但性能不是很高。其中一个可能很适合研究自己的想法。

问题回答

在我的公司,我们有一种产品,它可以做到这一点,并且表现良好。我在这方面做了大部分工作。我可以给一个简短的想法:

You need to split the paragraph into sentences and then split each sentence into smaller sub sentences - splitting based on commas, hyphen, semi colon, colon, and , or , etc. Each sub sentence will be exhibiting a totally seperate sentiment in some cases.

有些句子即使被分开,也必须被连在一起。

这个产品真是太棒了,非常出色,令人惊叹。

我们制定了一整套全面的规则,针对需要进行分割的句子类型和不需要进行分割的句子类型做出了分类(根据单词的 POS 标记)。

在第一层,您可以使用词袋方法,这意味着 - 拥有一份积极和消极单词/短语列表,并在每个子句中检查。在执行此操作的同时,还要注意否定词,例如不,没有等,它们会改变句子的极性。

即使您找不到情感,您也可以选择朴素贝叶斯方法。这种方法不是非常准确(大约60%)。但是,如果您将其应用于未能通过第一组规则的句子,您可以轻松获得80-85%的准确性。

重要的部分是正面/负面单词列表和您分隔事物的方式。如果您愿意,您可以通过实施隐藏马尔可夫模型(HMM)或条件随机场(CRF)来进一步提高一级水平。但是我不是NLP的专业人员,其他人可能会填补那一部分。

对于好奇的人,我们使用NLTK和贝叶斯牧师模块在Python中实现了所有这些功能。

相当简单并且处理大多数句子。但当试图从网页上标记内容时,您可能会遇到问题。大多数人在网上不会写出正确的句子。而且处理讽刺非常困难。

这属于自然语言处理的范畴,因此阅读相关内容可能是个不错的起点。

如果你不想陷入一个非常复杂的问题中,你可以只创建“积极”和“消极”词汇的列表(如果你愿意可以给它们带上权重),并对文本的各个部分进行词频统计。显然,这不是一种“智能”的解决方案,但它可以在很少的工作量下获得一些信息,而进行严肃的NLP则需要很长时间。

你举的例子中,如果你没有更加重视“吸”的意思,可能会被标记成积极的而实际上是消极的(“Jason是最擅长在SO吸”的意思)。但是如果你查看的是一段或更长的文本,加权会变得更加可靠,除非有人故意想要欺骗您的算法。

As pointed out, this comes under sentiment analysis under natural language processing.
Afaik GATE doesn t have any component that does sentiment analysis.
In my experience, I have implemented an algorithm which is an adaptation of the one in the paper Recognizing Contextual Polarity in Phrase-Level Sentiment Analysis by Theresa Wilson, Janyce Wiebe, Paul Hoffmann (this) as a GATE plugin, which gives reasonable good results. It could help you if you want to bootstrap the implementation.

根据您的应用,您可以通过贝叶斯过滤算法(通常用于垃圾邮件过滤器中)来实现。

一种实现的方法是使用两个过滤器。一个用于筛选正面文档,另一个用于筛选负面文档。你可以使用一些条件来确定正面文档,然后将其纳入正面过滤器,同样地,将负面文档纳入负面过滤器。但难点在于如何找到这些文档。也许你可以让用户对文档进行有效评估。

正面过滤器(一旦种植)将寻找积极的单词。也许它会得到像“爱”,“和平”等词语。负面过滤器也会适当地进行种植。

一旦您设置了过滤器,您可以通过它们运行测试文本,以得出正面和负面得分。基于这些得分和一些加权,您可以得出数字分数。

贝叶斯过滤器虽然简单,但效果惊人。

你可以这样做:

    Jason is the worst SO user I have ever witnessed (-10)

最差的(-),其余的是(+)。所以,那将是(-)+(+)=(-)。

    Jason is an SO user (0)

( ) + ( ) = ( ) ( )+ ( )= ( )

    Jason is the best SO user I have ever seen (+10)

最好的(+),其余的是()。因此,那将是(+)+()=(+)。

    Jason is the best at sucking with SO (-10)

最好的(+),吮吸(-)。因此,(+)+(-)=(-)

    While, okay at SO, Jason is the worst at doing bad (+10)

最差(-),表现不好(-)。因此,(-)+(-)=(+)

这种情感分析有许多机器学习方法。我使用了大多数已实现的机器学习算法。在我的情况下,我使用了

weka classification algorithms

  • SVM
  • naive basian
  • J48: J48

    只有你需要这样做,即将模型训练到你的环境中,添加特征向量和基于规则的调整。就我而言,我得到了一些(61%准确率)。因此,我们转向斯坦福core nlp(他们为电影评论训练了他们的模型),我们使用了他们的训练集并添加了我们的训练集。我们可以达到80-90%的准确率。

这是一个旧问题,但我在寻找能够分析文章语气的工具时偶然发现了IBM的Watson音调分析器。它每月允许免费进行1000个api调用。

我认为这一切都取决于上下文。如果你在寻找最擅长使用SO的人,那么吸得最好可能是一件好事。要确定什么是好事或坏事以及程度,我建议研究模糊逻辑。

有点儿像身高。一个身高为1.95米的人可以被认为是高个子。如果你把这个人放在一群2.10米以上的人中间,他就看起来很矮。

Maybe essay grading software could be used to estimate tone? WIRED article.
Possible reference. (I couldn t read it.)
This report compares writing skill to the Flesch-Kincaid Grade Level needed to read it!
Page 4 of e-rator says that they look at mispelling and such. (Maybe bad post are misspelled too!)
Slashdot article.

你也可以使用一些电子邮件过滤器来过滤负面信息而不是垃圾邮件。

讽刺怎么样?

  • Jason is the best SO user I have ever seen, NOT
  • Jason is the best SO user I have ever seen, right

啊,我记得有一个叫做LingPipe的Java库(商业许可证)我们进行了评估。它可以很好地处理该网站提供的示例语料库,但对于真实数据来说效果非常糟糕。

大多数情感分析工具都是基于词典的,而且没有一个是完美的。此外,情感分析可以描述为三元情感分类或二元情感分类。此外,这是一个特定领域的任务。这意味着在新闻数据集上表现良好的工具可能无法在非正式和非结构化的推文上完美地完成工作。

我建议使用多种工具,并且有一个聚合或基于投票的机制来决定情绪强度。我遇到的情绪分析工具的最佳调查研究是SentiBench。你会发现它很有帮助。





相关问题
热门标签