我尝试了各种 HuggingFace 脚本来构建语言模型,例如
run_mlm.py
(
link
)、
run_clm.py
(
link
) 和
run_translation.py
(
link
) 。对于前两个脚本,它可以从头开始训练语言模型(即没有基本模型)。
但是,我无法使用
run_translation.py
从头开始构建模型,因为命令中需要模型名称或路径线。鉴于我有一个相当大的并行翻译数据集,如何从头开始构建翻译模型?
你说的对,Hugging Face 的
run_translation.py
脚本不像用于语言建模的脚本那样直接支持从头开始训练。它需要一个预训练的模型作为起点。
但是,你仍然可以使用 Hugging Face Transformers 库从头开始训练翻译模型,但这需要一些额外步骤:
1. 准备你的数据:
- 清理和预处理: 清理你的并行数据集,并将其预处理成适合训练的格式。这包括标记化、将句子转换为数字 ID 以及创建源语言和目标语言数据的对。
-
数据集类:
使用 Hugging Face 的
Dataset
类创建自定义数据集类来加载和处理你的数据。你可以在官方文档中找到更多信息: https://huggingface.co/docs/datasets/ -
数据加载器:
使用
DataLoader
类为你的训练和验证数据创建数据加载器。
2. 初始化模型:
- 选择模型架构: 从 Hugging Face Transformers 库中选择你想要的编码器-解码器模型架构。一些流行的选择包括 BART、T5 和 MarianMT。
- 从配置初始化: 不是从预训练的检查点加载模型,而是使用所选模型架构的配置对象从头开始初始化它。这将为你提供一个随机初始化的模型。
from transformers import AutoConfig, AutoModelForSeq2SeqLM
# 使用所需的配置
config = AutoConfig.from_pretrained("t5-small")
# 从配置初始化模型
model = AutoModelForSeq2SeqLM.from_config(config)
3. 设置训练参数:
- 优化器和调度器: 选择一个优化器(如 AdamW)和一个学习率调度器。
- 训练参数: 定义批大小、epoch 数量和其他相关训练参数。
4. 编写训练循环:
- 迭代 epoch: 创建一个在你的数据上迭代指定 epoch 数量的循环。
- 迭代批次: 在每个 epoch 内,迭代你的训练数据加载器。
- 前向传递: 对于每个批次,通过模型执行前向传递,计算损失。
- 反向传递: 计算相对于模型参数的损失梯度。
- 更新参数: 使用优化器更新模型参数。
- 评估: 在每个 epoch 结束时(或定期),在你的验证集上评估模型,以跟踪进度。
5. 保存你的模型:
- 保存检查点: 在训练后,保存你的模型检查点,以便你可以稍后加载和使用它进行翻译。
虽然这需要编写比使用
run_translation.py
脚本更多的代码,但它允许你从头开始完全控制训练过程和模型初始化。
请记住,从头开始训练翻译模型需要大量的计算资源和时间,尤其是在大型数据集上。考虑使用强大的 GPU 来加速训练过程。
标签:python,huggingface-transformers From: 78770014