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

文章目录

  • T5
  • text2text 模型如何做 text classification?
  • 优化器和调度器(optimizer and scheduler)
  • 学习率设置
  • 完整训练代码
  • Reference

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-larget5-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

  • Paper

    1. Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer (T5)
    2. Adafactor: Adaptive Learning Rates with Sublinear Memory Cost (Adafactor)
  • Tricks

    1. T5 Finetuning Tips
    2. Do you train all layers when fine-tuning T5?
  • Code

    1. Hugging Face T5
    2. T5 - Multi Label Classification
    3. Classification: T5
    4. T5: classification using text2text?
    5. t5_fine-tuning (colab)
    6. [SHARED] T5 Q&A Training (short question) (PyTorch).ipynb (colab)

你可能感兴趣的:(自然语言处理NLP,文本分类,分类,深度学习,nlp,人工智能,自然语言处理)