Представляем Texar-PyTorch: библиотеку машинного обучения, объединяющую лучшее из TensorFlow в PyTorch

Размещено в блоге Petuum.

Мы рады представить Texar-PyTorch, универсальный инструментарий машинного обучения с открытым исходным кодом, который поддерживает широкий набор приложений с упором на обработку естественного языка (NLP) и задачи генерации текста.

Основываясь на уже популярном эквиваленте Texar TensorFlow, Texar-PyTorch интегрирует многие из лучших функций Tensorflow в PyTorch. Набор инструментов легко настраиваемый, предоставляющий API-интерфейсы на нескольких уровнях абстракции, что подходит как новичкам, так и опытным пользователям.

В частности, Texar-PyTorch реплицирует комплексные полезные модули TensorFlow (TF) для значительного улучшения существующих функций PyTorch, в том числе:

  • Данные: передовой опыт использования tf. данных для простой обработки, группировки и итерации данных, эффективный на основе буферизованного перетасовки, кэширования и т. д. и ленивая загрузка. Мы также реплицируем TFRecord для приема произвольных сложных типов данных и больших файлов.
  • Моделирование: множество функций и отличная модульность моделей машинного обучения, такая как принципиальная конструкция моделей последовательностей, включая декодеры генерации текста, механизмы внимания, RNN и т. д.
  • Обучение: мы реплицируем высокоуровневые API-интерфейсы TF Estimator и keras.Model, но с гораздо большей гибкостью, для обучения модели под ключ, оценки, прогнозирования, визуализации TensorBoard и бесшовной комбинации с внешние инструменты настройки гиперпараметров.

Что предлагает Texar-PyTorch

Благодаря лучшим функциям TF, интегрированным в интуитивно понятную модель программирования PyTorch, Texar-Pytorch обеспечивает всестороннюю поддержку для создания приложений машинного обучения:

  • Современные строительные блоки для моделей. Создание модели машинного обучения похоже на сборку кубиков Lego. Вставляйте и меняйте модули по своему усмотрению. "Читать далее"
  • Простая и эффективная обработка данных - многофункциональные встроенные процессоры для распространенных типов наборов данных. Простые, но мощные интерфейсы для произвольных нестандартных. Интегрированы лучшие практики, не беспокойтесь об эффективности. "Читать далее"
  • Гибкое обучение моделей под ключ с исполнителями - освобождение от шаблонного кода для циклов обучения и оценки, при этом сохраняя высокую гибкость для настройки в соответствии с вашими конкретными потребностями. "Читать далее"

Пример кода 1 демонстрирует полный код использования Texar-PyTorch для построения и обучения современной модели от последовательности к последовательности, например, для суммирования текста и машинного перевода.

Почему выбирают Texar?

  • Поддерживает как TensorFlow, так и PyTorch. Иногда вы не выбираете, какую базовую структуру использовать, и изучение новой структуры более высокого уровня, вероятно, занимает столько же времени, как и написание частей самостоятельно. Теперь с Texar вы можете использовать одни и те же интерфейсы с минимальными изменениями в обеих средах. Эти две версии могут даже иметь общие веса предварительно обученных моделей, которые вы скачали.
  • Обеспечивает обработку естественного языка, все в одном комплекте. Texar предлагает исчерпывающий набор нейронных моделей для задач обработки естественного языка, особенно генерации текста. На рисунке 1 приведен снимок модулей Texar. С Texar вы не только получите доступ к полному набору современных предварительно обученных моделей, но также найдете все необходимые утилиты, от обработки данных до моделирования и обучения. Мы вас прикрыли.
  • Обеспечивает удобство для новичков и экспертов. Независимо от того, начали ли вы глубокое обучение или являетесь опытным исследователем, вам будет легко использовать Texar. Texar предоставляет современные встроенные компоненты, но остается достаточно гибким для настройки.

Далее мы предоставляем более подробную информацию о трех ключевых частях Texar-PyTorch, включая моделирование, данные и обучение.

Моделирование

Как показано на рисунке 1, Texar-Pytorch предлагает полный набор модулей машинного обучения. Благодаря хорошо продуманным интерфейсам пользователи могут свободно строить произвольные модели, собирая строительные блоки.

В следующем примере показано, насколько гибкими являются интерфейсы модулей для удовлетворения потребностей различных алгоритмов обучения, таких как обучение с максимальной вероятностью и состязательное обучение. Более того, Texar предоставляет интерфейсы на нескольких уровнях абстракции для пользователей с разным опытом. Например:

  • Вызвать общий метод вывода, например, принудительное декодирование учителем, несложно, просто установив аргумент декодера `decoding_strategy =’ train_greedy’`.
  • OTOH, для выполнения расширенного вывода, например, декодирования Gumbel softmax для состязательного обучения, пользователи могут использовать GumbelSoftmaxHelper. Опытные пользователи могут дополнительно определять новых помощников для настройки любых стратегий декодирования.

Подводя итог, можно сказать, что моделирование с помощью Texar-PyTorch имеет следующие ключевые преимущества:

  • Отличная модульность - переключение между различными контекстами обучения обеспечивается простым подключением / заменой пары модулей.
  • Многоуровневые интерфейсы - интуитивно понятные интерфейсы высокого уровня для начинающих пользователей и низкоуровневые настраиваемые интерфейсы для опытных пользователей.
  • Встроенные современные предварительно обученные модели - BERT, GPT-2, RoBERTa, XLNet и другие, для задач кодирования текста, классификации, маркировки последовательностей и генерации.

Данные

Модули данных Texar-Pytorch разработаны для простого, эффективного и настраиваемого доступа к данным для любых задач машинного обучения и НЛП. Сочетая в себе лучшие практики TensorFlow tf.data, модули значительно улучшают собственный DataLoader PyTorch за счет:

  • Разделение обработки одного экземпляра и пакетной обработки - для более ясной логики программы и упрощения настройки
  • Перемешивание, кэширование и отложенная загрузка на основе буфера - для большей эффективности
  • Обширные итераторы наборов данных - дополнительная настройка пользователя не требуется
  • Более интуитивно понятные API - не требуется специальных знаний, чтобы использовать лучшие практики в вашем проекте.

Встроенные наборы данных Texar-PyTorch

Для распространенных типов наборов данных Texar-Pytorch уже включает готовые к использованию модули, как показано на рисунке 2 ниже.

В частности, RecordData является эквивалентом Texar хорошо известного TFRecordData Tensorflow, который считывает файлы в двоичном формате и, таким образом, допускает произвольные типы данных от текста до изображений. Круто, не правда ли! Более того - шаблон использования очень похож на TFRecordData. Пример ниже говорит само за себя.

Допустим, вы хотите обучить модель подписи к изображениям. Каждый пример данных обычно содержит изображение, подпись и другую метаинформацию. Ниже показано, как это сделать в Texar-Pytorch.

Создание собственных наборов данных

Пользователи могут настраивать обработку и пакетирование экземпляров данных, а Texar позаботится о кэшировании, отложенной обработке и итерациях за вас. Пример игрушки ниже объясняет это.

Исполнитель

Вам когда-нибудь было скучно писать цикл обучения и оценки снова и снова, каждый раз при запуске нового проекта? Вам нужен единый API для автоматизации цикла, оснащенный журналированием, контрольными точками, визуализацией и настройкой гиперпараметров? Вы даже хотите, чтобы API был достаточно гибким для ваших нетрадиционных алгоритмов, например, чередования множественных потерь в состязательном обучении? Texar Executor здесь для вас.

Executor - это эквивалент PyTorch широко используемых TF Estimator и tf.keras.Model, но он спроектирован таким образом, чтобы он был легким и более настраиваемым.

Чтобы продемонстрировать возможности Executor, мы показываем пример написанного от руки цикла train-eval v.s. Исполнитель:

Допустим, нам нужны следующие функции в нашем проекте:

  • Печать журналов каждую итерацию logging_steps в консоль, файл журнала и Tensorboard.
  • Выполняйте проверку на каждой итерации validate_steps, оценивая выходные данные модели с помощью метрики BLEU.
  • Если результаты проверки улучшатся, сохраните текущую контрольную точку. Если результаты не улучшились для последовательных испытаний «терпения», загрузите предыдущую контрольную точку и масштабируйте скорость обучения.

Приведенные выше шаги описывают довольно универсальный цикл обучения. Вот как будет выглядеть написанный от руки цикл обучения:

Код очень длинный и утомительный. Еще больше проблем может возникнуть, когда вам нужно добавить или изменить некоторые функции. Теперь, как будет выглядеть код, если мы будем использовать Executors?

А вот так логи Executor выглядят в командной строке:

Здесь вы можете заметить, что BLEU проверки обновляется на месте на основе ранее предсказанных значений. Это благодаря метрикам потоковой передачи Executor, которые позволяют выполнять инкрементное вычисление значений метрик. Не нужно ждать до конца, чтобы увидеть результаты на большом тестовом наборе!

Как мы видим, код с Executor гораздо более структурирован и читаем. Кроме того, он гораздо более расширяемый:

  • В: Что, если мы также хотим выполнять проверку после каждой эпохи?
    О: Просто измените `validate_every` на:

  • В: Что, если мы хотим выполнить раннюю остановку после того, как мы увеличили скорость обучения `Early_stop_patience` раз?
    A: Просто измените` action_on_plateau` на:

  • Q: Что, если мы также хотим измерить потерю на уровне слов?
    A: Просто добавьте новую метрику в `valid_metrics`:

  • В: Что, если мы хотим выполнить настройку гиперпараметров и обучить модель несколько раз?
    О: Просто создайте Executor для каждого набора гиперпараметров, который вы хотите контрольная работа. Поскольку Executor заботится обо всем, кроме создания модели, вам не нужно беспокоиться о потреблении дополнительной памяти или случайном сохранении объектов из предыдущих запусков. Вот пример использования Executor с hyperopt.
  • В: Что, если в конце каждой эпохи мы захотим загрузить текущую контрольную точку на сервер, отправить электронное письмо с информацией о ходе обучения и вывести собаку на прогулку?
    A: Странно, но ладно. Просто зарегистрируйте настраиваемое действие при условии по вашему выбору и делайте все, что хотите:

Переход с Texar-TF на Texar-PyTorch

Если вы ранее пользовались Texar-TF, переход на Texar-PyTorch требует минимальных усилий. По сравнению с Texar TensorFlow, Texar PyTorch имеет почти те же интерфейсы, что упрощает переход между серверными модулями.

Несмотря на схожие интерфейсы, мы также следуем соглашениям о кодировании для каждой платформы, поэтому вам не захочется изучать новый подъязык. С этой целью мы изменили некоторые расширяемые интерфейсы нижнего уровня, чтобы они более точно соответствовали нативному дизайну соответствующих фреймворков. Большинство изменений связано с модулями данных и исполнителей, но, как вы уже видели, их все еще довольно легко уловить.

Начиная

Для начала посетите наш репозиторий GitHub и следуйте инструкциям по установке. Полезные ресурсы включают:

  • Документация: у нас есть подробная документация по каждому модулю и функции.
  • Примеры: Мы настоятельно рекомендуем вам ознакомиться с нашими примерами, чтобы получить общее представление о том, как Texar используется на практике. Примеры четко задокументированы и охватывают разнообразные варианты использования.
  • Библиотека ASYML: Найдите быстрые ссылки на все ресурсы Texar в одном месте.

* Petuum является корпоративным спонсором Texar. Инженеры Petuum постоянно вносят свой вклад в базу кода Texar и сыграли решающую роль в этом выпуске.