python - 使用 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 而获得了结果?
谢谢!
解决方案
您可以使用梯度累积步骤来补偿小批量。本质上,梯度累积步骤参数是这样的:
假设您想要一个 64 的 batch_size,但您的 GPU 只能容纳 32 个大小的批次。
因此,您进行两次 32 批次的传递,累积梯度,然后在 2 批次后进行反向传递。
其次,超参数在深度学习模型中发挥着巨大的作用。您将不得不尝试几组参数以获得更好的准确性。我认为将学习率降低到 e-6 的数量级可能会有所帮助。虽然只是推测。
推荐阅读
- asp.net - 在资产负债表注释格式上显示水晶报表
- python - LogisticRegression 为不同的 C 值返回相同的模型
- python - 从列表中抽取指定数量的样本。使用所有列表元素
- python - 为什么我收到文件或目录未找到的错误,尽管两者都存在于谷歌驱动器和 Colab Notebooks 中?
- javascript - 如何通过在javascript中引用数组来设置内容
- c++ - 使用路径目录时 \\ 和 / 之间的区别
- security - 保护程序的堆栈内存
- django - 登录后如何禁用浏览器后退按钮?
- scala - 为什么坚持方法永远行不通?
- android - 如何从不同的函数发出值,但将它们全部收集在一个地方?流科特林