download.sh ) Во -первых, подготовить данные. Donwload Squad Data и Glove и NLTK Corpus (~ 850 МБ, это будет загружать файлы в $HOME/data ):
chmod +x download.sh; ./download.sh
Во -вторых, предварительный набор данных Стэнфордского QA (вместе с векторами перчаток) и сохранить их в $PWD/data/squad (~ 5 минут):
python -m squad.prepro
Модель имеет параметры ~ 2,5 м. Модель была обучена Nvidia Titan X (Pascal Architecture, 2016). Модель требует не менее 12 ГБ оперативной памяти графического процессора. Если ваша графическая оперативная память меньше 12 ГБ, вы можете либо уменьшить размер партии (производительность может ухудшиться), либо вы можете использовать мульти -графический процессор (см. Ниже). Обучение сходится на ~ 18 тыс. Шаги, и это заняло ~ 4 с за шаг (то есть ~ 20 часов).
Перед обучением рекомендуется сначала попробовать следующий код, чтобы проверить, что все в порядке, и память достаточно:
python -m basic.cli --mode train --noload --debug
Затем, чтобы полностью тренироваться, беги:
python -m basic.cli --mode train --noload
Вы можете ускорить тренировочный процесс с флагами оптимизации:
python -m basic.cli --mode train --noload --len_opt --cluster
Вы все еще можете опустить их, но обучение будет намного медленнее.
Обратите внимание, что во время обучения оценки EM и F1 от случайной оценки не совпадают с оценкой из официального сценария оценки отряда. Печатные оценки не являются официальными (наша схема оценки немного более жесткая). Чтобы получить официальный номер, используйте официального оценщика (скопированный в папке squad , squad/evaluate-v1.1.py ). Для получения дополнительной информации см. 3.test.
Чтобы проверить, запустить:
python -m basic.cli
Подобно обучению, вы можете дать флаги оптимизации для ускорения теста (5 минут на Dev Data):
python -m basic.cli --len_opt --cluster
Эта команда загружает последнюю сохраненную модель во время обучения и начинает тестирование на тестовых данных. После того, как процесс заканчивается, он печатает оценки F1 и EM, а также выводит файл JSON ( $PWD/out/basic/00/answer/test-####.json , где #### -это шаг#, что модель была сохранена). Обратите внимание, что напечатанные оценки не являются официальными (наша схема оценки немного более жесткая). Чтобы получить официальный номер, используйте официального оценщика (скопированный в папке squad ) и файл вывода json:
python squad/evaluate-v1.1.py $HOME/data/squad/dev-v1.1.json out/basic/00/answer/test-####.json
Вместо того, чтобы тренировать модель самостоятельно, вы можете использовать предварительно обученные веса, которые использовались для подчинения лидеров отряда. Обратитесь к этому таблицу в Codalab, чтобы воспроизвести результаты. Если вы не знакомы с Codalab, выполните эти простые шаги (учитывая, что вы встретили все предварительные вышеупомянутые выше):
save.zip с листа и разкачивайте его в текущем каталоге.glove.6B.100d.txt из папки данных перчатки ( $HOME/data/glove/ ) в текущий каталог. basic/run_single.sh $HOME/data/squad/dev-v1.1.json single.json
Это пишет ответы на single.json в текущем каталоге. Затем вы можете использовать официальный оценщик для получения баллов EM и F1. Если вы хотите запустить GPU (~ 5 минут), измените значение флага Batch_size в файле оболочки на более высокое число (60 для 12 ГБ ОЗУ GPU). 4. Точно так же, чтобы воспроизвести ансамблевый метод:
basic/run_ensemble.sh $HOME/data/squad/dev-v1.1.json ensemble.json
Если вы хотите запустить GPU, вам следует запустить сценарий последовательно, удалив '&' в Forloop, или вам нужно будет указать различные графические процессоры для каждого запуска цикла для.
Обратите внимание, что эти оценки взяты из официального оценщика (скопировано в папке squad , squad/evaluate-v1.1.py ). Для получения дополнительной информации см. 3.test. Оценки появились во время обучения, могут быть ниже, чем баллы от официального оценщика.
| EM (%) | F1 (%) | |
|---|---|---|
| одинокий | 67.7 | 77.3 |
| ансамбль | 72,6 | 80.7 |
| EM (%) | F1 (%) | |
|---|---|---|
| одинокий | 68.0 | 77.3 |
| ансамбль | 73,3 | 81.1 |
Обратитесь к нашей статье для получения более подробной информации. Смотрите таблицу лидеров отряда, чтобы сравнить с другими моделями.
Наша модель поддерживает обучение с несколькими GPU. Мы следуем параллелизационной парадигме, описанной в учебном пособии Tensorflow. Короче говоря, если вы хотите использовать размер партии 60 (по умолчанию), но если у вас 3 графические процессоры с 4 ГБ оперативной памяти, то вы инициализируете каждый графический процессор с размером партии 20 и объединяете градиенты на процессоре. Это можно легко сделать, работая:
python -m basic.cli --mode train --noload --num_gpus 3 --batch_size 20
Точно так же вы можете ускорить тестирование с помощью:
python -m basic.cli --num_gpus 3 --batch_size 20
На данный момент, пожалуйста, обратитесь к demo этого хранилища.