确定陈述/文本是正面还是负面的算法
nlp
6
0

我需要一种算法来确定句子,段落或文章的语气是消极还是积极……或者更好的是,消极还是积极。

例如:

Jason是我见过的最糟糕的SO用户(-10)

Jason是SO用户(0)

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

杰森(Jason)最擅长吸吮SO(-10)

在SO方面,Jason做得不好时表现最差(+10)

不容易吧? :)

我不希望有人向我解释这种算法,但是我认为学术界某个地方已经有很多此类工作。如果您能指出一些文章或研究,我会喜欢的。

谢谢。

参考资料:
Stack Overflow
收藏
评论
共 6 个回答
高赞 时间 活跃

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

收藏
评论

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

一种方法是有两个过滤器。一个用于肯定文件,另一个用于否定文件。您可以使用肯定的文档(无论使用何种条件)来为肯定的过滤器设置种子,而对于否定的文件则使用否定的过滤器作为种子。诀窍是找到这些文件。也许您可以进行设置,以便您的用户有效地对文档进行评分。

正过滤器(一旦播种)将寻找正词。也许最终会出现诸如爱情和平之类的词。否定过滤器也将被适当地植入。

设置好过滤器后,便可以通过它们运行测试文本,以得出正分数和负分数。根据这些分数和一些权重,您可以得出数字分数。

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

收藏
评论

如所指出的,这是在自然语言处理下的情感分析下进行的。
Afaik GATE没有进行情感分析的任何组件。
根据我的经验,我实现了一种算法,该算法是Theresa Wilson,Janyce Wiebe,Paul Hoffmann( this )在论文“识别短语级情感分析中的上下文极性”中作为GATE插件改编而成的,好的结果。如果您想引导实施,它可以为您提供帮助。

收藏
评论

您可以这样:

    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)

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

收藏
评论

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

如果您不想陷入一个非常复杂的问题,则可以只创建“正”和“负”词的列表(并根据需要对它们进行加权),并对文本部分进行字数统计。显然,这不是一个“智能”的解决方案,但是它只需很少的工作就可以获取一些信息,而认真地进行NLP将非常耗时。

使用这种方法实际上是负面的时,您的一个例子可能会被标记为正面(“ Jason最擅长吸吮SO”),除非您偏重于“吮吸”而不是“最佳”。是一个小的文本示例,如果您正在查看段落或更多文本,那么除非您有意故意欺骗算法,否则加权将变得更加可靠。

收藏
评论

在我的公司中,我们有一款可以做到这一点并且性能也很好的产品。我完成了大部分工作。我可以简单介绍一下:

您需要将段落拆分为句子,然后将每个句子拆分为较小的子句子-根据逗号,连字符,半冒号,冒号,“和”,“或”等进行拆分。每个子句子将表现出完全不同的情感在某些情况下。

即使将某些句子拆分,也必须将它们连在一起。

例如:该产品令人惊叹,出色且出色。

我们针对句子的类型制定了一套全面的规则,这些规则需要拆分而不应拆分(基于单词的POS标签)

在第一层,您可以使用一袋单词的方法,意思是-列出正词和负词/短语,并检入每个子句。在执行此操作时,还要查看否定词,例如“ not”,“ no”等,它们会改变句子的极性。

即使这样,如果您找不到情感,也可以采用幼稚的贝叶斯方法。这种方法不是很准确(大约60%)。但是,如果将其仅应用于未能通过第一套规则的句子,则可以轻松达到80-85%的准确性。

重要的部分是肯定/否定词列表以及拆分内容的方式。如果需要,可以通过实现HMM (隐马尔可夫模型)或CRF (有条件随机场)来达到更高的水平。但是我不是NLP的专家,其他人可能会填补您的这一部分。

对于好奇的人,我们使用NLTK和Reverend Bayes模块实现了所有这一切。

非常简单,可以处理大多数句子。但是,在尝试标记Web内容时,您可能会遇到问题。大多数人没有在网络上写正确的句子。另外,处理讽刺非常困难。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号