Files
wehub-resource-sync 2aaeece67c
Pipelines-Test / Pipelines-Test (push) Waiting to run
Codestyle Check / Lint (push) Has been cancelled
Codestyle Check / Check bypass (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:37:14 +08:00
..

Big Bird

模型介绍

Big Bird(Transformers for Longer Sequences) 是 Google 的研究人员提出的针对长序列预训练模型,使用了稀疏注意力机制,将计算复杂度、空间复杂度降到线性复杂度,大大提升了长序列任务的预测能力。

本项目是 Big Bird 的 PaddlePaddle 实现, 包含模型训练,模型验证等内容。以下是本例的简要目录结构及说明:

.
├── args.py                 # 预训练任务的配置
├── run_classifier.py       # IMDB数据集的分类任务
├── run_pretrain.py         # 预训练任务脚本
├── README.md               # 文档
└── data/                    # 示例数据

快速开始

环境依赖

  • sentencepiece

安装命令:pip install sentencepiece

数据准备

根据论文中的信息,目前 Big Bird 的预训练数据是主要是由 BooksCC-NewsStories, Wikipedia 4种预训练数据来构造,用户可以根据自己的需要来下载和清洗相应的数据。目前已提供一份示例数据在 data 目录。

预训练任务

下面是预训练任务的具体的执行方式

unset CUDA_VISIBLE_DEVICES
python -m paddle.distributed.launch --gpus "0" --log_dir log  run_pretrain.py --model_name_or_path bigbird-base-uncased \
    --input_dir "./data" \
    --output_dir "output" \
    --batch_size 4 \
    --weight_decay 0.01 \
    --learning_rate 1e-5 \
    --max_steps 100000 \
    --save_steps 10000 \
    --logging_steps 1 \
    --max_encoder_length 512 \
    --max_pred_length 75

其中参数释义如下:

  • gpus paddle.distributed.launch 参数,用于指定使用哪张显卡。单卡格式:"0";多卡格式:"0,1,2"。
  • log_dir paddle.distributed.launch 参数,用于指定训练日志输出的目录,默认值为log。(注意,如果需要在同一目录多次启动 run_pretrain.py,需要设置不同的 log_dir,否则日志会重定向到相同的文件中)。
  • model_name_or_path 指示了某种特定配置的模型,对应有其预训练模型和预训练时使用的 tokenizer。目前支持的训练模型配置有:"bigbird-base-uncased"。若模型相关内容保存在本地,这里也可以提供相应目录地址,例如:"./checkpoint/model_xx/"
  • input_dir 指定输入文件,可以使用目录,指定目录时将包括目录中的所有文件。
  • output_dir 指定输出文件。
  • batch_size 训练的 batch 大小
  • weight_decay AdamW 权重衰减参数
  • learning_rate 训练的学习率
  • max_steps 最大训练步数
  • save_steps 保存模型间隔
  • logging_steps 打印日志的步数
  • max_encoder_length MLM 任务的最大的 token 数目
  • max_pred_length MLM 任务最大的需要预测 token 的数目

验证任务

Imdb 分类任务

通过预训练任务训练完成之后,可以预训练的模型参数,在 Big Bird 的验证任务中通过 IMDB 数据集来进行最终模型效果的验证,IMDB 数据集 ,IMDB 数据集是关于电影用户评论情感分析的数据集,主要是包含了50000条偏向明显的评论,其中25000条作为训练集,25000作为测试集。label 为 pos(positive)和 neg(negative),是一个序列文本分类任务,具体的执行脚本如下。

export CUDA_VISIBLE_DEVICES=0
python run_classifier.py --model_name_or_path bigbird-base-uncased \
    --output_dir "output" \
    --batch_size 2 \
    --learning_rate 5e-6 \
    --max_steps 16000 \
    --save_steps 1000 \
    --max_encoder_length 3072

其中参数释义如下:

  • model_name_or_path 指示了 finetune 使用的具体预训练模型以及预训练时使用的 tokenizer,目前支持的预训练模型有:"bigbird-base-uncased"。若模型相关内容保存在本地,这里也可以提供相应目录地址,例如:"./checkpoint/model_xx/"。
  • output_dir 指定输出文件。
  • batch_size 训练的 batch 大小。
  • learning_rate 训练的学习率。
  • max_steps 最大训练步数。
  • save_steps 保存模型间隔。
  • logging_steps 打印日志的步数。
  • max_encoder_length MLM 任务的最大的 token 数目。

基于bigbird-base-uncased在 IMDB 评测任务上 Fine-tuning 后,在验证集上有如下结果:

Task Metric Result
IMDB Accuracy 0.9449

Glue 任务

以 GLUE 中的 SST-2任务为例,启动 Fine-tuning 的方式如下:

unset CUDA_VISIBLE_DEVICES
python -m paddle.distributed.launch --gpus "0" run_glue.py \
    --model_type bigbird \
    --model_name_or_path bigbird-base-uncased \
    --task_name SST-2 \
    --max_encoder_length 128 \
    --batch_size 32   \
    --learning_rate 1e-5 \
    --epochs 5 \
    --logging_steps 1 \
    --save_steps 500 \
    --output_dir ./tmp/ \
    --device gpu

其中参数释义如下:

  • model_type 指示了模型类型,使用 bigbird 模型时设置为 bigbird 即可。
  • model_name_or_path 指示了 finetune 使用的具体预训练模型以及预训练时使用的 tokenizer,目前支持的预训练模型有:"bigbird-base-uncased"。若模型相关内容保存在本地,这里也可以提供相应目录地址,例如:"./checkpoint/model_xx/"。
  • task_name 表示 Fine-tuning 的任务。
  • max_encoder_length 表示最大句子长度,超过该长度将被截断。
  • batch_size 表示每次迭代每张卡上的样本数目。
  • learning_rate 表示基础学习率大小,将于 learning rate scheduler 产生的值相乘作为当前学习率。
  • epochs 表示训练轮数。
  • logging_steps 表示日志打印间隔。
  • save_steps 表示模型保存及评估间隔。
  • output_dir 表示模型保存路径。
  • device 表示训练使用的设备, 'gpu'表示使用 GPU, 'xpu'表示使用百度昆仑卡, 'cpu'表示使用 CPU, 'npu'表示使用华为昇腾卡。

基于bigbird-base-uncased在 GLUE 各评测任务上 Fine-tuning 后,在验证集上有如下结果:

Task Metric Result
SST-2 Accuracy 0.9365
QNLI Accuracy 0.9017
CoLA Mattehew's corr 0.5708
MRPC F1/Accuracy 0.9019 / 0.8603
STS-B Person/Spearman corr 0.8591 / 0.8607
QQP Accuracy/F1 0.9132 / 0.8828
MNLI Matched acc/MisMatched acc 0.8615 / 0.8606
RTE Accuracy 0.7004

致谢

参考论文

  • Zaheer, et al. "Big bird: Transformers for longer sequences" Advances in Neural Information Processing Systems, 2020