使用ALBERT(拥抱面部变压器)运行SQuAD脚本

时间:2020-04-19 14:54:36

标签: python deep-learning huggingface-transformers squad

我对将ALBERT与SQuAD 2.0拥抱脸部变形金刚脚本一起使用有疑问。

在github页面上,没有关于如何使用ALBERT运行脚本的具体说明,因此我使用了与使用BERT运行脚本相同的规范。 但是,最终获得的结果是(exact_match = 30.632527583593028,f1 = 36.36948708435092),与BERT所获得的(f1 = 88.52,精确匹配= 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而实现了结果?

谢谢!

2 个答案:

答案 0 :(得分:0)

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

假设您希望batch_size为64,但是您的GPU只能容纳一批32。

因此,您要进行两次遍历,每遍32个批次,累积梯度,然后在2个批次后进行反向遍历。

第二,超参数在深度学习模型中起着巨大的作用。您将不得不尝试一些参数集以获得更好的准确性。我认为将学习率降低到e-6级可能会有所帮助。虽然只是猜测。

答案 1 :(得分:0)

您设置了标志

--version_2_with_negative

对吗?由于SQUAD-2.0包含一些没有答案的问题,因此您需要将其设置为True。