Этот репо содержит сквозные рецепты, чтобы предварительно обработать и фиксировать модель представления языка Bert (двунаправленное энкодер от трансформаторов) модели представления языка с использованием службы машинного обучения Azure.
Обновление на 7/7/2020 :? Более поздняя реализация для предварительной подготовки Bert, доступная по адресу https://github.com/microsoft/onnxruntime-traing-examples/tree/master/nvidia-bert, значительно быстрее, чем реализация в этом репо. Эта реализация использует время выполнения ONNX для ускорения обучения, и ее можно использовать в средах с графическим процессором, включая службу машинного обучения Azure. Подробная информация об использовании времени выполнения ONNX для обучения и ускорения обучения моделей трансформатора, таких как BERT и GPT-2, доступны в блоге на Onnx Runtime Training Training Technical Deep Dive.
Bert - это модель представления языка, которая отличается от его способности эффективно захватывать глубокие и тонкие текстовые отношения в корпусе. В оригинальной статье авторы демонстрируют, что модель BERT может быть легко адаптирована для создания самых современных моделей для ряда задач NLP, включая классификацию текста, признание объекта и ответ на вопрос. В этом репо мы предоставляем записные книжки, которые позволяют разработчику предварительно обрабатывать модель BERT с нуля на корпусе, а также настраивать существующую модель BERT для решения специализированной задачи. Краткое введение в BERT доступно в этом репо для быстрого начала на Берт.
Предварительная подготовка модели представления языка BERT до желаемого уровня точности является довольно сложной задачей; В результате большинство разработчиков начинают с модели BERT, которая была предварительно обучена на стандартном корпусе (например, Википедия), вместо того, чтобы обучать ее с нуля. Эта стратегия работает хорошо, если окончательная модель обучается корпусу, аналогичному корпусу, используемому на шаге перед поездкой; Однако, если проблема включает в себя специализированный корпус, который сильно отличается от стандартного корпуса, результаты не будут оптимальными. Кроме того, для продвижения языкового представления за пределами точности BERT пользователям необходимо будет изменить архитектуру модели, данные обучения, функцию затрат, задачи и процедуры оптимизации. Все эти изменения должны быть изучены в больших параметрах и учебных данных. В случае Bert-Large это может быть весьма существенным, поскольку имеет 340 миллионов параметров и обучен очень большому корпусу документа. Чтобы поддержать это с помощью графических процессоров, инженерам машинного обучения потребуется распределенная учебная поддержка для обучения этих больших моделей. Однако из -за сложности и хрупкости настройки этих распределенных сред, даже экспертная настройка может получить более низкие результаты от обученных моделей.
Чтобы решить эти проблемы, этот репо публикует рабочий процесс для предварительной подготовки моделей Bert-Large. Разработчики теперь могут создавать свои собственные модели представления языка, такие как BERT, используя свои данные, специфичные для доменов в графических процессорах, либо с помощью собственного оборудования, либо с использованием службы Azure Machine Learning. Рецепт предварительной обработки в этом репо включает набор данных и сценарии предварительной обработки, чтобы любой мог экспериментировать с созданием своих собственных моделей представления языка общего назначения за пределами Берта. В целом, это стабильный, предсказуемый рецепт, который сходится к хорошему оптимуму для исследователей, чтобы попробовать исследования самостоятельно.
Предварительный рецепт в этом репо основан на предварительном пакете Pytorch Bert v0.6.2 от обнимающего лица. Реализация в этом рецепте предварительной подготовки включает в себя методы оптимизации, такие как gradient accumulation (градиенты накапливаются для небольших мини-партий перед обновлением весов модели) и mixed precision training . Модули ноутбука и Python для предварительной подготовки доступны в каталоге Pretrain.
Подготовка данных является одним из важных шагов в любом проекте машинного обучения. Для Bert Pretraining необходим корпус на уровне документов. Качество данных, используемых для предварительной подготовки, напрямую влияет на качество обученных моделей. Чтобы упростить предварительную обработку данных и для повторяемости результатов, в репомируется код предварительной обработки данных. Он может использоваться для предварительного обработки Wikipedia Corpus или других наборов данных для предварительной подготовки. Обратитесь к дополнительной информации при подготовке данных для предварительной подготовки для получения подробной информации об этом.
Рецепт создания в этом репо показывает, как определить модель представления языка BERT, используя службу Azure Machine Learning. Ноутбуки и модули Python для создания доступны в Directory Finetune. Мы определяем и оцениваем наши предварительные контрольные точки против следующих:
Оценка общего языка (клей). Ноутбук Bert_eval_glue.ipynb Jupyter позволяет пользователю запустить одну из предварительно проведенных контрольных точек против этих задач на Azure ML.
Service Azure Machine Learning предоставляет облачную среду для подготовки данных, обучения, тестирования, развертывания, управления и отслеживания моделей машинного обучения. Этот сервис полностью поддерживает технологии с открытым исходным кодом, такие как Pytorch, Tensorflow и Scikit-Learn, и может использоваться для любого вида машинного обучения, от классического ML до глубокого обучения, контролируемого и неконтролируемого обучения.
Ноутбуки Jupyter можно использовать для использования Azureml Python SDK и отправки работ до предварительного и финала. Этот репо содержит следующие ноутбуки для различных действий.
| Активность | Блокнот |
|---|---|
| Предварительный | Bert_pretrain.ipynb |
| Клей finetune/raving | Bert_eval_glue.ipynb |
| Активность | Блокнот |
|---|---|
| Клей finetune/raving | Tensorflow-bert-azureml.ipynb |
Этот проект принял код поведения с открытым исходным кодом Microsoft. Для получения дополнительной информации см. Кодекс поведения FAQ или свяжитесь с [email protected] с любыми дополнительными вопросами или комментариями.