Transformer 学习之路 - 因果语言模型训练实例
Transformer 学习之路 - 因果语言模型训练实例
在自然语言处理(NLP)领域,因果语言模型(Causal Language Model)和自回归模型(Autoregressive Model)是生成任务中的核心概念。它们通过利用已生成的内容来预测下一个单词,从而实现连贯的文本输出。本文将深入解析因果语言模型的技术原理,并结合代码示例,带你一步步实现一个完整的训练流程。
什么是因果语言模型?
因果模型关注的是因果关系,旨在理解一个变量对另一个变量的影响。在 NLP 中,因果语言模型通常指的是模型如何根据先前的输入生成后续的输出。换句话说,模型在生成每个单词时,只依赖于之前生成的单词,而不考虑后续单词。
自回归模型的工作原理
自回归模型是一种生成模型,其中每个输出单词(或 token)的生成依赖于前面生成的单词。这种模型的核心特点是顺序生成,即生成当前单词时只考虑过去的单词。这种结构确保了生成过程的因果性。
例如,生成句子 "今天天气不错,我想去公园。" 的过程如下:
- 初始输入:
"今天天气" - 模型生成下一个单词:
"不错" - 当前输入变为:
"今天天气不错" - 模型再次生成下一个单词:
"我想去公园。"
在这个过程中,模型在生成每个单词时只依赖于之前生成的单词,这体现了因果性和自回归性。
结合因果与自回归
因果自回归模型是一种强大的文本生成工具,广泛应用于对话生成、故事创作等任务。最著名的因果自回归模型是 GPT(Generative Pre-trained Transformer)系列。GPT 模型使用自回归机制生成文本,在输入序列中,模型根据之前的单词生成下一个单词,直到达到指定的长度或遇到结束标记。
代码实现:训练一个因果语言模型
接下来,我们将通过代码示例,详细讲解如何训练一个因果语言模型。
Step 1: 导入相关包
from datasets import Dataset
from transformers import AutoModelForCausalLM, AutoTokenizer, DataCollatorForLanguageModeling, Trainer, TrainingArguments
Step 2: 加载数据集
ds = Dataset.load_from_disk("/content/drive/MyDrive/ai-learning/2.NLP Task/07-language_model/wiki_cn_filtered/")
Step 3: 数据预处理
tokenizer = AutoTokenizer.from_pretrained("Langboat/bloom-389m-zh")
def process_func(examples):
contents = [e + tokenizer.eos_token for e in examples["completion"]]
return tokenizer(contents, max_length=384, truncation=True)
tokenized_ds = ds.map(process_func, batched=True, remove_columns=ds.column_names)
Step 4: 创建数据加载器
from torch.utils.data import DataLoader
dl = DataLoader(tokenized_ds, batch_size=2, collate_fn=DataCollatorForLanguageModeling(tokenizer, mlm=False))
Step 5: 创建模型
model = AutoModelForCausalLM.from_pretrained("Langboat/bloom-389m-zh")
Step 6: 配置训练参数
import os
os.environ["WANDB_DISABLED"] = "true"
args = TrainingArguments(
per_device_train_batch_size=2,
gradient_accumulation_steps=16,
logging_steps=10,
num_train_epochs=1,
fp16=True,
output_dir="./output"
)
Step 7: 创建 Trainer
trainer = Trainer(
args=args,
model=model,
tokenizer=tokenizer,
train_dataset=tokenized_ds,
data_collator=DataCollatorForLanguageModeling(tokenizer, mlm=False)
)
Step 8: 训练模型
for param in model.parameters():
if not param.is_contiguous():
param.data = param.contiguous()
trainer.train()
Step 9: 评估模型
from transformers import pipeline
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, device=0)
pipe("西安交通大学博物馆(Xi'an Jiaotong University Museum)是一座位于西安", max_length=128, do_sample=True)
Step 10: 保存模型
model_save_path = "/content/drive/MyDrive/ai-learning/2.NLP Task/07-language_model/causal_lm"
tokenizer.save_pretrained(model_save_path)
model.save_pretrained(model_save_path)
总结
因果自回归模型通过利用已生成的内容来预测下一个单词,实现连贯的文本输出。本文详细解析了其技术原理,并结合代码示例,展示了如何训练一个因果语言模型。希望这篇文章能帮助你更好地理解 Transformer 技术,并将其应用到实际项目中。