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

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
情感分析中文数据集tsv是一种用于中文情感分析数据集文件格式。tsv是指以制表符作为字段分隔符的文本文件。 情感分析是指通过计算机技术来分析和识别文本中的情感倾向,即判断文本是积极的、消极的还是中性的。这在社交媒体分析、舆情监测、自然语言处理等领域广泛应用。 中文情感分析数据集tsv文件通常由两列组成,第一列是文本内容,第二列是对应文本的情感标签。情感标签通常用数字表示,例如0表示消极情感,1表示中性情感,2表示积极情感。 使用tsv格式的好处是它可以方便地使用一些数据处理工具进行处理和分析,如Python的pandas库。可以使用pandas的read_csv函数加载tsv文件,并指定分隔符为制表符,然后将其转换为pandas的数据框(dataframe)对象进行进一步处理和分析。 分析中文情感数据集的步骤包括数据加载、数据清洗、特征提取、模型训练和评估等。可以使用机器学习算法如朴素贝叶斯、支持向量机、深度学习模型如循环神经网络(RNN)或卷积神经网络(CNN)等进行训练和预测。 常见的中文情感分析数据集有Sina Weibo情感分析数据集、大连理工大学中文情感分析数据集等。这些数据集经过标注,可以用于训练和评估情感分析模型的性能。 总之,中文情感分析数据集tsv是一种用于存储和处理中文情感分析数据的文件格式,它可以方便地进行数据加载和分析,是进行中文情感分析研究的重要工具之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值