随着网络新闻服务的飞速发展,网络上产生了大量的新闻文本信息,探索新闻文本背后的情绪表达,可以为政府和企业提供潜在价值。本题给定互联网新闻文本标题及新闻文本内容,要求判断新闻的情感极性(包括正面极性,中性极性和负面极性),是自然语言处理领域的典型分类任务。针对该任务,本文采用了RoBERTa模型,并改造了多个上层模型并通过投票融合的方式取得了较好的结果。在CCF BDCI的新闻情感分析的评测任务上,该方法在最终的B榜评测数据上,F1分值达到了0.81697最高分。
赛题描述
本赛题是对互联网新闻长文本进行情感极性分类,其中正面情绪对应0,中性情绪对应1,负面情绪对应2。而评分指标采用Macro-F1值,具体如下:
其中,TP是真样例,FP是假阳例,FN是假阴例,通过以上公式得到该类F1值,将每一类F1值求平均,即得到Macro-F1值。
数据分析
本赛题的原始特征是新闻的标题和新闻的内容。因此我们对新闻标题和新闻内容进行简单统计分析。图1中前三个个小图分别是关于新闻标题,新闻内容以及新闻总长度的字数分布情况。可以观察到,大部分的新闻长度都集中在0到5000之间。
图1:对数据集的简单统计分析
此外,我们还对训练数据集的新闻情感极性类别进行统计,如图1中第四小图所示,发现三个类别的分布并不是特别均匀,特别是0类即正面情绪样本仅占10.4%,需要在后续的方案中考虑这一因素。
本文项目代码 获取
关注微信公众号 datanlp ,然后回复关键词 情感分析 即可获取。
模型结构
基于RoBERTa模型[1],进行上层结构改造,具体包括如下方法:
1.模型分为两部分,可以看做下层是n个RoBERTa模型(参数共享),把新闻文本分成n段后分别输入,上层使用双向GRU来连接n个RoBERTa的pooler_output输出,最后进行分类。这样可以解决用RoBERTa处理长文本的问题。见图2模型结构1。
图2:基于RoBERTa模型的五种结构
2.提取bert模型内部隐藏层第一状态位输出。
通过提取最后2层或最后3层的第一个状态输出向量,与原先的bert模型pooler_output拼接,最后进行分类。见图2模型结构2,3,4。
3.利用bert模型最后一个隐含层所有状态位信息。
这些状态信息可以连接更深层的网络模型,如双向LSTM[3]、双向GRU[4]。通过更深层的网络模型提取文本的更高维度特征,然后通过提取隐含层状态、平均池化、最大池化等操作聚合双向GRU输出和隐含层状态特征,最后拼接bert模型的pooler_output进行分类。见图2模型结构5。
模型参数与融合细节
比赛中,我们尝试了多种bert预训练模型[2],其中准确率最高的是RoBERTa-wwm-ext-large[5],但其显存占用也较多。以bert_gru为例,为节省显存,finetune时单GPU的batch 大小参数即per_gpu_train_batch_size设为4,gradient_accumulation_steps设为4,这样每次输入1个样本,梯度累计4次后,再进行反向传播更新参数,以牺牲一定训练速度来节省显存;参数learning_rate设为1e-5,采用三角学习率,首先warm_up,学习率逐渐变大,再linear lr decay,学习率逐渐变小,有效改善训练效果。
对于每个模型,我们采用了分层抽样5折交叉验证,分层抽样保证了每折数据集中的各类别样本比例保持不变,每折选择验证集上F1值最高的模型对测试集进行预测,最后5折融合采用概率平均。不同模型融合采用简单投票,得票数最多的类别为最终预测结果。
实验结果与分析
以上模型均为分层5折交叉验证后的结果,数据列中“头512”指的是截取新闻头部512个字符训练和预测;“头256+尾256”是截取头部256个字符和尾部256个字符分别输入BERT, 然后在上层使用双向GRU连接;伪标签是将预测结果加入训练集,在训练过程中引入测试集分布,从而提高模型性能,我们选择每折加入10%的测试集;数据清洗中,一个是将url、html等无关信息去除,另一个是规范标点符号,新闻中很多标点符号本应该为中文标点符号,却写成了英文标点符号,我们进行了改正。
从结果可以看出,“头256+尾256”比“头512”的效果更好,可能头尾包含的情感信息比头部要更多。我们采用的数据清洗方法反而会使效果变差,伪标签的加入能有效提高单模分数。