Хотите использовать модели Transformer для НЛП? Страницы кода вас сбили? Больше нет, потому что «Простые трансформеры» уже работают. Запускайте, тренируйте и оценивайте Transformers с помощью всего 3 строк кода!

Предисловие

Библиотека Simple Transformers построена как оболочка для превосходной библиотеки Transformers от Hugging Face. Я бесконечно благодарен за тяжелую работу, проделанную ребятами из Hugging Face, чтобы публика могла легко получить доступ к моделям Transformer и использовать их. Не знаю, что бы я делал без вас, ребята!

Вступление

Я считаю, что будет справедливо сказать, что успех моделей Transformer был не чем иным, как феноменальным в продвижении области обработки естественного языка. Они не только продемонстрировали ошеломляющие скачки в производительности по многим задачам НЛП, для решения которых они были созданы, но и предварительно обученные Трансформеры также почти невероятно хороши в трансферном обучении. Это означает, что каждый может воспользоваться преимуществами долгих часов и ошеломляющей вычислительной мощности, которые были вложены в обучение этих моделей для выполнения бесчисленного множества задач НЛП. Вам больше не нужны глубокие карманы Google или Facebook, чтобы построить современную модель решения вашей проблемы НЛП!

По крайней мере, на это можно надеяться. Правда в том, что для того, чтобы эти модели работали, по-прежнему требуются значительные технические ноу-хау. Если у вас нет опыта или хотя бы опыта в глубоком обучении, это может показаться сложной задачей. Я рад сообщить, что мои предыдущие статьи о Трансформерах (здесь и здесь), кажется, помогли многим людям начать использовать Трансформеры. Интересно, что я заметил, что люди разного происхождения (лингвистика, медицина и бизнес) пытались использовать эти модели для решения проблем в своей собственной области. Однако технические препятствия, которые необходимо преодолеть, чтобы адаптировать Transformers к конкретным задачам, нетривиальны и могут даже обескураживать.

Простые трансформеры

Эта загадка была основной мотивацией моего решения разработать простую библиотеку для выполнения (бинарной и многоклассовой) классификации текста (наиболее распространенной задачи НЛП, которую я видел) с помощью трансформаторов. Идея заключалась в том, чтобы сделать его как можно более простым, что означает абстрагирование от многих деталей реализации и технических деталей. Реализацию библиотеки можно найти на Github. Я настоятельно рекомендую вам взглянуть на нее, чтобы лучше понять, как все работает, хотя для использования библиотеки не обязательно знать внутренние детали.

С этой целью была написана библиотека Simple Transformers, чтобы модель Transformer могла быть инициализирована, обучена на заданном наборе данных и оценена на данном наборе данных, всего за 3 строки кода! Посмотрим, как это делается?

Установка

  1. Установите Anaconda или Miniconda Package Manager отсюда
  2. Создайте новую виртуальную среду и установите необходимые пакеты.
    conda create -n transformers python pandas tqdm
    conda activate transformers
    При использовании cuda:
    conda install pytorch cudatoolkit=10.0 -c pytorch
    else:
    conda install pytorch cpuonly -c pytorch
    conda install -c anaconda scipy
    conda install -c anaconda scikit-learn
    pip install transformers
    pip install tensorboardx
  3. Установите simpletransformers.
    pip install simpletransformers

использование

Краткий обзор того, как использовать эту библиотеку в наборе данных Yelp Reviews.

  1. Загрузите Набор данных обзоров Yelp.
  2. Извлеките train.csv и test.csv и поместите их в каталог data/.

(Пользователи Bash могут использовать этот скрипт для загрузки набора данных)

Ничего особенного, мы просто получаем данные в правильном виде. Это все, что вам нужно сделать для любого набора данных.

  • Создайте два объекта pandas DataFrame для частей train и eval.
  • В каждом DataFrame должно быть два столбца. Первый столбец содержит текст, который вы хотите обучить или оценить, и имеет тип данных str. Второй столбец имеет соответствующую метку и тип данных int.
    Обновление: теперь рекомендуется называть столбцы как labels и text, а не полагаться на порядок столбцов.

Когда данные в порядке, пора обучить и оценить модель.

Вот и все!

Для прогнозирования другого текста TransformerModel поставляется с predict(to_predict) методом, который, учитывая список текста, возвращает прогнозы модели и необработанные выходные данные модели.

Подробнее обо всех доступных методах читайте в репозитории Github. Репо также содержит минимальный пример использования библиотеки.

Настройки по умолчанию и как их изменить

Используемые по умолчанию аргументы приведены ниже. Любой из них можно переопределить, передав dict, содержащий соответствующие пары ключ / значение, в метод инициализации TransformerModel. (см. пример ниже)

self.args = {
   'model_type':  'roberta',
   'model_name': 'roberta-base',
   'output_dir': 'outputs/',
   'cache_dir': 'cache/',
   'fp16': True,
   'fp16_opt_level': 'O1',
   'max_seq_length': 128,
   'train_batch_size': 8,
   'eval_batch_size': 8,
   'gradient_accumulation_steps': 1,
   'num_train_epochs': 1,
   'weight_decay': 0,
   'learning_rate': 4e-5,
   'adam_epsilon': 1e-8,
   'warmup_ratio': 0.06,
   'warmup_steps': 0,
   'max_grad_norm': 1.0,
   'logging_steps': 50,
   'evaluate_during_training': False,
   'save_steps': 2000,
   'eval_all_checkpoints': True,
   'use_tensorboard': True,
   'overwrite_output_dir': False,
   'reprocess_input_data': False,
}

Чтобы переопределить любой из них, просто передайте в TransformerModel словарь с соответствующей парой ключ / значение.

Для объяснения того, что делает каждый аргумент, обратитесь к репозиторию Github.

Обновление: текущие аргументы см. в документации.

Заключение

Вот и все, ребята! Самый простой способ использовать модели Transformer, о которых я знаю.