识别文本中的多个类别和相关情绪

时间:2017-07-10 18:39:02

标签: python machine-learning nlp

如果你有一个文本语料库,你如何识别所有类别(来自预定类别的列表)和相关的情绪(正面/负面写作)?

我将在Python中执行此操作,但在此阶段,我不一定会寻找特定于语言的解决方案。

让我们以一个例子来看这个问题,试着澄清我在问什么。

如果我对产品有一整套评论,例如:

  

微软的Xbox One提供了令人印象深刻的图形和一系列独家2015年独家游戏。微软控制台目前在PS4之前拥有更好的媒体应用选择。该控制台的2015年秋季仪表板更新显着改进。该控制台向后兼容大约100个Xbox 360游戏,该列表有望增长。 Xbox One的新界面比PS4更令人费解。通常,PS4在跨平台游戏上提供稍微更好的安装时间,图形和性能。在选择独立游戏时,Xbox One也落后于PS4。 Kinect的遗产仍然是一个瑕疵。虽然PS4仍然是我们在游戏机竞赛中的首选首选,但Xbox One的重要课程更正和坚实的独家选择使其成为一个引人注目的选择。

我有一个预先定义的类别列表,例如:

  • 图形
  • 游戏
  • 游戏选择
  • 应用
  • 性能
  • 不相关的/其他

我可以接受我的大量评论,并逐句分解。对于我的训练数据中的每个句子,我可以用适当的类别标记它们。问题是1个句子中可能有各种类别。

如果每个句子是1个类别,那么来自scikit-learn的任何分类算法都可以解决问题。使用多类时,我可以使用多标签分类之类的东西。

增加情绪是比较棘手的部分。识别句子中的情绪是一项相当简单的任务,但如果不同标签上的情绪混合则会变得不同。

例句“Xbox One有很好的游戏选择,但性能比PS4差”。我们可以确定两个预先定义的类别(游戏选择,表现),但我们对游戏选择有积极的情绪,对表现有负面情绪。

如何识别文本中的所有类别(来自我们的预定义列表)及其相关情绪?

2 个答案:

答案 0 :(得分:2)

一种简单的方法是使用解析器将训练集分解为最小句子,并将其用作标记和情感分类的输入。

你的例句:

The Xbox One has a good selection of games but the performance is worse than the PS4

使用Stanford Parser,使用不具有子S标签的S标签(因此是最小句子)并将标记重新组合在一起。对于上面会给你这些句子的句子:

The Xbox One has a good selection of games
the performance is worse than the PS4

S标签内的情绪应该在大多数情况下保持一致。如果The XBox has good games and terrible graphics之类的句子在您的数据集中很常见,您可能需要将其分解为NP标记,但这似乎不太可能。

关于标签,正如您所提到的,任何多标签分类方法都应该有效。

对于更复杂的方法,有很多关于连接主题 - 情感模型的研究 - 搜索"主题情感模型"出现了很多论文和代码。这是来自一篇文章的示例培训数据,该文章介绍了一个看起来就在你巷子里的Hidden Topic Sentiment Model。请注意第一句中带标签的内容有两个主题。

HTSM training data

希望有所帮助!

答案 1 :(得分:1)

我能想到的唯一方法是由一系列步骤组成。

1)使用一些库从文本及其关系中提取实体。例如,请查看以下文章:

http://www.nltk.org/book/ch07.html

通过解析每个文本,您可以确定每个文本中包含哪些实体以及哪些文本块与实体相关。

2)使用NLTKs情绪提取来分析与每个实体特别相关的块并获得它们的情绪。这会给你每个实体的情绪。

3)之后,你需要找到一种方法,将你可能在文本中面对的实体映射到你所称的主题'。不幸的是,我没有看到自动化的方法,因为你显然没有按照常规方式定义主题,通过词频(如主题建模算法 - LDA,NMF等)。