A Large Self-Annotated Corpus for Sarcasm

Table of Contents

摘要

该语料库有130万条讽刺性陈述 - 比之前的数据集多10倍 - 并且比非讽刺陈述的例子多几倍,允许在平衡和不平衡的标签系统中学习。每个语句都是自我注释的 - 具有讽刺意味的是作者,而不是独立的注释者 - 并提供用户,主题和对话上下文。

介绍

讽刺检测在数据集中的例子很少、人类难以辨别和现有的数据集平衡的数据标签(数据标签大致相同)这些原因,所以检测讽刺很难。

我们提供了一个用于具有不平衡和自注释标签的讽刺检测的语料库。因为Reddit的评论结构以及经常使用和标准化的讽刺注释。有超过100万个讽刺的例子,每个例子都提供了作者,主题和上下文信息。

我们在第3节讨论了语料库结构和相关统计数据,在第4节手动评估我们语料库的噪声,第5节,我们为讽刺检测系统构建合适的基准,并检查这些子集上的简单基线方法和人类评估者的表现。

相关工作

由于我们的主要贡献是语料库而不是讽刺检测方法。

反讽数据集会有很大的区别,由于获取讽刺或非讽刺陈述的来源,手工标注的数量,和数据集平衡与否。Wallace et al.(2015) 等人使用不平衡的标签,它们不利用自我注释的标签并生成了大约10000各个手工标注的句子。推特的数据集也被用的很多,由于#sarcasm, #notsarcasm和#irony等主题提供了自注释。4.2节提到的,Twitter的缩写语言和其他属性使其变得不那么吸引人。虽然,Twitter是目前最大的原始数据来源并且之前都致力于不平衡的语料库。另外一个评论来源是IAC,这个语料库可以进一步通过人类或机器学习注释为讽刺,大概有产生了10000个带标签的陈述。

语料库细节

Reddit数据集的结构和注释

reddit是一个社交媒体网站,用户通过帖子中的评论进行交流,每一个评论包含了嵌入式媒体,外部链接,和文字,这些发布在指定主题模块的帖子被称为subredddits;这些subreddits包含了搞笑,图片,科学。用户对提交和其他评论进行评论,从而产生了类似树的会话结构。我们把reddit树中的任何节点称为元素(即提交或评论)

reddit用户采用了常用的讽刺注释方法,在讽刺语句的末尾标记’/s’;这个标记来源于<sarcasm></sarcasm>。和Twitter主题标签一样,使用这些标记作为讽刺的指标是嘈杂的,特别是很多用户不使用标记,不知道是不是讽刺,仅仅在讽刺意图不明显的地方使用它,我们在4.1节讨论这种噪音的程度。

构造SARC

我们使用网络爬虫抓取数据,去除了噪音数据。对于每个评论,我们提供一个讽刺标签,作者,subreddit, 用户投票的评论分数,评论的日期,以及回到原始数据集所有评论的标识符。

为了减少噪音,我们使用多个滤镜来消除噪音和无信息的评论。其中许多是标准的预处理步骤,例如排除URL和字符限制在ASCII中。为了处理Reddit数据,我们还排除了作为对话树中的讽刺评论后代的评论,因为在这种表达下,注释非常嘈杂,没有标记作者是否同意先前自己的讽刺表达的讽刺与否。

我们的原始语料库包含了三个文件: 1. 一种CSV格式的数组,包含5.33亿条评论,其中约130万条是讽刺性的。此文件仅包含作者了解标准讽刺注释的注释;这取决于他们是否在评论发布的同一个月或之前使用过注释。添加此限制是为了减少由于作者为注释其讽刺而导致的漏报。每行还包含父注释。 2. 第二个是json格式的哈希表,包含讽刺评论的对话线程中的所有评论和帖子以及所有讽刺评论的兄弟姐妹。 3. csv格式的数组,每行包含一系列导致讽刺的评论,对该序列中的最后一个元素进行(讽刺和非讽刺)的响应。每个元素都作为前一个文件的键。

这种原始语料库非常大,适用于大规模机器学习和统计分析,以及用于评估讽刺检测系统的较小基准任务。这些基准,无论是在平衡还是不平衡的情况下,都需要对语料库进行进一步的子采样,以及在稀疏信号面前处理噪声数据的方法。我们在5.1节评估了这样的方法,然后在输出上评估学习算法。

语料库评估

评估我们的语料库有三个主要的衡量指标:(1)规模,(2)讽刺与非讽刺评论的比例,以及(3)误报率和漏报率。令人感兴趣的还有语料库中的文本质量以及其对其他NLP任务的适用性。因此,在本节中,我们评估原始语料库中的错误,并提供与用于构建讽刺数据集的其他语料库的比较。我们还讨论了我们方法的潜在局限性。

手动评估

为了研究使用Reddit作为自我注释讽刺来源的嘈杂,我们估计了由我们的过滤引起的假阳性和假阴性的比例。 这是通过手动检查来自SARC标记为讽刺和500标记为非讽刺的500条评论的随机子集来完成的,并且可以完全访问评论的上下文。 如果“/ s”标签不是注释而是句子的一部分,并且如果评论作者明显对人类评估者讽刺,则评论被确定为误报。 该程序产生1.0%的假阳性率和2.0%的假阴性率。 虽然假阳性率是合理的,但假讽率与讽刺比例(0.25%)相比是显着的,表明讽刺的工作定义存在很大差异,并且需要能够处理不平衡设置中的噪声数据的方法。 在平衡设置中,这仍然是相当少量的噪音。

与其他数据源进行比较

如前所述,Twitter在以前的语料库中是最常见的讽刺来源; 这可能是由于其主题标签提供的显式注释。 然而,使用Reddit作为讽刺评论的来源具有许多研究优势。 与不受长度约束且包含较少主题标签的Reddit注释不同,推文是用缩写英语编写的。 Hashtagged标记也经常被用作语句本身的一部分(例如“那是#sarcasm”),模糊了文本和注释之间的界限; 在Reddit上,“/ s”通常仅在用作注释时用作注释以外的其他东西(例如“你忘了/ s”)。 由于单个帖子的浅树结构及其注释,Reddit上的完整对话上下文也更容易提供。

此外,从2014年7月的Twitter和Reddit数据的子样本中,我们确定Twitter作者中使用讽刺注释(#sarcasm,#sarcastic或#sarcastictweet)的百分比(.002%对.927%)要小得多。 我们假设Reddit用户需要更频繁地以更标准化的形式进行讽刺注释,因为它们主要是匿名的,因此不能依赖共享的上下文来传达讽刺。 最后,Reddit还受益于subreddits,它可以基于明确的主题分配实现特征化和数据探索。

Internet Argument Corpus(IAC)也被用作讽刺评论的来源(Walker等,2012)。 语料库开发人员发现IAC中有12%的例子是讽刺性的,这对于讽刺检测来说比我们的更好。 由于Reddit数据由任意对话组成,而不仅仅是参数,因此即使考虑到假阴性,我们的讽刺百分比也要小得多也就不足为奇了; 此属性还使我们的数据集更加真实。 与Reddit和Twitter不同,IAC还需要手动注释讽刺。

我们方法的局限性

我们收集自注释讽刺数据集的方法有一些值得注意的局限性。 尽管我们努力过滤嘈杂的“/s”标签,但仍存在没有简单规则可靠地消除不正确标签的情况。 我们描述了误报和漏报的困难: * 误报是由于存在“/ s”标记而将评论错误地标记为讽刺的情况。 这种情况仅在评论中出现“/ s”标签时出现,其含义与指示讽刺有所不同。 如前所述,如果用户不知道“/ s”符号,则更有可能发生这种可能性。 类似地,如果“/ s”用于指代其用作注释的约定,那么仅仅检测“/ s”字符串的简单方法也会失败。 最后,“/ s”可能还有其他含义:例如,在HTML中,<s> ... </s>表示删除。 因此,例如,专注于网络编程讨论的子编辑可能包括“/ s”以不同含义使用的实例。 为了解决第一个问题,我们通过确保他们之前使用过“/ s”来限制用户了解讽刺符号。 此过滤器有助于确保用户了解“/ s”的语义用法。 对于第二种情况,我们只保留评论末尾带有“/ s”的评论。 我们检查的所有以“/ s”结尾的注释都使用注释来表示讽刺。 第三种情况相当于解决词义消歧,我们没有找到一种简单的方法来减少这种形式的噪音。 然而,通过限制已知不具有“/ s”(例如,政治)的替代意义的子编辑,可以降低这种形式的感觉不匹配的可能性。

  • 假阴性是评论是讽刺性的,但没有用“/ s”注释的情况。 假阴性比假阳性更难检测,因为没有讽刺注释的评论部分比做出的部分要大得多。 有两种主要方式可能出现假阴性:用户不知道“/ s”约定,或者用户认为他们对讽刺的使用明显足以保证不包括标签。 值得注意的是,这种信念取决于用户正在进行通信的社区,用户正在与之通信的用户(他们经常与之争吵的另一个用户,或陌生人),以及先前对该线程的评论。 如前所述,讽刺性的评论经常会产生一系列随后的评论,这些评论都是讽刺性的,但缺乏“/ s”符号。 简而言之,上下文对于确定讽刺性评论是否显而易见至关重要。 我们的第一个过滤器解决了第一个问题。 第二个问题很难解决,仍然是我们方法的局限。 我们通过在线程中丢弃讽刺评论的子评论来避免讽刺评论链的特定情况。

我们所有的过滤器都通过手动评估第4.1节中描述的误报率和误报率进行验证,这在实施过滤器后得到了显着改善。 我们的手动评估方法有一个中心限制:虽然我们为人类注释者提供本地背景,但如果区分评论的讽刺意图的能力依赖于评论者的评论历史或相关新闻的知识,那么人类注释者可能 表现不佳。 我们试图通过使用投票方案来解决这个问题,该投票方案要求几个人同意关于其背景的评论是否是讽刺性的。

讽刺检测的基准

我们语料库的直接应用是用于训练和评估讽刺检测系统。 因此,我们使用第3节中描述的原始语料库来构建几个有用的基准,用于将语句分类为讽刺或非讽刺。 所有基准测试都提供了完整的会话线程,其中包括学习算法的目标语句以及注释元数据。 根据他们的规范,我们考虑一些无上下文的基线方法,仅依赖于简单特征的线性分类。 重现我们的结果的代码在https://github.com/NLPrinceton/SARC中提供。

评估任务

在最一般的情况下,我们使用提供的原始文件来构建系统的数据点以学习以下任务:给定一个帖子和一系列注释,确定对序列中最后一个注释的响应中的哪些注释是讽刺性的。 因此,每个数据点由一个会话线程和一系列响应和讽刺标签组成。 此任务的表现以平均精确度,召回率和F1分数来衡量。 在构建这个子类之前,我们首先考虑所有非完整句子而不是2到50个令牌之间的注释,以便在评估中提供更清晰的评论。 尽管响应仍然主要是非讽刺的,但是这里的讽刺评论的比例要大得多,因为每个数据点必须对应于至少发生一个讽刺注释的线程。 总共我们构建了844万个序列,其中讽刺反应的平均比例为28.1%。

平衡的标签

我们通过从评论序列的每组响应中仅采用一个讽刺和一个非讽刺的响应来构建平衡的学习任务。 然后,任务变为选择共享上下文的两个语句中的哪一个是讽刺性的,其中性能通过准确度来衡量。 虽然只有至少有一个讽刺反应的帖子是有用的,但它也会增加假阴性率,因为评论需要讽刺性反应时经常会得到其他讽刺性陈述,这些陈述内容与标记的讽刺回应相似,但本身可能没有标注。 因此,为了在选择非讽刺陈述时减少这个问题,我们使用常用爬行GloVe嵌入单词的归一化总和来强调所有陈述,并仅从那些与讽刺陈述具有相似性≤0.95的非讽刺陈述中挑选(Pennington et al., 2014)。

政治

检测讽刺的难度不仅取决于理解先前陈述的背景的需要,而且取决于理解所讨论主题的背景信息。 甚至人类也会挣扎于从不熟悉的主题中汲取的讽刺性评论,例如,晦涩的爱好或艺术形式。 因此,我们还在仅从政治子评级中提取的评论上测试人和机器的表现,这是一个所有评估者都有足够背景信息的主题。 该子样本包含17000个序列,讽刺响应的平均比例为23.2%

方法

对于平衡标签的情况,上述任务的简单,无背景基线方法是对两个响应进行特征化,并训练逻辑回归分类器以区分讽刺和非讽刺响应。类。 在测试集上,我们选择具有被标记为讽刺的概率最高的响应作为讽刺性的响应。 我们将我们测试的两个数据集分成80% - 20%在训练测试子集之间,并在表2中报告以下三种方法的结果。

Bag-of-n-Grams

Bag-of-n-Grams表示包括使用文档的n-gram计数作为向量中的要素。 我们测试了两种变体,Bag-of-Words和Bag-of-Bigrams。 对于包含所有subreddits的子样本,我们仅使用在训练评论中至少出现5次的那些特征。 我们考虑包括其他评论功能,例如评论长度和分数,但实证结果和这些特征的分布(见图3和图4)表明它们不是特别提供信息。 更复杂的特征化,例如(Wallace等,2014)提出的名词短语和特征交互指标,留待未来的工作。

句子嵌入

给定一个文档,采用其单词嵌入的元素总和提供了一个简单的低维文档表示。 这种构建单词序列特征的特定技术先前已经被研究并建立为多个受监督的NLP预测任务的强基线(Arora等,2017)。 我们使用在亚马逊产品语料库上训练的1600维GloVe表示,由于情感和讽刺之间的语义接近而使用它代替共同爬行(McAuley等,2015)。

手工

通过给5个人类评估者100个样本并要求他们执行与算法相同的任务来测量人类讽刺检测性能:确定两个陈述中的哪一个是讽刺性的。 我们提供了完整语料库5以及政治子评估6的评估链接。 提供了完整的背景,最终的人类分类器被视为所有5名评估员的多数投票。

随机

我们使用一个简单的基线,其中所有响应都以固定概率随机且独立地标记为讽刺。 选择该概率作为训练集中讽刺的响应的平均分数。

结果

基准线

表2中的基线表现相当好,并且比随机基线好得多,但它们都不匹配任何数据集上的人类表现。 机器学习方法有明显的改进空间,首先是使用提供的上下文来做出更好的讽刺决策。 如表2所示,Bag-of-Word和Bag-of-Bigram表示比句子嵌入表现更好; 但是,在未来的方法中结合上下文可能需要分布式表示。

手工

正如预期的那样,与基线方法相比,人类评估员在多数和平均水平上表现得更好。 注释者之间存在显着但不完美的一致性:在主要数据集上,Fleiss kappa评分(Fleiss,1971)为0.5,表明中等一致,而在政治子样本上则为0.67,表明达成了实质性协议。 有趣的是,虽然从所有次级数据中抽取的序列的平均人类表现平均比政治子样本更差,但在人类中获得多数投票导致前者的表现更好。 这种性能提升表明,虽然个人可能没有足够的上下文来讨论Reddit的所有讨论主题,但总体上有足够的信息可以做得很好,甚至超过政治等知名话题的表现。

结论

我们引入了一个基于自带注释的Reddit注释的大型讽刺数据集。 原始数据和评估子样本都是免费提供的,前者有超过100万个讽刺句子,比任何现有数据集都大。 我们评估简单机器学习方法的基线性能,并将其与人类表现进行比较。 我们希望该数据集的未来用户能够改进这些基准并找到利用我们提供的大量自注释信息的新方法。