基于Transfomrers的中文情感分析(附数据集和代码)

前言

由于目前在网络上没有找到合适的对应的中文情感的数据集,例如标注出正面以及负面的情绪,因此笔者通过网络等方式收集文本数据,并进行标注。数据集及源代码地址:

https://github.com/zhouxy2003/cn_sentiment_an.git

如果觉得对你有帮助,请给一个star⭐ 谢谢你的支持✅

1.数据集处理

对于transformers来说他看不到文字,因此我们应将我们的数据集转换为它能认识的形式

这是数据集的一部分格式样例,文件类型为csv

text	                            sentiment
请回放CCTV2的消费主张	                neutral
给我打开玩具房的灯	                    neutral
我真的不开心!	                    negative
你太棒了,周五带你去海洋馆玩	            positive
今天的天气阴沉沉的,让人感觉很压抑。	    negative
我觉得今天早上起床的时候就已经开始倒霉了。	negative

...

数据集由两列组成:text 和 sentiment , 分别代表话语和表达的情感

接下来我们通过 pandas 读取该表格数据,注意这里是通过gbk编码方式打开,因为笔者这里将csv的编码格式改为ANSI

df = pd.read_csv('test.csv',encoding='gbk')

然后我们需要将sentiment列转为以1,0,2形式表达,并将其作为新的列存入

#定义转换字典
target_map={
    'positive':1,
    'negative':0,
    'neutral':2
}

#将文件中的对应单词转换为数字 单独列出一列
df['target'] = df['sentiment'].map(target_map)

最后,我们将df数据中的text和target列单独列出来作为一个表格文件保存,方便后续处理

#将文本和标签提取出来  这里导出为新的csv文件 方便后续load_data
df2 = df[['text','target']]
df2.columns=['sentence','label']
df2.to_csv('data.csv',index=None)

data.csv就是接下来我们所会用到的用于训练的数据

2.加载数据集&配置训练参数

1.使用 datasets 的 load_data 加载我们的数据集

2.通过 train_test_split 将训练集划分为训练集和测试集

3.在代码中,我们定义了一个名为 tokenize_fn 的函数,用于对数据集中的句子进行标记化处理。这一步骤是为了将文本数据转换成模型可以理解的格式。

tokenizer = AutoTokenizer.from_pretrained('bert-base-chinese')

4.使用了 bert-base-chinese 预训练模型。我们还初始化了一个模型实例,并指定了情感分析任务的类别数量为 3

model = AutoModelForSequenceClassification.from_pretrained('bert-base-chinese', num_labels=3)

5.使用了 TrainingArguments 类来配置训练参数。在这个示例中,我们设置了输出目录、评估策略、保存策略、训练轮次以及每个设备上的批次大小等参数。

笔者测试过大概三轮左右 F1 就已经很高了

training_args = TrainingArguments(
    output_dir='training_dir',     #输出文件夹
    evaluation_strategy='epoch',
    save_strategy='epoch',
    num_train_epochs=3,            #训练轮次
    per_device_train_batch_size=16,
    per_device_eval_batch_size=64
)

6.定义了一个 compute_metrics 函数来计算模型的性能指标

3.训练&使用模型

最后,我们使用 Trainer 类来训练模型。我们将训练数据集和验证数据集传递给 Trainer,并指定了分词器和评估指标函数。模型训练完成后,我们将得到一个训练好的情感分析模型。

强烈建议在有GPU的设备进行训练,速度会比CPU快上很多

使用模型

在训练结束后我们会得到三个模型 我们其中得分最高的模型 checkpoint-669进行验证

使用 transforms 中的 pipeline 来加载我们本地模型

from transformers import pipeline
model = pipeline('text-classification',model='./train_dir/checkpoint-669')

我们试着输入几个句子,注意


target_map={
    'positive':1, --- 对应 label1
    'negative':0, --- 对应 label0
    'neutral':2   --- 对应 label2
}

输入样例1(消极情绪句子):

print(model('我真的无语'))

输出:
[{'label': 'LABEL_0', 'score': 0.9999120235443115}]

 输入样例2(积极情绪句子):

print(model('元气满满的一天'))

输出:
[{'label': 'LABEL_1', 'score': 0.9998520612716675}]

输入样例3 (中性情绪句子):

print(model('吃饭去了'))

输出:
[{'label': 'LABEL_2', 'score': 0.47615373134613037}]

关于基于transforms的中文情感分析到这里就介绍完啦,希望对你有所帮助,有任何疑问欢迎评论讨论!一起交流一起进步!

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值