确定语句/文本的正面或负面的algorithm

我需要一个algorithm来判断一个句子,一个段落或者一个文章是否是否定的,或者是更好的,或者是正面的。

例如:

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

Jason是一个SO用户(0)

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

杰森是最好的吸SO(-10)

虽然,好吧,杰森是最糟糕的(+10)

不容易吧? 🙂

我不希望有人向我解释这个algorithm,但是我认为在学术界已经有很多这样的工作了。 如果你能指点我一些文章或研究,我会喜欢它。

谢谢。

有一个自然语言处理的子领域,称为情感分析 ,专门处理这个问题领域。 在该地区进行了大量的商业工作,因为在线用户论坛(ugc或用户生成的内容)对消费产品进行了大量的审查。 还有谢菲尔德大学的文本分析原型平台GATE和一个名为nltk的Python项目。 两者都被认为是灵活的,但不是很高的性能。 其中一个可能对你自己的想法有好处。

在我们公司,我们有一个这样做的产品,也performance良好。 我做了大部分的工作。 我可以简单介绍一下:

你需要把这个段落分成几个句子,然后把每个句子分成更小的子句 – 基于逗号,连字符,分号,冒号,和,或者等等来分割。每个子句将会performance出完全不同的情感在某些情况下。

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

例如:该产品是惊人的,优秀的和美妙的。

我们已经制定了一整套关于需要拆分的句子types的规则,而不应该(基于词的POS标签)

在第一个层面上,你可以用一包字的方法,意思是 – 有一个正面和负面的单词/短语列表,并检查每个子句。 在这样做的同时,还要看否定词,如“不”,“否”等,这将改变句子的极性。

即使如此,如果你找不到情绪,你可以去做一个朴素的贝叶斯方法。 这种方法不是很准确(约60%)。 但是,如果仅将这一点应用于不能通过第一组规则的句子,则可以轻松达到80-85%的准确度。

重要的部分是正面/负面的单词列表和你分裂的方式。 如果你愿意,你可以通过实现隐马尔可夫模型( HMM )或CRF (条件随机场)来达到更高的水平。 但是我不是NLP的专家,其他人可能会填补你的空缺。

对于好奇的人,我们实现了所有这些都是Python与NLTK和牧师贝叶斯模块。

很简单,处理大部分的句子。 当您试图从networking标记内容时,您可能会遇到问题。 大多数人不会在网上写出适当的句子。 处理讽刺也很难。

这属于自然语言处理的范畴 ,因此阅读这里可能是一个很好的开始。

如果你不想陷入一个非常复杂的问题,你可以创build“正面”和“负面”单词列表(如果你愿意,也可以进行加权),然后对文字段落进行单词统计。 显然,这不是一个“聪明”的解决scheme,但它会给你一些很less的工作的信息,在那里做严肃的NLP将是非常耗时的。

除非你碰巧体重“吮吸”超过“最好”,否则你的一个例子可能会被标记为肯定的,因为使用这种方法实际上是否定的(“杰森是吸吮最好的”)。是一个小文本样本,如果你正在看段落或更多的文本,那么加权变得更加可靠,除非你有人有目的地试图欺骗你的algorithm。

正如指出的,这是在自然语言处理下的情感分析。
Afaik GATE没有任何进行情绪分析的组件。
根据我的经验,我已经实现了一个algorithm,该algorithm是由Theresa Wilson,Janyce Wiebe,Paul Hoffmann( this )作为GATE插件在文章“识别短语级情感分析中的情境极性”好的结果。 它可以帮助你,如果你想引导实施。

根据您的应用程序,您可以通过贝叶斯过滤algorithm(通常用于垃圾邮件filter)来实现。

一种方法是使用两个filter。 一个是正​​面文件,另一个是负面文件。 您将使用正面文档(无论使用哪种标准)对正filter进行种子处理,使用负面文档处理负filter。 诀窍是find这些文件。 也许你可以设置它,让你的用户有效地评价文件。

积极的filter(一旦种子)会寻找积极的话语。 也许最后会出现爱情 ,和平等词汇。负面的filter也会被适当的播种。

一旦你的filter被设置,然后你运行testing文本通过他们拿出正面和负面的分数。 基于这些分数和一些权重,你可以拿出你的数字分数。

贝叶斯filter虽然简单,但是却是非常有效的。

你可以这样做:

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) 

最差( – ),做坏( – )。 所以,( – )+( – )=(+)

这种情感分析有许多机器学习的方法。 我使用了大部分已经实现的机器学习algorithm。 我的情况我已经使用

weka分类algorithm

  • SVM
  • 天真的基础
  • J48

    只有你必须做到这一点训练模型到你的背景下,添加精选的vector和基于规则的调整。 在我的情况下,我有一些(61%的准确性)。 所以我们进入斯坦福核心nlp (他们训练他们的电影评论模型),我们使用他们的训练集并添加我们的训练集。 我们可以达到80-90%的准确性。

这是一个古老的问题,但是我碰巧find了一个可以分析文章语气的工具,并find了IBM的Watson Tone Analyzer 。 它允许免费每月1000阿皮通话。

这是关于上下文的,我想。 如果你正在寻找那些最擅长吸SO的人。 吸吮最好可以是一个积极的事情。 为了确定什么是坏的或好的,以及我可以推荐多less模糊逻辑。

这有点像个高。 1.95米的人可以认为是高的。 如果你把这个人放在一个拥有2.10米长的人群中,他看起来很矮。

也许文章评分软件可以用来评估音调? 有线文章。
可能的参考。 (我看不懂)
这个报告比较写作技巧和阅读它所需的Flesch-Kincaid年级。
e- rator的第4页说,他们看错误等。 (也许坏post也拼错了!)
Slashdot文章。

您也可以使用某种电子邮件filter来取代垃圾邮件。

讽刺怎么样:

  • 杰森是我见过的最好的SO用户,不是
  • 杰森是我所见过的最好的SO用户,对

啊,我记得我们评估过的一个名为LingPipe (商业授权)的Java库。 它可以在网站上提供的示例语料库中正常工作,但是对于真实的数据来说,它很糟糕。

  use Algorithm::NaiveBayes; my $nb = Algorithm::NaiveBayes->new; $nb->add_instance (attributes => {foo => 1, bar => 1, baz => 3}, label => 'sports'); $nb->add_instance (attributes => {foo => 2, blurp => 1}, label => ['sports', 'finance']); ... repeat for several more instances, then: $nb->train; # Find results for unseen instances my $result = $nb->predict (attributes => {bar => 3, blurp => 2});