使用Transformers、torch微调 BERT模型

import torch
import torch.nn as nn
from torch.nn.utils.rnn import pad_sequence
from torch.utils.data import TensorDataset, DataLoader, RandomSampler, SequentialSampler
from sklearn.model_selection import train_test_split
from transformers import BertTokenizer, BertConfig
from transformers import AdamW, BertForSequenceClassification, get_linear_schedule_with_warmup
from tqdm import tqdm, trange
import pandas as pd
import io
import numpy as np
import matplotlib.pyplot as plt
# python == 3.8.6
# torch == 1.10.0+cu102
# transformers == 4.36.2
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
!nvidia-smi

在这里插入图片描述

# 数据集下载
#  https://nyu-mll.github.io/CoLA/
# 然后加载数据集
df = pd.read_csv(r'dataset/cola_public/raw/in_domain_train.tsv',encoding='utf-8',delimiter='\t',header=None,names=['sentence_source','label','label_notes','sentence'])
df.shape
#(8551,4)
# 随机展示10个样本
# 句子来源、标注(0:不可接受,1:可接受)、作者的标注、要分类的句子
df.sample(10)
# 创建句子、标注列表、添加[CLS]和[SEP]词元
sentences = df['sentence'].values
sentences = ["[CLS]" + sentence + "[SEP]" for sentence in sentences]
labels = df['label'].values
sentences
# 激活 BERT 词元分析嚣
# 模型自己去huggingface下载,并设置将大写字母转换为小写。
tokenizer = BertTokenizer.from_pretrained(r'model/bert-base-chinese',do_lower_case=True)
tokenized_texts =  [tokenizer.encode(sent, add_special_tokens=True) for sent in sentences]
print("Tokenize the first sentence:")
print(tokenized_texts[0])
MAX_LEN = 128
input_ids = torch.tensor([
    tokens + [tokenizer.pad_token_id] * (MAX_LEN - len(tokens)) if len(tokens) < MAX_LEN else tokens[:MAX_LEN]
    for tokens in tokenized_texts
])
# 检查填充后的输入形状
print("填充后的输入形状:", input_ids.shape)
print(input_ids)
# 接下来将防止模型对填充词元进行注意力计算。
attention_masks = []
for seq in input_ids:
    seq_mask = [float(i>0) for i in seq]
    attention_masks
参考资源链接:[Python LoRA大模型轻量级微调:实例演示与应用](https://wenku.csdn.net/doc/45e0ssv4tg?utm_source=wenku_answer2doc_content) 在自然语言处理领域,微调预训练的BERT模型是一个常见的实践,它能显著提升模型在特定任务上的表现。而LoRA(Low-Rank Adaptation)技术作为一种创新的微调方法,通过低秩分解和参数的精简更新,进一步减轻了计算负担,并且在不损失太多性能的前提下实现了模型的轻量化。 想要在Python中使用transformers库对BERT模型进行LoRA轻量级微调,首先要确保你已经安装了transformerstorch这两个库。接着,你可以按照以下步骤操作: 1. 导入必要的库和模块,包括`BertTokenizer`和`BertForSequenceClassification`,以及`Trainer`和`TrainingArguments`类用于训练模型。 2. 加载预训练的BERT模型和相应的分词器。例如,使用`bert-base-uncased`模型,这是一个基础版本的BERT模型,它包含了预训练好的参数。 3. 准备数据集。将你的文本数据进行预处理,包括编码、分割为训练集和验证集等。 4. 创建一个自定义的LoRA模块。在这个模块中,你需要实现LoRA的低秩分解策略,它将影响模型权重的更新方式。 5. 在训练前,定义训练参数,如学习率、批次大小、训练的总轮数和评估的频率等。使用`TrainingArguments`来设置这些参数。 6. 初始化`Trainer`,传入模型、训练参数、数据集以及评估指标等。 7. 使用`Trainer`的`train`方法开始训练过程,这将自动应用LoRA技术对模型进行微调。 8. 最后,使用验证集评估模型性能,确保模型在新的数据上具有良好的泛化能力。 整个过程中,你可以利用transformers库提供的强大功能,结合LoRA技术的轻量级调整策略,有效地提升BERT模型在文本分类任务上的性能。如果你希望深入理解LoRA技术的具体原理和实现细节,可以参考《Python LoRA大模型轻量级微调:实例演示与应用》这本书籍,它详细介绍了LoRA轻量级微调的理论基础和实践方法。通过结合这本书籍的指导和示例代码,你将能更好地掌握使用Python进行BERT模型微调的技巧。 参考资源链接:[Python LoRA大模型轻量级微调:实例演示与应用](https://wenku.csdn.net/doc/45e0ssv4tg?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值