1. 问题描述
题目来自于DataFountain上的“疫情期间网民情绪识别”的挑战赛,最终AUC达到了0.734,取得Top5%的成绩。主要内容是分析疫情期间的用户微博极性(分为消极:-1、中性:0、积极:1三种)。本文主要是对数据进行一定分析并做一个以该数据为基础的bert实战记录。
2. 数据分析
2.1 数据来源
疫情期间网民情绪识别-DataFountain。
1. 训练集:包括微博id等7个列,数据量为10w行。
2. 测试集:除情感倾向为空外的6个列,数据量为1w行。
2.2 数据预处理
对训练集做了一些分析,首先是用户“情感倾向”,发现存在一些-1、0、1之外的其他噪声数据,并进行了消除。同时发现用户数据还具有一定的不平衡性,中性数据较多,如果判别标准是正确率的话,平衡影响并不大,但如果使用F1,就需要一定的trick作为修正,该赛题就是以F1作为评测标准的。
train_df['情感倾向'].value_counts().plot.bar()
plt.title('sentiment(target)')
# Text(0.5, 1.0, 'sentiment(target)')
用户情感变化与时间关系:在这里我们发现在40天左右(大约2月6日,这里将年月日改成了天数做分析)网民情绪最激烈。
最后对用户的文本做分析,判断文本长度,这对于后面bert使用的文本截断有很重要的参考作用;发现这里文本长度普遍小于150字。
sns.kdeplot(train_df['weibo_len'])
3. Bert简述与使用
尝试了SVM,TextCNN,LSTM以及最后的Bert,XLnet等,明显发现Bert等做情感分类的训练效果要更好。使用Bert模型做训练,实际是一种微调,因为Bert将任务分为了上游任务预训练(训练出一个中文或者英文模型),和下游任务微调,对训练出来的模型匹配自己的场景做微调,实际上,上游段一般不需要我们考虑,已经有很多优秀的公司做了中文的文库及Bert,Xlnet等模型的预训练。推荐两个预训练模型库:
Xlnet预训练模型
Bert及相关预训练模型
对于里面的模型,可以转存到Google Drive(Google Drive拥有比较丰富的GPU,例如P100,T4,P4等,且几乎完全免费)。对于模型使用,进入上述两个网站,点击下面图片的红框部分,就可以轻松上传到Google Drive中。
4. Bert训练过程
对于Bert等预训练模型,加载他们的模型库在github也有明确写道“依托于Huggingface-Transformers 2.2.2,可轻松调用以上模型”。所以想使用这些预