首页 > 解决方案 > 使用 ALBERT (huggingface-transformers) 运行 SQuAD 脚本

问题描述

我有一个关于将 ALBERT 与 SQuAD 2.0 huggingface-transformers 脚本一起使用的问题。

在 github 页面中,没有关于如何使用 ALBERT 运行脚本的具体说明,因此我使用了与使用 BERT 运行脚本相同的规范。然而,最终获得的结果是 (exact_match = 30.632527583593028, f1 = 36.36948708435092),与 BERT 实现的 (f1 = 88.52, exact_match = 81.22) 相去甚远,并且报告在 github 页面上。所以我认为我可能做错了什么。

这是我在命令行中运行的代码:

python run_squad.py \
   --model_type albert \
   --model_name_or_path albert-base-v2 \
   --do_train   --do_eval \
   --train_file train-v2.0.json \
   --predict_file dev-v2.0.json \
   --per_gpu_train_batch_size 5 \
   --learning_rate 3e-5 \
   --num_train_epochs 2.0 \
   --max_seq_length 384 \
   --doc_stride 128 \
   --output_dir /aneves/teste2/output/

这个和变形金刚页面上的唯一区别是model_name,他们使用'bert_base_uncased',而per_gpu_train_batch_size是12,但由于我的GPU内存限制,我不得不使用5。

我是在运行脚本时忘记了某些选项,还是因为 per_gpu_train_batch_size 设置为 5 而不是 12 而获得了结果?

谢谢!

标签: pythondeep-learninghuggingface-transformerssquad

解决方案


您可以使用梯度累积步骤来补偿小批量。本质上,梯度累积步骤参数是这样的:

假设您想要一个 64 的 batch_size,但您的 GPU 只能容纳 32 个大小的批次。

因此,您进行两次 32 批次的传递,累积梯度,然后在 2 批次后进行反向传递。

其次,超参数在深度学习模型中发挥着巨大的作用。您将不得不尝试几组参数以获得更好的准确性。我认为将学习率降低到 e-6 的数量级可能会有所帮助。虽然只是推测。


推荐阅读