准备工作
本教程需要Python 3.10+、PyTorch 2.0+、transformers库。
1. 数据准备
使用开源中文语料库,进行分词和构建词汇表。
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
2. 模型架构
实现一个简化的GPT模型,包含:
- 嵌入层(词嵌入+位置嵌入)
- 多头自注意力机制
- 前馈神经网络
- LayerNorm与残差连接
2.1 注意力机制
def scaled_dot_product_attention(Q, K, V, mask=None):
d_k = Q.size(-1)
scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(d_k)
if mask is not None:
scores = scores.masked_fill(mask == 0, -1e9)
attn_weights = F.softmax(scores, dim=-1)
output = torch.matmul(attn_weights, V)
return output
3. 训练
使用因果语言建模目标,预测下一个token。
- 学习率:3e-4
- 批量大小:16
- 训练轮数:10
4. 推理
实现文本生成函数,支持温度采样。
def generate(model, prompt, max_length=50):
model.eval()
input_ids = tokenizer.encode(prompt, return_tensors='pt')
with torch.no_grad():
for _ in range(max_length):
outputs = model(input_ids)
logits = outputs[:, -1, :]
probs = F.softmax(logits / temperature, dim=-1)
next_token = torch.multinomial(probs, num_samples=1)
input_ids = torch.cat([input_ids, next_token], dim=-1)
return tokenizer.decode(input_ids[0])
总结
通过本教程,你已掌握了用PyTorch实现GPT模型的基本流程。可以尝试扩展到更大的数据集和更深的模型。