在使用PyTorch和Transformers構建中文NLP訓練框架之前,你需要確保已經安裝了以下庫:
PyTorch:可以通過官方網站或者命令行安裝。
Transformers:可以通過pip安裝??梢允褂靡韵旅钸M行安裝:
pip install transformers
接下來,我將為你提供一個基本的NLP訓練框架的代碼示例,以幫助你上手。
import torch
from transformers import BertTokenizer, BertForSequenceClassification, AdamW
# 加載預訓練模型和tokenizer
model_name = 'bert-base-chinese'
tokenizer = BertTokenizer.from_pretrained(model_name)
model = BertForSequenceClassification.from_pretrained(model_name, num_labels=2)
# 定義訓練數據
train_sentences = ['這是一個正樣本', '這是一個負樣本']
train_labels = [1, 0]
# 數據預處理
input_ids = []
attention_masks = []
for sent in train_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(train_labels)
# 定義訓練參數
batch_size = 16
epochs = 10
optimizer = AdamW(model.parameters(), lr=1e-5)
# 創建數據加載器
data = torch.utils.data.TensorDataset(input_ids, attention_masks, labels)
sampler = torch.utils.data.RandomSampler(data)
dataloader = torch.utils.data.DataLoader(data, sampler=sampler, batch_size=batch_size)
# 訓練模型
model.train()
for epoch in range(epochs):
total_loss = 0
for batch in dataloader:
optimizer.zero_grad()
batch_input_ids, batch_attention_masks, batch_labels = batch
outputs = model(batch_input_ids, attention_mask=batch_attention_masks, labels=batch_labels)
loss = outputs.loss
total_loss += loss.item()
loss.backward()
optimizer.step()
print(f'Epoch {epoch+1} Loss: {total_loss}')
# 保存模型
output_dir = './model/'
model.save_pretrained(output_dir)
tokenizer.save_pretrained(output_dir)
上述代碼的步驟概述如下:
導入所需的庫。
加載預訓練模型和tokenizer。
定義訓練數據。
進行數據預處理,包括tokenization和padding。
定義訓練參數,如batch size和epochs。
創建數據加載器。
訓練模型,通過計算loss進行反向傳播和參數更新。
保存訓練好的模型和tokenizer。
你可以根據自己的數據和需求對代碼進行修改和擴展。希望這個代碼示例能幫助你入門使用PyTorch和Transformers進行中文NLP訓練。