抱抱脸(hugging face)教程-中文翻译-翻译任务(translating)

Translation


翻译将文本序列从一种语言转换为另一种语言。这是可以作为序列到序列问题来规划的几个任务之一,序列到序列问题是一个扩展到视觉和音频任务的强大框架。

本指南将向您展示如何在 OPUS Books 数据集的英语-法语子集上微调 T5,以便将英语文本翻译成法语。

有关其关联模型、数据集和指标的更多信息,请参见翻译任务页

加载 OPUS 图书数据集

从 Datasets 库加载 OPUS Books 数据集:

from datasets import load_dataset

books = load_dataset("opus_books", "en-fr")

将这个数据集分割成一列火车和测试集:

books = books["train"].train_test_split(test_size=0.2)

然后看一个例子:

books["train"][0]
{'id': '90560',
 'translation': {'en': 'But this lofty plateau measured only a few fathoms, and soon we reentered Our Element.',
  'fr': 'Mais ce plateau élevé ne mesurait que quelques toises, et bientôt nous fûmes rentrés dans notre élément.'}}

翻译领域是包含文本的英语和法语翻译的字典。

预处理

加载 T5标记器来处理语言对:

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("t5-small")

预处理功能需要:

  1. 以提示符作为输入的前缀,这样 T5就知道这是一个翻译任务。一些能够执行多个 NLP 任务的模型需要对特定任务进行提示。
  2. 分别对输入(英语)和目标(法语)进行标记。你不能用英语词汇预先训练好的标记器来标记法语文本。上下文管理器将帮助首先将标记器设置为法语,然后再对其进行标记。
  3. 截断序列不要超过 max_length 参数设置的最大长度。
source_lang = "en"
target_lang = "fr"
prefix = "translate English to French: "


def preprocess_function(examples):
    inputs = [prefix + example[source_lang] for example in examples["translation"]]
    targets = [example[target_lang] for example in examples["translation"]]
    model_inputs = tokenizer(inputs, max_length=128, truncation=True)

    with tokenizer.as_target_tokenizer():
        labels = tokenizer(targets, max_length=128, truncation=True)

    model_inputs["labels"] = labels["input_ids"]
    return model_inputs

使用 Datasets 映射函数对整个数据集应用预处理函数。您可以通过设置 batching=True 来加速 map 函数,以便同时处理数据集中的多个元素:

>>> tokenized_books = books.map(preprocess_function, batched=True)

使用 DataCollatorForSeq2Seq 创建一批示例。它还将动态地将文本和标签填充到其批处理中最长元素的长度,因此它们是统一长度。虽然可以通过设置 padding=True 在 tokenizer 函数中填充文本,但是动态填充效率更高。

Pytorch

from transformers import DataCollatorForSeq2Seq

data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=model)

TensorFlow

>>> from transformers import DataCollatorForSeq2Seq

>>> data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=model, return_tensors="tf")

Train

Pytorch

使用 AutoModelForSeq2SeqLM 加载 T5:

>>> from transformers import AutoModelForSeq2SeqLM, Seq2SeqTrainingArguments, Seq2SeqTrainer

>>> model = AutoModelForSeq2SeqLM.from_pretrained("t5-small")

如果您不熟悉用 Trainer 对模型进行微调,请参阅这里的基本教程

目前,只剩下三个步骤:

  1. Seq2SeqTrainingArguments 中定义训练超参数。

  2. 将训练参数与模型、数据集、标记器和数据校对器一起传递给 Seq2SeqTrainer。

  3. 调用 train() 对模型进行微调。

>>> training_args = Seq2SeqTrainingArguments(
    output_dir="./results",
    evaluation_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=16,
    per_device_eval_batch_size=16,
    weight_decay=0.01,
    save_total_limit=3,
    num_train_epochs=1,
    fp16=True,
)

>>> trainer = Seq2SeqTrainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_books["train"],
    eval_dataset=tokenized_books["test"],
    tokenizer=tokenizer,
    data_collator=data_collator,
)

trainer.train()

TensorFlow

要在 TensorFlow 中微调模型,首先要将数据集转换为 tf.data。具有 to_tf_data 的数据集格式。在列中指定输入和标签,是否对数据集顺序、批量大小和数据排序器进行打乱:

>>> tf_train_set = tokenized_books["train"].to_tf_dataset(
    columns=["attention_mask", "input_ids", "labels"],
    shuffle=True,
    batch_size=16,
    collate_fn=data_collator,
)

>>> tf_test_set = tokenized_books["test"].to_tf_dataset(
    columns=["attention_mask", "input_ids", "labels"],
    shuffle=False,
    batch_size=16,
    collate_fn=data_collator,
)

如果您不熟悉使用 Kera 对模型进行微调,请在这里查看基本教程

建立一个优化器函数、学习速率进度表和一些训练超参数:

>>> from transformers import create_optimizer, AdamWeightDecay

>>> optimizer = AdamWeightDecay(learning_rate=2e-5, weight_decay_rate=0.01)

TFAutoModelForSeq2SeqLM 加载 T5:

>>> from transformers import TFAutoModelForSeq2SeqLM

>>> model = TFAutoModelForSeq2SeqLM.from_pretrained("t5-small")

通过编译配置培训模型:

>>> model.compile(optimizer=optimizer)

调用 fit 对模型进行微调:

>>> model.fit(x=tf_train_set, validation_data=tf_test_set, epochs=3)

有关如何调优翻译模型的更深入示例,请查看相应的 PyTorch 笔记本或 TensorFlow 笔记本。

原文链接

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值