Официальный выпуск кода нашей работы NAACL 2021 «Унифицированное предварительное обучение для понимания и создания программ».
***** Результаты работы PLBART по последующим задачам записываются в этой таблице. *****
Новости • Настройка • Предварительное обучение • Тонкая настройка • Часто задаваемые вопросы • Благодарность • Лицензия • Цитирование
Шумный вход | Исходная последовательность |
---|---|
Является ли 0 [МАСКА] Фибоначчи [МАСКА] ? <Ру> | <Ru> Является ли 0 первым числом Фибоначчи? |
public static main (String args []) {date = Date(); Система . вне . (String.format("Текущая дата: %tc",)); } <Ява> | <java> public static void main (String args []) { Date date = new Date (); Система . вне . printf (String.format("Текущая дата:%tc", date )); } |
def addThreeNumbers (x, y, z): NEW_LINE INDENT return [MASK] <python> | <python> def addThreeNumbers (x, y, z): NEW_LINE INDENT возвращает x + y + z |
Мы можем настроить среду conda для запуска экспериментов PLBART, первый шаг — загрузить зависимости. Мы предполагаем, что anaconda установлена. Дополнительные требования (отмеченные в файле require.txt) можно установить, запустив следующий скрипт:
bash install_env.sh
Перейдите в каталог data/github
и следуйте инструкциям.
Перейдите в каталог data/stackoverflow
и следуйте инструкциям.
cd pretrain
bash binarize.sh
bash pretrain.sh GPU_IDS
[Примечание] Мы предварительно обучили PLBART на 8 графических процессорах GeForce RTX 2080
(11 ГБ) (заняло примерно 11,5 дней). Если вы хотите предварительно обучить PLBART, используя больше графических процессоров или графические процессоры с большим объемом памяти, настройте MAX_SENTENCES
, MAX_TOKENS
, UPDATE_FREQ
соответственно, чтобы поддерживать эффективный размер пакета 2048. Согласно fairseq, эффективный размер пакета равен:
PER_GPU_TRAIN_BATCH_SIZE * NUM_GPU * UPDATE_FREQ
Обратите внимание, что MAX_TOKENS
относится к размеру каждого мини-пакета с точки зрения количества токенов. В ходе наших экспериментов мы заметили, что в графическом процессоре емкостью 11 ГБ можно разместить максимум 2048 токенов, что эквивалентно 4-5 примерам. Поэтому мы устанавливаем для UPDATE_FREQ
значение 60, чтобы достичь эффективного размера пакета ~2048.
Мы настраиваем и оцениваем PLBART для решения трех типов последующих задач.
Тип | Задача | Язык(и) | Данные | Скрипты | Контрольно-пропускные пункты |
---|---|---|---|---|---|
Код в текст | Обобщение кода | Питон, Ява, Руби, PHP, Javascript, Go | [СВЯЗЬ] | [СВЯЗЬ] | [СВЯЗЬ] |
Текст в код | Генерация кода | Ява | [СВЯЗЬ] | [СВЯЗЬ] | [СВЯЗЬ] |
Код к коду | Перевод кода | Ява, С# | [СВЯЗЬ] | [СВЯЗЬ] | [СВЯЗЬ] |
Уточнение кода | Ява | [СВЯЗЬ] | [СВЯЗЬ] | ||
Обнаружение клонов | Ява | [СВЯЗЬ] | [СВЯЗЬ] | ||
Обнаружение дефектов | С/С++ | [СВЯЗЬ] | [СВЯЗЬ] |
cd pretrain
bash download.sh
cd ..
cd data/codeXglue
bash download.sh
cd ../..
cd evaluation/CodeBLEU/parser
bash build.sh
cd ../../..
Например, мы хотим точно настроить PLBART для задачи Text-to-Code
. Затем,
cd scripts/text_to_code
bash prepare.sh
bash run.sh GPU_IDS
cd ../..
Примечание. Мы точно настроили PLBART на 1 графическом процессоре GeForce RTX 2080
(11 ГБ).
[ПРИМЕЧАНИЕ] Файловую структуру этого репозитория мы представляем здесь.
Как загрузить данные Github из Google BigQuery?
Подробное руководство мы предоставили здесь.
Несоответствие производительности, указанное в документе, и достигнутое с использованием выпущенных контрольных точек.
Существует разница между показателями PLBART, упомянутыми в документе, и показателями, достигнутыми с освобожденными контрольно-пропускными пунктами. Мы отметили их здесь. Обратите внимание, что в настройке гиперпараметра изменений нет. Мы указали то же самое значение, которое использовали в сценариях bash. Наблюдаемая нами разница в производительности, возможно, связана с проведением экспериментов в разное время. Хотя мы этого не сделали, мы рекомендуем точно настроить PLBART с использованием нескольких разных семян и сообщить средние оценки.
Задача mbart_base
отсутствует в официальной версии fairseq==0.9.0
.
Хотя мы использовали 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"
}