训练你自己的自然语言处理深度学习模型,Bert预训练模型下游任务训练:情感二分类

简介: 训练你自己的自然语言处理深度学习模型,Bert预训练模型下游任务训练:情感二分类

基础介绍:

Bert模型是一个通用backbone,可以简单理解为一个句子的特征提取工具

更直观来看:我们的自然语言是用各种文字表示的,经过编码器,以及特征提取就可以变为计算机能理解的语言了

下游任务:

提取特征后,我们便可以自定义其他自然语言处理任务了,以下是一个简单的示例(效果可能不好,但算是一个基本流程)

数据格式:

模型训练:

我们来训练处理句子情感分类的模型,代码如下

import torch
from tqdm import tqdm  # 进度条库
from transformers import AdamW  # 优化器
import pandas as pd  # 文件读取
from transformers import BertTokenizer, BertModel  # 导入分词器和模型
# 导入数据
data = pd.read_csv("data/data.csv")
# 定义编码器
token = BertTokenizer.from_pretrained("bert-base-chinese")
# 加载预训练模型
pretrained = BertModel.from_pretrained("bert-base-chinese")
# 创建编码集
encode = []
# 编码句子
for i in tqdm(data["sentence"]):
    out = token.batch_encode_plus(
        batch_text_or_text_pairs=[i],
        truncation=True,
        padding='max_length',
        max_length=17,
        return_tensors='pt',
        return_length=True
    )
    encode.append(out)
# 定义模型
class MODEL(torch.nn.Module):
    def __init__(self):
        super().__init__()  # 确保调用父类构造函数
        self.linear1 = torch.nn.Linear(768, 2)
    def forward(self, input_ids, attention_mask, token_type_ids):
        result = pretrained(input_ids=input_ids, attention_mask=attention_mask, token_type_ids=token_type_ids)
        result = self.linear1(result.last_hidden_state[:, 0])
        result = result.softmax(dim=1)
        return result
# 创建模型对象
model = MODEL()
# 定义优化器
optimizer = AdamW(model.parameters(), lr=5e-4)
# 定义损失函数
criterion = torch.nn.CrossEntropyLoss()
# 模型训练
for i in range(len(encode)):
    out = model(encode[i]["input_ids"], encode[i]["attention_mask"], encode[i]["token_type_ids"])
    loss = criterion(out, torch.LongTensor([data["label"][i]]))
    loss.backward()
    optimizer.step()
    optimizer.zero_grad()
# 模型权重保存
torch.save(model.state_dict(), 'model1_weights.pth')

运行后得到了训练后的模型权重文件

模型使用:

可用以下代码进行判断句子情感

import torch
from transformers import BertTokenizer, BertModel
token = BertTokenizer.from_pretrained('bert-base-chinese')
pretrained = BertModel.from_pretrained('bert-base-chinese')
# 定义模型
class Model(torch.nn.Module):
    def __init__(self):
        super().__init__()
        self.fc = torch.nn.Linear(768, 2)
    def forward(self, input_ids, attention_mask, token_type_ids):
        out = pretrained(
            input_ids=input_ids,
            attention_mask=attention_mask,
            token_type_ids=token_type_ids
        )
        out = self.fc(out.last_hidden_state[:, 0])
        out = out.softmax(dim=1)
        return out
model = Model()
# 加载训练好的模型权重
model.load_state_dict(torch.load('model1_weights.pth'))
sentence = ["衣服一点也不好,差评"]
# 编码
o = token.batch_encode_plus(
        batch_text_or_text_pairs=sentence,
        truncation=True,
        padding='max_length',
        max_length=17,
        return_tensors='pt'
    )
out = model(o['input_ids'], o['attention_mask'], o['token_type_ids'])
if out[0][0] > out[0][1]:
    print("好评")
else:
    print("差评")


相关文章
|
机器学习/深度学习 编解码 人工智能
人脸表情[七种表情]数据集(15500张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
本数据集包含15,500张已划分、已标注的人脸表情图像,覆盖惊讶、恐惧、厌恶、高兴、悲伤、愤怒和中性七类表情,适用于YOLO系列等深度学习模型的分类与检测任务。数据集结构清晰,分为训练集与测试集,支持多种标注格式转换,适用于人机交互、心理健康、驾驶监测等多个领域。
|
9月前
|
机器学习/深度学习 人工智能 监控
河道塑料瓶识别标准数据集 | 科研与项目必备(图片已划分、已标注)| 适用于YOLO系列深度学习分类检测任务【数据集分享】
随着城市化进程加快和塑料制品使用量增加,河道中的塑料垃圾问题日益严重。塑料瓶作为河道漂浮垃圾的主要类型,不仅破坏水体景观,还威胁水生生态系统的健康。传统的人工巡查方式效率低、成本高,难以满足实时监控与治理的需求。
|
9月前
|
机器学习/深度学习 传感器 人工智能
火灾火焰识别数据集(2200张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
在人工智能和计算机视觉的快速发展中,火灾检测与火焰识别逐渐成为智慧城市、公共安全和智能监控的重要研究方向。一个高质量的数据集往往是推动相关研究的核心基础。本文将详细介绍一个火灾火焰识别数据集,该数据集共包含 2200 张图片,并已按照 训练集(train)、验证集(val)、测试集(test) 划分,同时配有对应的标注文件,方便研究者快速上手模型训练与评估。
3144 10
火灾火焰识别数据集(2200张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
|
9月前
|
机器学习/深度学习 人工智能 监控
坐姿标准好坏姿态数据集(图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
坐姿标准好坏姿态数据集的发布,填补了计算机视觉领域在“细分健康行为识别”上的空白。它不仅具有研究价值,更在实际应用层面具备广阔前景。从青少年的健康教育,到办公室的智能提醒,再到驾驶员的安全监控和康复训练,本数据集都能发挥巨大的作用。
坐姿标准好坏姿态数据集(图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
|
9月前
|
机器学习/深度学习 编解码 人工智能
102类农业害虫数据集(20000张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
在现代农业发展中,病虫害监测与防治 始终是保障粮食安全和提高农作物产量的关键环节。传统的害虫识别主要依赖人工观察与统计,不仅效率低下,而且容易受到主观经验、环境条件等因素的影响,导致识别准确率不足。
|
8月前
|
机器学习/深度学习 数据采集 编解码
基于深度学习分类的时相关MIMO信道的递归CSI量化(Matlab代码实现)
基于深度学习分类的时相关MIMO信道的递归CSI量化(Matlab代码实现)
364 1
|
7月前
|
机器学习/深度学习 数据采集 人工智能
35_BERT与RoBERTa:优化编码器模型
2018年,Google发布的BERT(Bidirectional Encoder Representations from Transformers)模型彻底改变了自然语言处理领域的格局。作为第一个真正意义上的双向预训练语言模型,BERT通过创新的掩码语言模型(Masked Language Model, MLM)预训练策略,使模型能够同时从左右两侧的上下文信息中学习语言表示,从而在多项NLP任务上取得了突破性进展。
689 0
|
9月前
|
机器学习/深度学习 自动驾驶 算法
道路表面缺陷数据集(裂缝/井盖/坑洼)(6000张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
随着城市化与交通运输业的快速发展,道路基础设施的健康状况直接关系到出行安全与城市运行效率。长期高强度的使用、气候变化以及施工质量差异,都会导致道路表面出现裂缝、坑洼、井盖下沉及修补不良等缺陷。这些问题不仅影响驾驶舒适度,还可能引发交通事故,增加道路养护成本。
道路表面缺陷数据集(裂缝/井盖/坑洼)(6000张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
|
11月前
|
存储 机器学习/深度学习 自然语言处理
避坑指南:PAI-DLC分布式训练BERT模型的3大性能优化策略
本文基于电商搜索场景下的BERT-Large模型训练优化实践,针对数据供给、通信效率与计算资源利用率三大瓶颈,提出异步IO流水线、梯度压缩+拓扑感知、算子融合+混合精度等策略。实测在128卡V100集群上训练速度提升3.2倍,GPU利用率提升至89.3%,训练成本降低70%。适用于大规模分布式深度学习任务的性能调优。
518 3