对大量在线对话文本的情感分析

10 投票
2 回答
5653 浏览
提问于 2025-04-17 18:36

标题已经说得很清楚了;我有一个SQL数据库,里面存满了在线对话的文本。我已经用Python做了这个项目的大部分工作,所以我想用Python的NLTK库来完成这个(除非有很强的理由不这样做)。

这些数据是按主题用户名帖子来组织的。每个主题大致上都是围绕我想分析的某个“产品”进行讨论的。最终,当这个项目完成时,我希望能得到每个用户对他们讨论过的任何产品的一个大致看法(比如喜欢或不喜欢)。

所以,我想知道:

1) 我该如何确定每个主题讨论的是什么产品?我在阅读关于关键词提取的内容……这是正确的方法吗?

2) 我如何根据用户的帖子来判断他们的情感?根据我有限的理解,我必须先“训练”NLTK,让它识别某些意见的指示词,然后我是不是只需要在文本中判断这些词出现时的上下文?

正如你们现在可能猜到的,我之前没有接触过自然语言处理(NLP)。根据我到目前为止的阅读,我觉得我可以学会它。如果有人能给我指个方向,即使只是一个基本的、粗略的工作模型也很好。谷歌对我帮助不大。

附言:我有权限分析这些数据(如果这很重要的话)

2 个回答

3

你可以用类似的数据集来训练任何分类器,然后看看当你把它应用到自己的数据上时,结果会怎么样。例如,NLTK里面有一个叫做电影评论语料库的东西,里面有1000条正面评论和1000条负面评论。这里有一个关于如何用这些评论训练朴素贝叶斯分类器的例子。还有一些其他的评论数据集,比如亚马逊的产品评论数据,你可以在这里找到

另一种方法是找一份正面和负面词汇的列表,比如这个,然后在你的数据集中统计这些词出现的频率。如果你想要一份完整的列表,可以使用SentiWordNet

5

训练任何分类器都需要一个训练集,也就是带有标签的数据,还有一个特征提取器,用来为每个文本获取特征集。一旦你训练好了分类器,就可以把它应用到之前没见过的文本(没有标签的)上,根据使用的机器学习算法来进行分类。NLTK提供了很好的解释和一些可以尝试的示例。

如果你想建立一个用于判断正面或负面情感的分类器,并且使用自己的训练数据集,我建议不要仅仅依靠简单的关键词计数,因为这样做有很多不准确的地方(比如,否定正面词汇:“不快乐”)。一种替代方法是远程监督。简单来说,这种方法使用表情符号或其他特定的文本元素作为噪声标签。你仍然需要选择哪些特征是相关的,但很多研究表明,仅仅使用单词双词组(分别是单个单词或两个单词的组合)就能取得不错的效果。

所有这些操作在Python和NLTK中都相对简单。你还可以选择使用像NLTK-trainer这样的工具,它是NLTK的一个封装,代码量更少。

我认为Go等人的这项研究是最容易理解的之一。你还可以阅读其他关于远程监督远程监督情感分析情感分析的研究。

NLTK中有一些内置的分类器,包含训练和分类的方法(比如朴素贝叶斯最大熵等),但如果你对使用支持向量机(SVM)感兴趣,就需要去其他地方找资料。技术上NLTK提供了一个SVM类,但它实际上只是对PySVMLight的封装,而后者又是对用C语言编写的SVMLight的封装。不过我在使用这个方法时遇到了很多问题,所以我更推荐LIBSVM

在确定主题时,很多人使用简单的关键词,但也有一些更复杂的方法可以使用。

撰写回答