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

Модель T5 (Text-To-Text Transfer Transformer) явилась результатом крупномасштабного исследования (бумажного), проведенного с целью изучения ограничений трансферного обучения. Он основан на популярных архитектурах, таких как GPT, BERT и RoBERTa (и это лишь некоторые из них), в которых с невероятным успехом использовалось трансферное обучение. Хотя BERT-подобные модели можно настроить для выполнения множества задач, ограничения архитектуры означают, что каждая модель может выполнять только одну задачу.

Обычно это делается путем добавления слоя для конкретной задачи поверх модели Transformer. Например, преобразователь BERT можно адаптировать для двоичной классификации, добавив полностью связанный слой с двумя выходными нейронами (соответствующими каждому классу). Модель T5 отходит от этой традиции, переосмысливая все задачи НЛП как задачи преобразования текста в текст. В результате получается общая структура для любой задачи НЛП в качестве входных данных для модели, а выходными данными модели всегда является строка. В примере двоичной классификации модель T5 просто выведет строковое представление класса (т.е. "0" или "1").

Поскольку форматы ввода и вывода идентичны для любой задачи НЛП, одну и ту же модель T5 можно научить выполнять несколько задач! Чтобы указать, какую задачу следует выполнить, мы можем просто добавить префикс (строку) к входным данным модели. Анимация (показанная ниже) из статьи в блоге Google AI демонстрирует эту концепцию.

В этой статье мы будем использовать эту технику для обучения одной модели T5, способной выполнять 3 задачи НЛП, бинарную классификацию, классификацию с несколькими метками и регрессию.

Весь код также можно найти на Github.

Спецификация задачи

Бинарная классификация

Цель бинарной классификации в НЛП - разделить данную текстовую последовательность на один из двух классов. В нашей задаче мы будем использовать набор данных Yelp Reviews, чтобы классифицировать тональность текста как положительную ("1") или отрицательную ("0").

Классификация по нескольким меткам

В классификации с несколькими метками данная текстовая последовательность должна быть помечена правильным подмножеством набора предопределенных меток (обратите внимание, что подмножество может включать как нулевой набор, так и сам полный набор меток ). Для этого мы будем использовать набор данных Toxic Comments, где каждый текст может быть помечен любым подмножеством меток toxic, severe_toxic, obscene, threat, insult, identity_hate.

Регресс

В задачах регрессии целевая переменная - это непрерывное значение. В нашей задаче мы будем использовать набор данных STS-B (Semantic Textual Similarity Benchmark), цель которого - предсказать сходство двух предложений. Сходство обозначается непрерывным значением между 0 и 5.

Подготовка данных

Поскольку мы собираемся работать с 3 наборами данных, мы поместим их в 3 отдельных подкаталога внутри каталога data.

  • data/binary_classification
  • data/multilabel_classification
  • data/regression

Скачивание

  1. Загрузите Набор данных обзоров Yelp.
  2. Извлеките train.csv и test.csv в data/binary_classification.
  3. Загрузите набор данных Toxic Comments.
  4. Распакуйте csv файлы в data/multilabel_classification.
  5. Скачать Датасет STS-B.
  6. Распакуйте csv файлы в data/regression.

Объединение наборов данных

Как упоминалось ранее, входы и выходы модели T5 всегда текстовые. Конкретная задача указывается с помощью текста префикса, который позволяет модели знать, что ей следует делать с вводом.

Формат входных данных для модели T5 в Simple Transformers отражает этот факт. Входными данными является фрейм данных Pandas с 3 столбцами - prefix, input_text иtarget_text. Это позволяет легко обучить модель нескольким задачам, так как вам просто нужно изменить prefix.

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

Это дает нам фрейм данных с 3 уникальными префиксами, а именно binary classification, multilabel classification и similarity. Обратите внимание, что сами префиксы довольно произвольны, важно убедиться, что у каждой задачи есть свой уникальный префикс. Входные данные модели будут иметь следующий формат:

<prefix>: <input_text>

": " добавляется автоматически при обучении.

Еще несколько замечаний:

  • Результатом задачи классификации по нескольким меткам является список предсказанных меток, разделенных запятыми (toxic, severe_toxic, obscene, threat, insult, identity_hate). Если метка не прогнозируется, результат должен быть clean.
  • input_text для задачи на подобие включает оба предложения, как показано в следующем примере:
    sentence1: A man plays the guitar. sentence2: The man sang and played his guitar.
  • Результатом задачи подобия является число (в виде строки) от 0,0 до 5,0 с шагом 0,2. (Например, 0.0, 0.4, 3.0, 5.0). Это соответствует тому же формату, который использовали авторы статьи T5.

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

Например;



Единственное ограничение - воображение! (Ну, воображение и вычислительные ресурсы, но это уже другая история) 😅

Возвращаясь к данным, запуск записной книжки должен был дать вам train.tsv и eval.tsv файлы, которые мы будем использовать для обучения нашей модели в следующем разделе!

Настраивать

Мы будем использовать библиотеку Простые трансформеры (на основе обнимающего лица Трансформеры) для обучения модели T5.

Приведенные ниже инструкции установят все требования.

  1. Установите Anaconda или Miniconda Package Manager отсюда.
  2. Создайте новую виртуальную среду и установите пакеты.
    conda create -n simpletransformers python
    conda activate simpletransformers
    conda install pytorch cudatoolkit=10.1 -c pytorch
  3. Установите простые трансформаторы.
    pip install simpletransformers

См. документацию по установке

Обучение модели T5

Как всегда, обучить модель с помощью Simple Transformers довольно просто.

Большинство используемых здесь аргументов довольно стандартны.

  • max_seq_length: выбрано таким образом, что большинство сэмплов не усекаются. Увеличение длины последовательности значительно влияет на потребление памяти моделью, поэтому обычно лучше сделать ее как можно короче (в идеале без усечения входных последовательностей).
  • train_batch_size: Чем больше, тем лучше (если он подходит для вашего графического процессора)
  • eval_batch_size: та же сделка, что и train_batch_size
  • num_train_epochs: Обучение в течение более чем одной эпохи, вероятно, улучшит производительность модели, но, очевидно, также увеличит время обучения (около 7 часов на эпоху на RTX Titan).
  • evaluate_during_training: Мы будем периодически проверять модель на основе тестовых данных, чтобы увидеть, как она обучается.
  • evaluate_during_training_steps: Вышеупомянутый период, в течение которого тестируется модель.
  • evaluate_during_training_verbose: Покажи нам результаты, когда тест будет закончен.
  • use_multiprocessing: Использование многопроцессорной обработки значительно сокращает время, необходимое для токенизации (выполняется до начала обучения), однако в настоящее время это вызывает проблемы с реализацией T5. Итак, на данный момент никакой многопроцессорности. 😢
  • fp16: FP16 или обучение со смешанной точностью снижает потребление памяти при обучении моделей (это означает, что возможны пакеты большего размера). К сожалению, fp16 обучение с T5 в настоящее время нестабильно, поэтому оно также отключено.
  • save_steps: установка -1 означает, что контрольные точки не сохраняются.
  • save_eval_checkpoints: По умолчанию контрольная точка модели сохраняется при выполнении оценки во время обучения. Поскольку этот эксперимент проводится только для демонстрации, давайте не будем тратить место на сохранение этих контрольных точек.
  • save_model_every_epoch: У нас всего 1 эпоха, поэтому нет. Это тоже не нужно.
  • reprocess_input_data: определяет, загружаются ли функции из кеша (сохраняются на диск) или выполняется повторная разметка входных последовательностей. Это действительно важно только при выполнении нескольких прогонов.
  • overwrite_output_dir: при этом будут перезаписаны все ранее сохраненные модели, если они находятся в одном и том же каталоге вывода.
  • wandb_project: Используется для визуализации прогресса тренировки.

Что касается визуализации, то мои успехи в тренировках вы можете проверить здесь. Спасибо W&B за их потрясающую библиотеку!

Тестирование модели Т5

Учитывая тот факт, что мы имеем дело с несколькими задачами, рекомендуется использовать подходящие показатели для оценки каждой задачи. Имея это в виду, мы будем использовать следующие показатели:

Обратите внимание, что ": “ вставляется между prefix и input_text при подготовке данных. Это делается автоматически при обучении, но для прогнозирования необходимо обрабатывать вручную.

Если вы хотите узнать больше об аргументах декодирования (num_beams, do_sample, max_length, top_k, top_p), обратитесь к этой статье.

Пора посмотреть, как справилась наша модель!

-----------------------------------
Results: 
Scores for binary classification:
F1 score: 0.96044512420231
Accuracy Score: 0.9605263157894737
Scores for multilabel classification:
F1 score: 0.923048001002632
Exact matches: 0.923048001002632
Scores for similarity:
Pearson Correlation: 0.8673017763553101
Spearman Correlation: 0.8644328787107548

Модель неплохо справляется с каждой задачей, несмотря на то, что ее обучают по 3 отдельным задачам! В следующем разделе мы кратко рассмотрим, как мы можем попытаться еще больше повысить производительность модели.

Заключительные мысли

Возможные улучшения

Потенциальная проблема, которая возникает при смешивании задач, - это несоответствие между размерами наборов данных, используемых для каждой задачи. Мы можем увидеть эту проблему в нашем наборе данных, посмотрев на количество обучающих выборок.

binary classification        560000
multilabel classification    143613
similarity                     5702

Набор данных существенно несбалансирован из-за тяжелого положения similarity задачи, которое кажется особенно ужасным! Это хорошо видно по оценкам, когда задача similarity отстает от других (хотя важно отметить, что мы не рассматриваем одни и те же показатели между задачами).

Возможным решением этой проблемы может быть передискретизация задач similarity, чтобы модель.

В дополнение к этому, увеличение количества эпох обучения (и настройка других гиперпараметров) также может улучшить модель.

Наконец, настройка параметров декодирования также может привести к лучшим результатам.

Подведение итогов

Преобразование текста в текст модели T5 открывает путь к применению Transformers и NLP для решения широкого круга задач практически без необходимости настройки. Модель T5 хорошо работает, даже когда одна и та же модель используется для выполнения нескольких задач!

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

использованная литература

  1. Изучение пределов трансферного обучения с помощью унифицированного преобразователя текста в текст - https://arxiv.org/abs/1910.10683
  2. Блог Google AI - https://ai.googleblog.com/2020/02/exploring-transfer-learning-with-t5.html