bert微调代码
时间: 2023-07-03 13:20:11 浏览: 165
好的,你想了解BERT微调的代码,这是一个Python实现的BERT微调示例代码,使用PyTorch库:
```
import torch
from transformers import BertTokenizer, BertForSequenceClassification
from torch.utils.data import DataLoader, TensorDataset
# 加载预训练模型和tokenizer
model = BertForSequenceClassification.from_pretrained('bert-base-uncased')
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
# 定义数据集
sentences = ['This is an example.', 'Another example is this.']
labels = [1, 0]
# 将文本转换为Bert词汇表中的标记,并添加特殊标记
input_ids = []
attention_masks = []
for sent in sentences:
encoded_dict = tokenizer.encode_plus(sent, add_special_tokens=True, max_length=64, pad_to_max_length=True, return_attention_mask=True, return_tensors='pt')
input_ids.append(encoded_dict['input_ids'])
attention_masks.append(encoded_dict['attention_mask'])
input_ids = torch.cat(input_ids, dim=0)
attention_masks = torch.cat(attention_masks, dim=0)
labels = torch.tensor(labels)
# 定义训练集和数据加载器
dataset = TensorDataset(input_ids, attention_masks, labels)
dataloader = DataLoader(dataset, batch_size=32)
# 定义优化器和损失函数
optimizer = torch.optim.Adam(model.parameters(), lr=1e-5)
loss_fn = torch.nn.CrossEntropyLoss()
# 训练模型
for epoch in range(3):
for batch in dataloader:
input_ids_batch, attention_masks_batch, labels_batch = tuple(t.to(device) for t in batch)
optimizer.zero_grad()
outputs = model(input_ids_batch, token_type_ids=None, attention_mask=attention_masks_batch, labels=labels_batch)
loss = outputs[0]
loss.backward()
optimizer.step()
```
这段代码中,我们首先加载了预训练的BERT模型和tokenizer。然后,我们定义了一个小的数据集,包含两个样本和相应的标签。接下来,我们将文本转换为BERT词汇表中的标记,并添加特殊标记,以便将其输入BERT模型进行微调。我们还定义了一个数据加载器,以便在训练期间有效地加载数据。
接下来,我们定义了一个优化器和一个损失函数,用于训练模型。在训练期间,我们迭代数据加载器中的每个批次,并使用反向传播和优化器来更新模型的权重。在每个批次之后,我们计算损失并将其记录下来,以便我们可以在训练结束时评估模型的性能。
希望这个代码示例能够帮助你更好地理解BERT微调的实现!
阅读全文