我想为翻译任务训练下面配置的编码器解码器模型。有人可以指导我如何为这样的模型设置训练管道吗?任何链接或代码片段将不胜感激。
from transformers import BertConfig, EncoderDecoderConfig, EncoderDecoderModel
# Initializing a BERT bert-base-uncased style configuration
config_encoder = BertConfig()
config_decoder = BertConfig()
config = EncoderDecoderConfig.from_encoder_decoder_configs(config_encoder, config_decoder)
# Initializing a Bert2Bert model from the bert-base-uncased style configurations
model = EncoderDecoderModel(config=config)
编码器-解码器模型的使用方式与《变形金刚》中的任何其他模型相同。它接受批标记化文本作为词汇索引(即,您需要一个适合序列到序列任务的标记器(。当你用输入(input_ids
(和期望的输出(decoder_input_ids
和labels
(馈送模型时,你将得到可以在训练期间优化的损失值。请注意,如果批处理中的句子具有不同的长度,则还需要进行屏蔽。这是EncoderDecoderModel
文档的最小示例:
from transformers import EncoderDecoderModel, BertTokenizer
import torch
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = EncoderDecoderModel.from_encoder_decoder_pretrained(
'bert-base-uncased', 'bert-base-uncased')
input_ids = torch.tensor(
tokenizer.encode("Hello, my dog is cute", add_special_tokens=True)).unsqueeze(0)
outputs = model(
input_ids=input_ids, decoder_input_ids=input_ids, labels=input_ids,
return_dict=True)
loss = outputs.loss
如果你不想自己编写训练循环,你可以使用Transformers的数据集处理(DataCollatorForSeq2Seq
(和训练(Seq2SeqTrainer
(实用程序。您可以在 GitHub 上遵循 Seq2Seq 示例。