0


使用 T5 模型来做文本分类任务的一些总结

文章目录

T5

paper:Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer
T5 本身是一个 Text-to-Text 模型,但其不仅仅能做传统的 text2text 任务 (如对话、QA、文本摘要等等),也能做文本分类这种任务,T5 基本可以用于所有的 NLP 任务,并且拥有很好的性能。

text2text 模型如何做 text classification?

简单来说输入就是文本句子,输出就是类别词(如

positive

,

negative

),当然,这可能有一个问题:模型生成的输出的单词如果不是类别词呢?但作者也在论文中说了,一个在相应数据集上训练过的 T5 模型如果在做文本分类时,模型的输出肯定是类别词,不会出现非类别词,如果模型输出是非类别词,那么很有可能就是模型训练不充分。

在训练时,以下代码即可,其中 labels 就是类别词的编码结果

outputs = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels)

推理的代码如下:

out = model.generate(input_ids=input_ids, attention_mask=attention_mask, max_length=2)

具体如何做推理的代码可以参考:T5: classification using text2text?

优化器和调度器(optimizer and scheduler)

作者在论文中写了在训练时使用的优化器是 Adafactor,Adafactor 是专门为 Transformer 类模型所设计的,相比于 Adam 占用更少的显存,能够有效减少训练时所需的显存。

paper: Adafactor: Adaptive Learning Rates with Sublinear Memory Cost

关于如何调用 Adafactor,可以参考 HuggingFace Adafactor:

可以通过以下示例使用:

Adafactor(model.parameters(), scale_parameter=False, relative_step=False, warmup_init=False, lr=1e-3)

有人发现下面这个设置更好:

Adafactor(model.parameters(), scale_parameter=True, relative_step=True, warmup_init=True, lr=None)

如果设置

lr=None

,那么最好调度器使用

AdafactorSchedule
from transformers.optimization import Adafactor, AdafactorSchedule

optimizer = Adafactor(model.parameters(), scale_parameter=True, relative_step=True, warmup_init=True, lr=None)
lr_scheduler = AdafactorSchedule(optimizer)

使用 Adafactor 可以大大减少训练所需的显存,尤其是对于

t5-large

t5-3b

这类参数量大的模型,如果数据量也比较大的话,训练时对 GPU 显存的要求比较高,对训练造成了一定困难。

当然也可以选择其他的优化器和调度器,比如

AdamW+线性衰减

等等,这个可选择的就比较多了,但正如上面所说的,Adam 类的优化器在训练时占用的显存比较多,需要足够大的显存来训练。

学习率设置

1e-4 和 3e-4 几乎适用于所有问题(classification, QA, que-gen, summ)

完整训练代码

https://github.com/friedrichor/NLP-HuggingFace-Tutorial/tree/main/text_classification/T5

Reference

  • Paper1. Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer (T5)2. Adafactor: Adaptive Learning Rates with Sublinear Memory Cost (Adafactor)
  • Tricks1. T5 Finetuning Tips2. Do you train all layers when fine-tuning T5?
  • Code1. Hugging Face T52. T5 - Multi Label Classification3. Classification: T54. T5: classification using text2text?5. t5_fine-tuning (colab)6. [SHARED] T5 Q&A Training (short question) (PyTorch).ipynb (colab)
标签: 分类 深度学习 nlp

本文转载自: https://blog.csdn.net/Friedrichor/article/details/129926790
版权归原作者 friedrichor 所有, 如有侵权,请联系我们删除。

“使用 T5 模型来做文本分类任务的一些总结”的评论:

还没有评论