导读:
情感分析是自然语言处理的一个重要应用领域,可以用于分析舆情,预测股票金融走向等。情感分析(文本分类)技术一直是自然语言处理领域的研究重点,在各类竞赛(如Kaggle,天池等)中占据重要地位。这篇文章基于哈工大在SMP会议上发起的情绪分类技术评测EWECT比赛,对比赛任务,数据集和评估指标进行了详细说明,对各支队伍在情感分析的任务中的分析处理与建模过程进行了细致的总结,对于准备或正在参加竞赛的同学们非常有帮助!
01 赛事介绍
情绪分类技术评测EWECT是由哈工大在SMP会议上发起的比赛,吸引了189个队伍的报名参与,其中包含腾讯、小米、好未来、清华、中科院、复旦等机构。情感分析(文本分类)技术一直是自然语言处理领域的研究重点并在实际中有着非常广泛的应用,因此本次比赛也得到了较多的关注。本次比赛的官网是 http://39.97.118.137/ ,其中包括了详细的比赛描述以及验证集/测试集的排行榜。
2020年,新冠肺炎疫情成为了全国人民关注的焦点,众多用户针对此次疫情在新浪微博等社交媒体平台上发表自己的看法,蕴含了非常丰富的情感信息。NLP技术可以帮助政府了解网民对各个事件的态度,及时发现人民的情绪波动,从而更有针对性地制定政策方针,具有重要的社会价值。
本次评测任务中,参赛成员不仅需要分析普通微博中的情绪,还要专门针对疫情相关微博进行情绪分析。
1.1 评测内容
评测任务概述
本届微博情绪分类评测任务一共包含两个测试集:第一个为通用微博数据集,其中的微博是随机收集的包含各种话题的数据;第二个为疫情微博数据集,其中的微博数据均与本次疫情相关。
微博情绪分类任务旨在识别微博中蕴含的情绪,输入是一条微博,输出是该微博所蕴含的情绪类别。在本次评测中,我们将微博按照其蕴含的情绪分为以下六个类别之一:积极、愤怒、悲伤、恐惧、惊奇和无情绪。
两个数据集的各类情绪微博举例如下表所示:
情绪
|
通用微博数据集
|
疫情微博数据集
|
积极
|
哥,你猜猜看和喜欢的人一起做公益是什么感觉呢。我们的项目已经进入一个新阶段了,现在特别有成就感。加油加油。
|
愿大家平安、健康[心]#致敬疫情前线医护人员# 愿大家都健康平安
|
愤怒
|
每个月都有特别气愤的时候。,多少个瞬间想甩手不干了,杂七杂八,当我是什么。
|
整天歌颂医护人员伟大的自我牺牲精神,人家原本不用牺牲好吧!吃野味和隐瞒疫情的估计是同一波人,真的要死自己去死,别拉上无辜的人。
|
悲伤
|
回忆起老爸的点点滴滴,心痛...为什么.接受不了
|
救救武汉吧,受不了了泪奔,一群孩子穿上大人衣服学着救人 请官方不要瞒报谎报耽误病情,求求武汉zf了[泪][泪][泪][泪]
|
恐惧
|
明明是一篇言情小说,看完之后为什么会恐怖的睡不着呢,越想越害怕[吃驚]
|
对着这个症状,没病的都害怕[允悲][允悲]
|
惊奇
|
我竟然不知道kkw是丑女无敌里的那个
|
我特别震惊就是真的很多人上了厕所是不会洗手的。。。。
|
无情绪
|
我们做不到选择缘分,却可以珍惜缘分。
|
辟谣,盐水漱口没用。
|
数据集说明
本次技术评测使用的标注数据集由哈尔滨工业大学社会计算与信息检索研究中心提供,原始数据源于新浪微博,由微热点大数据研究院提供,数据集分为两部分。
第一部分为
通用微博数据集
,该数据集内的微博内容是随机获取到微博内容,不针对特定的话题,覆盖的范围较广。
第二部分为
疫情微博数据集
,该数据集内的微博内容是在疫情期间使用相关关键字筛选获得的疫情微博,其内容与新冠疫情相关。
因此,本次评测训练集包含上述两类数据:通用微博训练数据和疫情微博训练数据,相对应的,测试集也分为通用微博测试集和疫情微博测试集。参赛成员可以同时使用两种训练数据集来训练模型。
每条微博被标注为以下六个类别之一:neutral(无情绪)、happy(积极)、angry(愤怒)、sad(悲伤)、fear(恐惧)、surprise(惊奇)。
-
通用微博训练数据集包括27,768条微博,验证集包含2,000条微博,测试数据集包含5,000条微博。
-
疫情微博训练数据集包括8,606条微博,验证集包含2,000条微博,测试数据集包含3,000条微博。
注意:实际发布的测试集中会包含混淆数据,混淆数据不作为测点,在最终结果评测时会预先去除。
训练数据集以xlsx格式发布,包含三列:数据编号,文本,情绪标签。示例如下:
数据编号
|
文本
|
情绪标签
|
1
|
每个月都有特别气愤的时候。,多少个瞬间想甩手不干了,杂七杂八,当我是什么。
|
angry
|
测试数据集以xlsx格式发布,包含两列:数据编号,文本。示例如下:
数据编号
|
文本
|
1
|
#全国已确诊新型肺炎病例319例#中国加油!一定会过去的,相信医生,相信国家,相信医护人员!!! ??
|
1.2 评价指标
本次评测以宏平均F1值作为评测指标,最终,我们会对通用微博测试集的测试结果和疫情微博的测试结果进行平均,作为最终的测试结果,即:
02 赛后分享
2.1 Tencent
我们从网上收集了大量的开源中文预训练模型。这些预训练模型来自于CLUE(https://github.com/CLUEbenchmark/CLUEPretrainedModels)、哈工大讯飞(https://github.com/ymcui/Chinese-BERT-wwm)、追一科技 (https://github.com/ZhuiyiTechnology/pretrained-models)、华为(https://github.com/huawei-noah/Pretrained-Language-Model),腾讯(https://github.com/dbiir/UER-py)等。我们可以直接使用这些预训练模型,也可以在上面进行增量的预训练。
数据分析
首先分析文本的长度,如图所示,大部分数据长度在 200 字符以内,95%的样本长度在 128 字符以内,99%的样本长度在 192 字符,其中有少量的样本长度达到 1000 以上,我们对多余部分使用截断处理。
数据分为 6 个类别,如图 2、图 4 所示,其中 natural、angry、happy 占数据 的主要部分(分别占 usual 70.1%,virus 83.8%),由于评估指标使用的是 macro F1,准确区分数据量少的类将是提升得分的关键。
数据预处理
原始数据中带有大量的标记,对分析文本的情感倾向没有帮助(例如用户 ID, 转发标记、URL 等),我们利用正则表达式过滤了以上标记,并且将 emoji 表情 翻译成中文释义。例如:
在后续的训练中,我们同时使用了经过预处理和不经过预处理的数据作为模 型输入。
预训练
我们使用的外部语料有:网络上收集的 4000 万条微博语料、OpenKG疫情相关知识图谱中提取的语料、爬取的疫情相关微博以及从开放数据集中提 取的情感相关语料,结合这些语料和动态遮罩、区域遮罩、数据选择(使用统计信息、关键词和分类器来选择数据)等训练 策略得到增量训练模型。
数据增强
-
通过对样本进行随机删除、随机调换单词位置、同义词替换来扩充数据集;
-
利用 BERT 模型的掩码语言模型特性,依次单独 mask 句子中的每个 token可能的候选字,生成了一个增强样本。
-
模型介绍
腾讯队伍的比赛代码是基于UER-py预训练框架的(https://github.com/dbiir/UER-py)。UER支持各种不同的预训练模型(编码器和预训练目标的任意组合)以及丰富的下游微调策略,并提供了大量的预训练好的中文预训练权重以及模型集成的代码。用户可以通过随机组合预训练权重、预训练策略和微调策略、快速的得到一系列的高质量的分类模型并对其进行集成。比如随机选择某一个开源的预训练权重、然后随机使用某一个或者多个预训练策略进行增量预训练,然后随机使用某一个或者多个策略进行微调。UER能帮助用户在比赛中以较少的人工成本,快速的得到有竞争力的结果。
我们训练了数百个分类模型,得到了超过 3000 亿(1TB)参数的系统。由于我们的技术主要围绕着 BERT展开,因此我们把这个系统叫做 BERT forest。据我们所知,目前很少有工作会针对一个具体的任务,使用超过千亿级 别参数量。我们的实验证明了在已有的工作上持续的增加参数量,仍然能取得可观的收益。
我们使用了大量中文预训练模型,通过不同的训练策略进行微调,从而得到 大量的具有低偏差-高方差的基础模型特征,并在这些特征上进行 stacking。我们从 model zoo 中选取模型进行微调和增量训练,此外还使用了 LSTM、 GPT、Gated CNN等模型,基于这些模型,随机组合了使用的数据集、文本 长度、损失函数、对抗训练等训练策略,为 usual 和 virus 分别提取超过 300 个 基模型特征用于 stacking 融合学习。
模型融合
我们的框架使用 4 层模型,3 次融合的方案,在第一层使用大量预训练模型 作为基模型特征,第二层使用 LightGBM 作为次模型特征,第三层使用 Linear Regression 之后平均作为最终结果。其步骤为
-
基模型
:对训练集进行 k 折训练。由于比赛采 用 AB 测试集,需要保留训练的 checkpoint 用来预测 B 测试集,因此只保留 30%的模型 checkpoint 用于平均作 为测试集结果。
-
LightGBM 次模型
:使用 LightGBM 进行第一次融合,将基模型特征通过 有放回抽样分为 5 组,每组以 Stacking 步骤单独训练一个 LightGBM 模型作为第 二层特征,LightGBM 通过贝叶斯优化确定超参数。
-
Linear Regression 次模型
:利用线性回归模型对 LightGBM 模型进行第二 次融合,使用十折每次取 90%的数据用于训练,留出 10%数据用于验证,最后 提交的结果是对验证集/测试集预测的平均结果。
-
Averaging
:对十折线性回归模型的结果平均作为最终结果。
2.2 清博大数据
了解决不同数据集上的分类问题,考虑到数据集的分类标准差异,所以针 对不同的数据,本组分开训练了两个模型。除了数据上的差异,两个模型的结构 上并没有太大差异,主要差异体现在训练过程和参数调整上。两个模型都采用了 三个相同的预训练模型,分别是 Roberta、XLNet、XLM-Roberta,构建了六个 fineturn 结构相同的模型,调参和调整模型输入来获得最好的单模型效果。
预训练模型
本组采用了疫情期间网民情绪文本 (https://www.datafountain.cn/competitions/423),共 1820606 条,对 Roberta 模型进行了动态掩码(dynamic Masking)任务的训练。得到了针对疫情 数据的预训练模型。用我们训练的有针对性的预训练模型在不改变任何参数的情 况下,疫情数据验证集的结果有一定提升。
迁移学习
两个数据集合在标签上有一致性,对于通用的情感词例如‘哈哈哈’,无论在 那个数据集中,都更倾向于分类到 happy 标签,基于这样的客观事实,我们可以 在训练好的适用范围更广的通用模型的基础上,加入疫情标注数据对模型进行适 应性训练,相比于在不足一万的疫情数据集上训练得到的模型,这种方式大大增 加了模型的泛化能力。
数据增强
本组采用的数据增强的方式类似同义词替换的思路,只是获取同义词的方式不同 于以往的词典或者 Word2vec 模型的方式,而是采用 BERT 模型对文本中的 Token 随机进行遮挡预测,并选取可能性最大的两个预测结果 替换原文中的 Token,最终从一个文本中获得多个生成文本,并控制总体的数据 比例,减少数据不均衡带来的影响。
但从实验结果来看,这样的技巧没有为我们 带来提升,分析增强的数据可以看到,BERT 预测出来的字不是很符号语言规律, 融合在原文本中使原来的句子变得晦涩难懂。
2.3 拿第一导师请吃肯德基
本文模型结构主要对 RoBERTa 以及 BERT 模型进行改进,使用迁移学习将通 用微博中获取的信息迁移到疫情微博中,将多个模型利用 Stacking 进行集成, 在疫情微博上取得了较好的结果。
通用微博模型
本文在 RoBERTa 以及 BERT 模型基础上进行改造,构建大量模型架构,最终 根据实验效果,选取了其中部分模型架构,预训练权重选择 robert-wwm-ext-large 以及 bert-wwm-ext,下面对这几种模型架构简要介绍。