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

### 基于Transformer架构的情感分析技术实现与应用 #### 变革性的Transformer模型概述 Transformer是一种新型神经网络结构,摒弃了传统的循环机制,完全依赖自注意力(self-attention)机制来处理序列数据。这种设计使得模型能够在并行计算环境中高效运行,并且更好地捕捉长距离依赖关系[^2]。 #### 应用场景描述 在实际应用中,情感分析可以帮助企业研究者理解公众意见社会动态。具体来说,在电商平台上,通过对用户评论的情绪倾向进行评估,可以有效监测产品口碑;金融市场上,则能用于预测市场走势或识别潜在风险因素[^4]。 #### 技术细节解析 为了构建一个基于Transformer情感分类器,通常会采用如下几个关键步骤: 1. **预处理阶段** 对原始文本数据执行清洗、分词等操作,将其转换成适合输入给定框架的形式。 2. **特征提取层** 利用已有的大型语料库训练好的BERT或其他变体形式的Transformer作为基础编码器,自动获取句子级别的表示向量。 3. **分类头搭建** 在上述得到的固定长度表征之上加一层或多层全连接层构成最终决策单元,负责输出各类别概率分布情况。 4. **损失函数定义** 使用交叉熵等标准监督学习目标指导整个系统的参数调整过程直至收敛为止。 5. **微调策略实施** 针对自己特定领域内的标注样本集合进一步优化权重配置,提高泛化能力的同时保持较高准确性水平。 ```python from transformers import BertTokenizer, BertForSequenceClassification import torch tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2) inputs = tokenizer("I love this product!", return_tensors="pt") labels = torch.tensor([1]).unsqueeze(0) # Assuming positive sentiment is labeled as '1' outputs = model(**inputs, labels=labels) loss = outputs.loss logits = outputs.logits ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值