GoEmotions:情绪分类更为细化的数据集

发布人:Google Research 的软件工程师 Dana Alon 和 Jeongwoo Ko

情绪是社交互动中的重要一环。它影响着人们的行为方式,塑造人际关系。语言尤为如此,只需要几句话,我们就能够表达各种微妙而复杂的情绪。因此,研究界的一个长期目标是 让机器能够理解上下文和情绪,这反过来又有助于研发各种应用(包括有同理心的聊天机器人、检测有害在线行为的模型等),也有助于改善客户服务互动。

在过去十年中,自然语言处理 (Natural Language Processing, NLP) 研究人员已经制作了一些基于语言的情绪分类(Emotion classification)可用数据集。其中大多数是手动构建的,涵盖的目标领域有 新闻标题电影字幕,甚至 童话

但这些数据集往往相对较小,或者内容仅限于 1992 年提出 的六种基本情绪(愤怒、惊讶、厌恶、快乐、恐惧和悲伤)。这些情绪数据集对情绪分类进行了初步探索,同时也体现出人们需要包含更多种情绪的大规模数据集,促进在未来开发出更多新应用。

在 “GoEmotions:情绪分类更为细化的数据集 (GoEmotions: A Dataset of Fine-Grained Emotions)”一文中,我们介绍了由 58000 条评论组成的人工注释数据集 GoEmotions,这些评论来源于流行英语论坛 Reddit 下的各不同板块,并标记为 27 个情绪类别。GoEmotions 分类系统是迄今为止最庞大的情绪细化英语数据集,包含详细注释。我们在设计它时,同时考虑了心理学和数据的适用性。基本的六种情绪中只包含一种积极的情绪(快乐),而我们的分类系统包括 12 种积极的、11 种消极的、4 种模糊的以及 1 种“中立”的情绪类别,因此它可以广泛适用于需要对情绪表达进行细致区分的对话理解任务。

我们在发布 GoEmotions 数据集的同时,还发布了一个 详细的教程,演示了使用 GoEmotions 训练神经模型架构(可从 TensorFlow Model Garden 中获取)的过程,并将其应用于根据对话文本推荐表情符号的任务。在 GoEmotions 模型卡 中,我们探讨了使用 GoEmotions 建立的模型所具备的其他用途,以及使用数据时的注意事项和限制条件。

这段文本同时表达了几种情绪,有兴奋、赞同和感谢

这段文本表达的是解脱,这是一种复杂的情绪,传达的情感既有积极也有消极的一面

这段文本表达了懊悔,这是一种人们经常传达的复杂情绪,但无法被简单的情绪模型所捕捉

构建数据集

我们的目标是构建一个大型数据集,聚焦对话数据,其中情绪是交流的重要一环。Reddit 平台提供了大量的可用公开内容,包括用户与用户之间的直接对话,这些是宝贵的情绪分析资源。因此,我们使用 2005 年(Reddit 在这一年创建)到 2019 年 1 月之间的 Reddit 评论构建了 GoEmotions,内容来源于至少有 10000 条评论的论坛板块,不包括已删除和非英语评论。

为构建具有广泛代表性的情绪模型,我们采用了数据管护措施,以确保数据集不会深化一般的或特定情绪的语言偏见。这一点特别重要,因为众所周知 Reddit 的 年轻男性用户较多,无法完全反映全球人口的多元化。该平台也不乏 恶意和攻击性语言。为了解决这些问题,我们使用预先规定的术语(含攻击性/成人、粗俗、身份和宗教等内容)识别有害评论,之后对其进行数据筛选和屏蔽。我们还对数据进行了额外筛选,以减少不雅词汇、限制文本长度,并平衡所表达的情绪和情感。为避免热门子版块内容占比过大,并确保评论也能反映不太活跃的子版块,我们还在版块社区之间对数据进行了平衡。

我们创建的分类系统,希望同时实现以下三个目标:(1) 最大程度覆盖 Reddit 数据中表达的情绪;(2) 最大程度覆盖情绪表达的类型;(3) 最大程度限制情绪的总体数量及情绪重叠。这样的分类可以促进对数据驱动的精细化情绪的理解,同时也可以解决某些情绪的数据可能缺少的问题。

建立分类系统是一个反复迭代的过程,目标是定义和优化情绪标签的类别。在数据标记阶段,我们总共考虑了 56 个情绪类别。从这个样本中,我们确定并移除了那些几乎没有测评者选择的情绪、由于与其他情绪相似而导致测评者之间结果一致性较低的情绪,或者难以从文本中检测到的情绪。我们增加了测评者频繁建议且在数据中有良好代表性的情绪。最终,我们完善了情绪类别的名称,以最大限度地提高可解释性,从而实现测评者之间结果的高度一致,94% 的例子中至少有两个测评者对至少一个情绪标签达成一致。

已公布的 GoEmotions 数据集包括下图展示的分类系统。经最后一轮数据标记,数据已全面收集完毕,其中分类和测评标准都是预先定义和固定的。

GoEmotions 分类系统:包含 28 种情绪分类(含“中立”)

数据分析及结果

在 GoEmotions 数据集中,情绪的分布并不均匀。重要的是,积极情绪的高频率让我们更想实现多样化的情绪分类,而不仅仅是六种传统的基本情绪。

为了验证我们的分类选择是否与基本数据相匹配,我们采用了 主成分分析 (Principal Preserved Component Analysis,PPCA) 法。这是一种通过提取在两组测评者之间表现出最高联合可变性的情绪判断的线性组合,进而比较两个数据集的方法。因此,它有助于我们发现在不同测评者之间具有高度一致性的情绪维度。PPCA 之前用于理解 视频语音 中情绪识别的主要维度,我们在这里用它来理解文本中情绪的主要维度。

我们发现每种成分都具有统计显著性(所有维度的 p 值都 < 1.5e-6),表明每种情绪都是数据独一无二的部分。这绝非无关紧要,因为在 之前 对语音的情绪识别中,30 个情绪维度中只有 12 个具有统计显著性。

我们根据测评者判断结果之间的相关性来研究所定义的情绪集群。通过这种方法,当两种情绪经常被测评者共同选择时,它们会进入一个集群。我们发现,尽管在我们的分类系统中没有预先规定的情绪概念,但在情感方面有关联的情绪(消极、积极模糊)会进入一个集群,这表明了测评的质量和一致性。例如,如果一个测评者选择“兴奋”作为给定评论的标签,那么另一个测评者就更有可能选择一种相关的情感,例如“快乐”,而不是“恐惧”。也许出乎意料的是,所有模糊的情绪都聚集在一起,而且它们与积极情绪的联系更为紧密。

Noisy Student 和知识蒸馏的简图

同样,在程度上有关联的情绪,如 快乐兴奋紧张恐惧 悲痛生气愤怒,也是密切相关的。

我们的论文中还提供了其他分析和使用 GoEmotions 进行的建模实验。

研究展望:不利用人工做标记

GoEmotions 提供了大量人工注释的情绪数据,但还有其他情绪数据集,这些数据集使用启发式方法自动进行弱标记。主流的启发式方法是将 与情绪相关的 Twitter 标签 用作情绪类别,这样有利于低成本地生成大型数据集。但这种方法由于多种原因而受到限制:Twitter 上使用的语言与许多其他领域的语言 明显不同,这限制了数据的适用性;标签是人为创建的,在直接使用时,容易出现重复、重叠和其他分类上的不一致;这种特殊方法仅限于对 Twitter 使用,不适合其他语料库。

我们提出了一个替代性的、更易于获取的启发式方法:将用户对话中的表情符号用作情绪类别的代理。这种方法可以应用于任意含有表情符号的语料库(即表情符号在这些语料库中是合理的成分),包括许多口语语料库。由于表情符号比 Twitter 标签更加标准化,数量也相对更多,因此所呈现的不一致性较低。

请注意,所提出的两种方法(使用 Twitter 标签和使用表情符号)都不是直接针对情绪理解,而是针对对话表达的各种变体。例如,在下面的对话中,:pray: 表示感谢,:birthday: 表示庆祝,以及 :gift: 代替了文字“礼物”。同样,虽然许多表情符号与情绪表达有关,但情绪是微妙和多面的,在许多情况下,没有一个表情符号能够真正捕捉到某种情绪的全部意义。此外,表情符号可以捕捉到情绪以外的不同表达方式。综上所述,我们认为表情符号是表达方式而不是情绪。

这种类型的数据有利于构建表达力很强的对话代理以及 推荐 适合上下文的表情符号,是未来工作中的一个特别有趣的领域。

结论

GoEmotions 数据集提供了一个大型手动注释的数据集,用于细化的情绪预测。我们的分析说明了注释的可靠性和对 Reddit 评论所表达情绪的广泛覆盖。我们希望 GoEmotions 能够成为语言情绪研究者的宝贵资源,并有助于从业者打造创新型情绪驱动应用,解决广泛的用户情绪问题。

致谢

本篇文章中所涉及的研究,作者为 Dora Demszky(在 Google 实习期间)、Dana Alon(之前为 Movshovitz-Attias)、Jeongwoo Ko、Alan Cowen、Gaurav Nemade 和 Sujith Ravi。感谢 Peter Young 在基础架构和开源工作方面所作出的贡献。感谢 Erik Vee、Ravi Kumar、Andrew Tomkins、Patrick Mcgregor 和 Learn2Compress 团队对本研究项目的支持和赞助。

原文:GoEmotions: A Dataset for Fine-Grained Emotion Classification
中文:TensorFlow 公众号