基于Bert的中文情感分析代码及分析
众所周知,Google 前段时间开源了他们的 BERT – BidirectionalEncoderRepresentations fromTransformers 模型,使用多头注意力和位置嵌入,一举打破自然语言处理领域11个不同问题的最好记录。NLP界开启一个全新的时代,利用Bert做NLP的任务也是取得很好的效果,本文利用微调Bert模型做中文情感分析,实验效果也算不错。本文参考[博文链接]。(https://blog.csdn.net/renxingkai/article/details/87605693)
数据准备
中文语料库获取:Github别人分享的各种语料库,这里有很多不同的中文语料库。
当然也可以从别的地方获取语料库。本文主要是通过SMP2019评测比赛获取的数据集。情感类标签是0,1,2,数据如下:
Bert预训练
拥有了数据集之后,需要下载Bert模型,Bert模型下载
下载完之后在data文件夹里放入训练集,验证集和测试集数据。
在开源的代码中,预训练的入口是在run_pretraining.py而fine-tune的入口针对不同的任务分别在run_classifier.py和run_squad.py。其中run_classifier.py适用的任务为分类任务。如CoLA、MRPC、MultiNLI这些数据集。而run_squad.py适用的是阅读理解(MRC)任务,如squad2.0和squad1.1。本文是做情感分类任务,因此主要修改run_classifier.py里的一些代码。下载的代码要是想运行,需要安装Tensorflow和pandas,直接pip install 就行。
本实验中增加的Processor代码为:
如果读取文件格式为csv格式
class SentenceProcessor(DataProcessor):
"""Processor for the Sentiment Analysis task"""
#读取训练集
def get_train_examples(self, data_dir):
file_path = os.path.join(data_dir, 'train.csv')
train_df = pd.read_csv(file_path, encoding='utf-8')
train_data = []
for index, train in enumerate(train_df.values):
guid = 'train-%d' % index
text_a = tokenization.convert_to_unicode(str(train[0]))
# text_b = tokenization.convert_to_unicode(str(train[1]))
label = str(train[1])
train_data.append(InputExample(guid=guid, text_a=text_a, text_b=None, label=label))
return train_data
#读取验证集
def get_dev_examples(self, data_dir):
file_path = os.path.join(data_dir, 'dev.csv')
dev_df = pd.read_csv(file_path, encoding='utf-8')
dev_data = []
for index, dev