确定语句/文本的正面或负面的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});