Делать крутые вещи с данными

Введение

Системы исправления грамматических ошибок (GEC) предназначены для исправления грамматических ошибок в тексте. Grammarly — пример такого продукта для исправления грамматики. Исправление ошибок может улучшить качество письменного текста в электронных письмах, сообщениях в блогах и чатах.

Задачу GEC можно рассматривать как задачу последовательности, в которой модель Transformer обучается принимать неграмматическое предложение в качестве входных данных и возвращать грамматически правильное предложение. В этом посте мы покажем, как вы можете обучить такую ​​модель и использовать веса и смещения для мониторинга производительности модели во время ее обучения. Мы также выпустили нашу обученную модель на Spaces здесь для экспериментов. Код также публикуется на Colab здесь и Github здесь.

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

Набор данных

Для обучения нашего Грамматического Корректора мы используем набор данных C4_200M, недавно выпущенный Google. Этот набор данных состоит из 200 миллионов примеров синтетически сгенерированных грамматических искажений вместе с правильным текстом.

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

Для создания искажения сначала обучается помеченная модель повреждения. Эта модель обучается на существующих наборах данных, принимая в качестве входных данных чистый текст и генерируя поврежденный текст. Например, входное предложение будет выглядеть так: «Было многоовец», и модель искажения изменит его на «Было много овец». Таким образом, он генерирует грамматически неверный вывод.

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

Правильное предложение — «Было многомного овец»

Неправильные предложения с ошибкой склонения существительного -

  1. «Было много овец»
  2. «Было много овец»

Это позволяет набору данных C4_200M иметь разнообразный набор ошибок, отражающий их относительную частоту в реальных приложениях. Чтобы узнать больше о процессе создания синтетических искажений, пожалуйста, обратитесь к оригинальной статье здесь.

Для этого сообщения в блоге мы извлекли 550 тысяч предложений из C4_200M. Набор данных C4_200M доступен в наборах данных TF. Мы извлекли нужные нам предложения и сохранили их в формате CSV. Код подготовки данных для этого отправляется в Colab здесь. Если вы заинтересованы в загрузке готовых наборов данных, они могут быть доступны здесь.

Скриншот набора данных C4_200M приведен ниже. На входе неверное предложение, на выходе грамматически правильное предложение. Эти случайные примеры показывают, что набор данных охватывает входные данные из разных областей и различных стилей письма.

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

Для этого обучения мы будем использовать универсальную модель T5 от Google.

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

Я предпочитаю T5 для многих задач по нескольким причинам: 1. Может использоваться для любой задачи преобразования текста в текст, 2. Хорошая точность в последующих задачах после тонкой настройки, 3. Легко обучается с помощью Huggingface.

Полный код для обучения модели T5 на 550 тыс. примеров из C4_200M доступен здесь на Colab. Также поделился на моем Github здесь.

Шаги высокого уровня для обучения включают в себя:

Мы устанавливаем неправильное предложение в качестве входных данных и исправленный текст в качестве метки. И входы, и цели токенизированы с помощью токенизатора T5. Максимальная длина установлена ​​на 64, поскольку большинство входных данных в C4_200M являются предложениями, и предполагается, что эта модель также будет использоваться для предложений. Фрагмент кода, выполняющего токенизацию, приведен ниже.

2. Обучение модели с помощью обучающего класса seq2seq

Мы используем обучающий класс Seq2Seq в Huggingface для создания экземпляра модели и создания экземпляра журнала для wandb. Использовать веса и смещения с HuggingFace очень просто. Все, что нужно сделать, это установить report_to = "wandb" в аргументах обучения.

3. Мониторинг и оценка модели

Мы использовали показатель Rouge в качестве метрики для оценки модели. Как видно из приведенных ниже графиков от W&B, модель достигает 72 баллов румян после 1 этапа обучения.

С его проектом можно ознакомиться на Weights and Biases здесь.

Публикация модели в Spaces

Мы отправили обученную модель в Spaces сюда, чтобы ее можно было протестировать. Как показано на снимке экрана ниже, его можно запрограммировать на возврат до 2 исправленных последовательностей.

Я протестировал эту модель на многих неправильных последовательностях и остался доволен ее работой.

Модель также доступна на Hugginface.co здесь и может быть использована напрямую. В документации к модели показаны шаги, связанные с использованием модели.

Заключение

Этот пост в блоге показывает, как легко использовать HuggingFace и WandB для обучения моделей НЛП для различных вариантов использования. Я надеюсь, что вы попробуете HuggingFace Spaces и поделитесь своими комментариями ниже о своем опыте.

В Deep Learning Analytics мы специализируемся на создании пользовательских моделей машинного обучения для различных вариантов использования. Мы сотрудничаем с клиентами по всему миру, чтобы создавать решения для их конкретных потребностей. Наша команда экспертов имеет опыт классификации текстов, перевода, реферирования, нейронного поиска и многого другого. Напишите нам по адресу [email protected], если вы видите возможность сотрудничества.

Первоначально опубликовано на https://deeplearninganalytics.org 1 апреля 2022 г.