在文本中识别多个类别及其情感

4
如果您有一些文本语料库,如何从预定义的类别列表中识别所有类别并将其与情感(正面/负面写作)相关联?
我将在Python中进行此操作,但在此阶段,我不一定寻找特定于某种语言的解决方案。
让我们通过一个例子来看看这个问题,以便尝试澄清我的问题。假如我有一整个产品评论的语料库,例如:
Microsoft Xbox One 提供了令人印象深刻的图形和一个坚实的2015独家游戏列表。 目前,Microsoft控制台优于PS4,具有更好的媒体应用程序选择。 控制台的2015年秋季面板更新是明显的改进。 该控制台向后兼容大约100个Xbox 360标题,并且该列表有望增长。 Xbox One的新界面仍然比PS4更为复杂。 总体而言,在跨平台游戏的安装时间,图形和性能方面,PS4提供稍微更好的表现。 Xbox One在独立游戏的选择方面也落后于PS4。 Kinect的遗产仍然是瑕疵。 虽然在游戏机竞赛中,PS4仍然是我们总体上首选的选择,但Xbox One的重大修正和坚实的独家游戏使它成为一个引人注目的替代选择。
我有一个预定义类别列表,例如:
图形 游戏玩法 游戏选择 应用程序 性能 不相关/其他
我可以获取我的大量评论,并将其按句子分解。 对于训练数据中的每个句子,我都可以手动标记适当的类别。 问题在于一个句子中可能会有各种类别。
如果每个句子只有一个类别,则来自scikit-learn的任何分类算法都可以完成这项技巧。 在处理多类时,可以使用诸如多标签分类之类的东西。
添加情感是更棘手的部分。 识别句子中的情感是一项相当简单的任务,但如果不同标签的情感混合在一起,则变得不同。
例如:“Xbox One有很好的游戏选择,但性能比PS4差”。 我们可以识别出两个我们预定义的类别(游戏选择,性能),但我们对游戏选择有积极的情感,对性能则有消极的情感。
有什么方法可以确定文本中的所有类别(来自我们预定义的列表)及其相关联的情感?

1
你有没有考虑过像NMF或LDA这样的主题建模方法?你可以对所有文本运行它们,得到有意义的主题列表,将它们映射到预定义的主题。然后,你可以为每个文本获取其对每个主题的成员资格程度 - 即使是新的文本也可以。在这种情况下,不需要使用机器学习算法。 - Maksim Khaitovich
请进一步澄清您的第二个问题 - 您是想了解一个主题的情感总体(例如主题-PS4,所有评论的总体情感是X),还是您需要更具体的信息? - Maksim Khaitovich
只有一个问题:“如何在文本中识别多个类别及其相关情感?”例如,如果一段文本包含句子“The Xbox One has a good selection of games but the performance is worse than the PS4”,则结果将是:(类别:游戏选择,情感:积极)和(类别:性能,情感:消极)。 - Reily Bourne
嗨@ReilyBourne,你介意分享你的最终方法吗? - Chaitu
2个回答

2
一种简单的方法是使用解析器将您的训练集分成最小的句子,并将其用作标记和情感分类的输入。
您的例句:
The Xbox One has a good selection of games but the performance is worse than the PS4

使用斯坦福分析器,选择没有子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标签,但这似乎不太可能发生。
关于标记,正如您所提到的,任何多标签分类方法都应该适用。
对于更复杂的方法,有很多关于联合主题-情感模型的研究 - 搜索“topic sentiment model”会出现很多论文和代码。这里是一篇介绍Hidden Topic Sentiment Model的论文中的示例训练数据,看起来非常适合您。请注意,在带有标签的第一句话中有两个主题。

HTSM training data

希望能有所帮助!

谢谢-两种方法看起来都很有用。将其分解为最小的句子并找到其一种情绪和一个或多个类别似乎很容易。我也会读这篇论文。SNP标签是什么?它们被称为什么?我猜NLTK有工具可以处理它们,但我需要先理解它们。谢谢。 - Reily Bourne
1
这些是宾州树库标签,S代表“句子”,NP代表“名词短语”。请参阅此处获取详细信息:https://gist.github.com/nlothian/9240750#clause-level - polm23

1

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

1)使用某个库从文本中提取实体及其关系。例如,请查看这篇文章:

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

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

2)使用NLTK的情感提取来分析与每个实体相关的特定文本块并获取它们的情感。这给出了每个实体的情感。

3)之后,您需要想出一种将您可能在文本中遇到的实体映射到所谓的“主题”的方法。不幸的是,我没有看到自动化的方法,因为您明显没有通过词频(如主题建模算法-LDA、NMF等)传统地定义主题。


感谢您的输入。在我看来,我有许多段落的语料库,每个段落都可以分成单独的句子。我可以创建训练数据并标记每个句子(根据我定义的类别)。对于新的段落,我可以做同样的事情,将其分成句子,并使用多标签分类来确定正在讨论哪些定义的类别。下一步是问:“这是积极的还是消极的意义?”如果一个句子中有两个主题,并且情感混合,那么难点就在于匹配哪个主题是负面的,哪个是正面的。 - Reily Bourne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接