【发布时间】:2021-10-08 00:51:19
【问题描述】:
我正在尝试使用 HuggingFace 库来使用自定义数据集微调 T5 变压器模型。 HF 提供了fine-tuning with custom data 的示例,但这是针对 distilbert 模型,而不是我想使用的 T5 模型。从他们的示例中,它说我需要在我的数据集子类中实现 len 和 getitem 方法,但是似乎没有太多关于使用 t5 时要更改的文档迪尔伯特的。这是标记器代码,然后是我尝试更改 getitem
以及 trainer.train() 产生的错误,显示“KeyError: 'labels'”
我看到以下discussion 似乎与此问题有关,但提供的答案仍然会在 trainer.train() 中产生错误,如果有用我也可以发布。
使用“使用自定义数据微调”中的原始示例代码,那么数据集类是:
original code from hf distilbert example applied to T5
但随后培训师的错误发生了变化:
trainer error using hf distilbert example applied to T5
这就是最初让我四处寻找解决方案的原因。因此,当从说 distilbert 切换到像 T5 这样的文本到文本模型时,使用“使用自定义数据进行微调”似乎并不像更改模型和标记器(以及您正在训练的输入/输出数据)那么简单. distilbert 没有任何要训练的输出文本,所以我想(但我知道什么?)它会与 T5 不同,但我找不到关于如何训练的文档?在question 的底部似乎指向了一个要遵循的方向,但我再次不知道(很多!)
我想我可能已经解决了问题(至少培训师运行并完成)。 distilbert 模型没有输出文本,它具有作为整数列表提供给数据集类的标志。 T5 模型具有输出文本,因此您分配输出编码并依靠 DataCollatorForSeq2Seq() 来准备 T5 模型期望的数据/特征。请参阅下面带有注释掉 HF 代码(对于 distilbert)的更改(对于 T5):
Changes for T5 - commented out distilbert code
向 HuggingFace 提出了一个问题,他们建议他们网站上使用自定义数据集进行微调的示例已经过时,我需要解决他们维护的 examples。
【问题讨论】:
-
您的代码中的
model_checkpoint是什么? -
如果您可以使用自定义数据集对 distilbert 进行微调,您也可以对 T5 进行微调。只是模型和标记器会改变。
-
@kkgarg 感谢您的回复 :-) 我设置了 model_checkpoint = "t5-small"。
标签: python nlp huggingface-transformers huggingface-tokenizers