我需要一种算法来确定一个句子,段落或文章的语气是否为负面或正面......或者更好,如何消极或积极.
例如:
Jason是我见过的最糟糕的SO用户(-10)
Jason是SO用户(0)
Jason是我见过的最好的SO用户(+10)
杰森是最好的吮吸SO(-10)
虽然,在SO,Jason是糟糕的做坏事(+10)
不容易,对吧?:)
我不希望有人向我解释这个算法,但我认为在学术界的某个地方已经有很多类似的东西了.如果你能指点我一些文章或研究,我会喜欢它.
谢谢.
有一个称为情感分析的自然语言处理子领域专门处理这个问题领域.在该地区进行了大量的商业工作,因为在线用户论坛(ugc或用户生成内容)对消费者产品进行了大量审查.还有一个用于文本分析的原型平台,称为谢菲尔德大学的GATE,以及一个名为nltk的python项目.两者都被认为是灵活的,但性能不是很高.一个或另一个可能有助于制定自己的想法.
在我的公司,我们有一个产品,它做到这一点,也表现良好.我完成了大部分工作.我可以简单介绍一下:
你需要将段落分成句子,然后将每个句子分成较小的子句 - 基于逗号,连字符,半冒号,冒号,'和','或'等分割.每个子句将表现出完全独立的情感在某些情况下.
有些句子即使是分裂的,也必须连在一起.
例如:该产品令人惊叹,非常棒,非常棒.
我们已经制定了一套关于句子类型的全面规则,这些规则需要拆分,而不应该是(基于单词的POS标签)
在第一级,你可以使用一袋单词的方法,意思是 - 有一个正面和负面的单词/短语列表,并检查每个子句.在这样做的同时,还要看"否","否"等否定词会改变句子的极性.
即便如此,如果你找不到情绪,你也可以选择朴素的贝叶斯方法.这种方法不是很准确(约60%).但是如果你只将这个应用于不能通过第一套规则的句子 - 你可以轻松达到80-85%的准确率.
重要的部分是积极/消极的单词列表以及你分裂的方式.如果你愿意,你可以通过实现HMM(隐马尔可夫模型)或CRF(条件随机场)来达到更高的水平.但我不是NLP的专业人士,其他人可能会填补你这一部分.
对于好奇的人,我们实现了所有这些是使用NLTK和Reverend Bayes模块的python.
很简单,处理大多数句子.但是,在尝试从Web标记内容时,您可能会遇到问题.大多数人不会在网上写出正确的句子.处理讽刺也很难.
这属于自然语言处理的保护伞,所以阅读它可能是一个很好的起点.
如果您不想解决一个非常复杂的问题,您可以创建"正面"和"负面"单词列表(并根据需要加权)并对文本部分进行单词计数.显然,这不是一个"智能"的解决方案,但它可以为您提供一些信息,只需要很少的工作,在那里做严肃的NLP会非常耗时.
当你使用这种方法实际上是负面的时候你的一个例子可能会被标记为正面("Jason最好用SO吸吮"),除非你碰巧比"最好"更重视"吸吮"....但这也是是一个小文本样本,如果你正在查看段落或更多文本,那么加权变得更可靠,除非你有人故意试图欺骗你的算法.
正如所指出的,这是在自然语言处理下的情感分析.
Afaik GATE没有任何进行情绪分析的组件.
根据我的经验,我已经实现了一种算法,该算法改编自Theresa Wilson,Janyce Wiebe,Paul Hoffmann(本)作为GATE插件的文章"识别短语级别情感分析中的语境极性"中的算法.效果很好.如果您想要引导实现,它可以帮助您.
根据您的应用程序,您可以通过贝叶斯过滤算法(通常用于垃圾邮件过滤器)来实现.
一种方法是使用两个过滤器.一个用于正面文档,另一个用于负面文档.您可以使用正文档(使用的任何条件)和带有负文档的负过滤器为正过滤器播种.诀窍是找到这些文件.也许您可以设置它,以便您的用户有效地评估文档.
正滤波器(曾经播种过)会寻找正面的话.也许它会以爱,和平等词语结束.负面过滤器也会被适当播种.
设置过滤器后,您可以通过它们运行测试文本,以得出正面和负面分数.根据这些分数和一些加权,您可以得出您的数字分数.
贝叶斯过滤器虽然简单,却令人惊讶地有效.