我们的 NAACL 2021 工作《程序理解和生成的统一预训练》的正式代码发布。
***** PLBART 在下游任务上的表现记录在此电子表格中。 *****
新闻 • 设置 • 预训练 • 微调 • 常见问题解答 • 致谢 • 许可证 • 引用
输入噪音 | 原始序列 |
---|---|
0 是[MASK]斐波那契[MASK]吗? | |
公共静态主(字符串参数[]){日期=日期();系统 。出去 。 (String.format("当前日期:%tc",)); } | |
def addThreeNumbers ( x , y , z ) : NEW_LINE INDENT return [MASK] | |
我们可以设置一个conda环境来运行PLBART实验,第一步是下载依赖项。我们假设 anaconda 已安装。可以通过运行以下脚本来安装附加要求(在requirements.txt中注明):
bash install_env.sh
转到data/github
目录并按照说明进行操作。
转到data/stackoverflow
目录并按照说明进行操作。
cd pretrain
bash binarize.sh
bash pretrain.sh GPU_IDS
[注意]我们在 8 个GeForce RTX 2080
(11gb) GPU 上预训练了 PLBART(大约花费了 11.5 天)。如果您想使用更多 GPU 或具有更多内存的 GPU 来预训练 PLBART,请相应调整MAX_SENTENCES
、 MAX_TOKENS
、 UPDATE_FREQ
以保持有效批量大小为 2048。根据 fairseq,有效批量大小等于:
PER_GPU_TRAIN_BATCH_SIZE * NUM_GPU * UPDATE_FREQ
请注意, MAX_TOKENS
是指每个小批量的大小,以令牌数量表示。在我们的实验中,我们注意到在 11GB GPU 中,最多可以容纳 2048 个令牌,相当于 4-5 个示例。因此,我们将UPDATE_FREQ
设置为 60,这样我们就可以实现约 2048 的有效批量大小。
我们针对三种类型的下游任务对 PLBART 进行微调和评估。
类型 | 任务 | 语言 | 数据 | 脚本 | 检查站 |
---|---|---|---|---|---|
代码到文本 | 代码总结 | Python、Java、Ruby、 PHP、Javascript、Go | [关联] | [关联] | [关联] |
文本到代码 | 代码生成 | 爪哇 | [关联] | [关联] | [关联] |
代码到代码 | 代码翻译 | Java、C# | [关联] | [关联] | [关联] |
代码细化 | 爪哇 | [关联] | [关联] | ||
克隆检测 | 爪哇 | [关联] | [关联] | ||
缺陷检测 | C/C++ | [关联] | [关联] |
cd pretrain
bash download.sh
cd ..
cd data/codeXglue
bash download.sh
cd ../..
cd evaluation/CodeBLEU/parser
bash build.sh
cd ../../..
例如,我们想要在Text-to-Code
任务上微调 PLBART。然后,
cd scripts/text_to_code
bash prepare.sh
bash run.sh GPU_IDS
cd ../..
笔记。我们在 1 个GeForce RTX 2080
(11GB) GPU 上对 PLBART 进行了微调。
[注意] 我们在此介绍此存储库的文件结构。
如何从 Google BigQuery 下载 Github 数据?
我们在这里提供了详细的指南。
论文中报告的性能与使用已发布的检查点实现的性能不匹配。
论文中提到的 PLBART 性能与已发布的检查点实现的性能之间存在差异。我们在这里注意到了它们。请注意,超参数设置没有变化。我们提供了与 bash 脚本中使用的完全相同的值。我们观察到的性能差异可能是由于在不同时间点运行实验造成的。虽然我们没有,但我们建议使用多个不同的种子微调 PLBART 并报告平均分数。
fairseq==0.9.0
官方版本中不存在mbart_base
任务。
虽然我们使用了fairseq==0.9.0
但我们使用了不同的提交,其中包含mbart_base
任务。您可以执行以下操作,这应该有效。
git clone https://github.com/pytorch/fairseq
cd fairseq
git checkout 698e3b91ffa832c286c48035bdff78238b0de8ae
pip install .
否则,您可以考虑安装fairseq==0.10.0
。其他调整请参考此问题。
PLBART 的最大输入和输出长度是多少?
最大长度为 512。
PLBART 使用 Fairseq、codeXglue 和 TransCoder,并感谢这些作品的作者的贡献。
该存储库的内容受 MIT 许可。该许可证也适用于预训练和微调的模型。
@inproceedings{ahmad-etal-2021-unified,
title = "Unified Pre-training for Program Understanding and Generation",
author = "Ahmad, Wasi and
Chakraborty, Saikat and
Ray, Baishakhi and
Chang, Kai-Wei",
booktitle = "Proceedings of the 2021 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies",
month = jun,
year = "2021",
address = "Online",
publisher = "Association for Computational Linguistics",
url = "https://www.aclweb.org/anthology/2021.naacl-main.211",
pages = "2655--2668"
}