Hugging Face - ведущий стартап в области НЛП, в котором более тысячи компаний используют свои библиотеки в производстве, включая Bing, Apple, Monzo. Все примеры, использованные в этом руководстве, доступны на Colab. Ссылки доступны в соответствующих разделах.

Введение

Hugging Face - это стартап, ориентированный на НЛП, с большим сообществом разработчиков ПО с открытым исходным кодом, в частности вокруг библиотеки Трансформеры. 🤗 / Transformers - это библиотека на основе Python, которая предоставляет API для использования многих хорошо известных архитектур преобразователей, таких как BERT, RoBERTa, GPT-2 или DistilBERT, которые позволяют получать самые современные результаты по различным задачам НЛП, таким как классификация текста, извлечение информации, ответы на вопросы и создание текста. Эти архитектуры предварительно обучены с несколькими наборами весов. Для начала работы с Transformers требуется только установить пакет pip:

pip install transformers

Библиотека в PyTorch очень быстро выросла и недавно была перенесена на TensorFlow 2.0, предлагая API, который теперь работает с API-интерфейсом Keras, TensorFlow Extended и TPU 👏. Это сообщение в блоге посвящено использованию библиотеки Transformers с использованием TensorFlow: использованию Keras API, а также TensorFlow TPUStrategy для точной настройки современной модели Transformer.

Библиотека и философия

Трансформаторы основаны на концепции предварительно обученных моделей трансформаторов. Эти модели трансформаторов бывают разных форм, размеров и архитектур и имеют свои собственные способы приема входных данных: через токенизацию.

Библиотека построена на трех основных классах: классе конфигурации, классе токенизатора и классе модели.

  • Класс конфигурации: класс конфигурации содержит соответствующую информацию о модели, которую мы будем использовать, такую ​​как количество слоев и количество головок внимания. Ниже приведен пример файла конфигурации BERT для предварительно обученных весов bert-base-cased. Классы конфигурации содержат эти атрибуты с различными методами ввода-вывода и стандартизованными свойствами имен.
  • Класс токенизатора: класс токенизатора заботится о преобразовании строки Python в массивы или тензоры целых чисел, которые являются индексами в словаре модели. Он имеет множество удобных функций, связанных с токенизацией строки в токены. Эта токенизация зависит от модели, поэтому у каждой модели есть свой токенизатор.
  • Класс модели: класс модели содержит саму логику моделирования нейронной сети. При использовании модели TensorFlow она наследуется от tf.keras.layers.Layer, что означает, что ее можно очень просто использовать с помощью API-интерфейса Keras или обучить с помощью пользовательского цикла обучения и GradientTape.

Радость в простоте

Преимущество использования Transformers заключается в прямом независимом от модели API. Загрузка предварительно обученной модели вместе с ее токенизатором может быть выполнена в несколько строк кода. Вот пример загрузки моделей BERT и GPT-2 TensorFlow, а также их токенизаторов:

Вес загружается из корзины S3 HuggingFace и кэшируется локально на вашем компьютере. Модели готовы к использованию для вывода или доработки при необходимости. Давайте посмотрим на это в действии.

Точная настройка модели трансформатора

Тонкая настройка модели упрощается благодаря некоторым методам, доступным в библиотеке Transformer. Следующие части построены как таковые:

  • Загрузка текстовых данных и их предварительная обработка
  • Определение гиперпараметров
  • Обучение (с Keras на CPU / GPU и с TPUStrategy)

Создание входного конвейера

Мы сделали сопутствующую тетрадь colab, чтобы вы быстро освоили весь код. Мы будем использовать пакет thetensorflow_datasets для загрузки данных. Tensorflow-dataset предоставляет нам tf.data.Dataset, который можно передать в наш glue_convert_examples_to_features метод.

Этот метод будет использовать токенизатор для токенизации ввода и добавления специальных токенов в начало и конец последовательностей (например, [SEP], [CLS], ‹/s› или ‹s›), если такие дополнительные токены требуется моделью. Этот метод возвращает tf.data.Dataset, содержащий измененные входные данные.

Затем мы можем перемешать этот набор данных и разделить его партиями по 32 единицы, используя стандартные методы tf.data.Dataset.

Тренировка по методу Кераса

Обучение модели с использованием метода подгонки Кераса никогда не было таким простым. Теперь, когда у нас есть настройка входного конвейера, мы можем определить гиперпараметры и вызвать метод подгонки Кераса с нашим набором данных.

Тренировка со стратегией

Тренировка со стратегией дает вам лучший контроль над тем, что происходит во время тренировки. Переключаясь между стратегиями, пользователь может выбрать распределенный способ обучения модели: от нескольких графических процессоров до TPU.

На момент написания TPUStrategy - единственный верный способ обучить модель на TPU с использованием TensorFlow 2. Построение пользовательского цикла с использованием стратегии имеет еще больший смысл в этом отношении, поскольку стратегии можно легко переключать и обучать на мульти-GPU практически не потребует изменения кода.

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

При этом используется корзина Google Cloud Platform как средство для размещения данных, поскольку TPU сложно обрабатывать при использовании локальных файловых систем. Записная книжка colab доступна здесь.

Transformers теперь имеют доступ к API-интерфейсам TensorFlow - и что?

Основным преимуществом библиотеки Transformers является ее независимый от модели и простой API. Выступая в качестве интерфейса для моделей, которые получают самые современные результаты в НЛП, переключение между моделями в соответствии с поставленной задачей чрезвычайно просто.

В качестве примера приведем полный сценарий для точной настройки BERT для задачи классификации языков (MRPC):

Однако в производственной среде не хватает памяти. Вместо этого вы хотите использовать модель меньшего размера; переход на DistilBERT, например. Для этого просто замените первые две строки на эти две:

Как платформа, на которой размещено более 10 архитектур Transformer, 🤗 / Transformers упрощает использование, точную настройку и сравнение моделей, которые изменили глубинное обучение для области НЛП. Он служит бэкэнд для многих последующих приложений, которые используют модели трансформаторов и используются в производстве многими различными компаниями. Мы будем рады любым вопросам или проблемам, которые могут у вас возникнуть в нашем репозитории GitHub.