Практическое знакомство с новой открытой библиотекой НЛП PyText от Facebook, основанной на PyTorch.

После выпуска PyTorch 1.0 компания Facebook Research недавно открыла исходный код своей платформы моделирования естественного языка, основанной на PyTorch, PyText. Он пытается преодолеть разрыв между экспериментированием и быстрым развертыванием/производством, что было сложно с существующими библиотеками.

PyText направлен на достижение следующих целей:

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

PyText имеет большую поддержку для быстрого прототипирования и работает быстрее, чем другие доступные библиотеки естественной обработки (NLP). Вот сравнение PyText с другими библиотеками НЛП:

Facebook теперь использует PyText на своем портале, который является службой видеозвонков, и в своей функции предложений M в Messenger. Функция предложений M генерирует более миллиарда ежедневных прогнозов, что демонстрирует ее способность работать на производственном уровне и по-прежнему имеет низкую задержку.

PyText построен на PyTorch и подключается к ONNX и Caffe2. С помощью PyText исследователи и инженеры ИИ могут преобразовывать модели PyTorch в ONNX, а затем экспортировать их как Caffe2 для масштабного развертывания в производственной среде.

PyText опирается на компоненты, показанные на рисунке ниже:

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

Обработчик данных: обрабатывает необработанные входные данные и подготавливает пакеты тензоров для подачи в модель.

Модель: определяет архитектуру нейронной сети.

Оптимизатор: инкапсулирует оптимизацию параметров модели с использованием потерь при прямом проходе модели.

Metric Reporter: реализует вычисление соответствующих показателей и составление отчетов для моделей.

Обучение: использует обработчик данных, модель, потери и оптимизатор для обучения модели и выполнения выбора модели путем проверки по заданному набору.

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

Exporter: экспортирует обученную модель PyTorch в граф Caffe2 с помощью ONNX.

Давайте начнем с создания классификатора настроений с помощью PyText, это просто!

Чтобы установить PyText на свой компьютер, введите следующее в командной строке через pip:

pip install pytext-nlp

Прежде чем начать, давайте подготовим данные. Здесь мы будем использовать обзоры Amazon, которые содержат положительные и отрицательные отзывы о различных продуктах и ​​имеют общее количество примеров 10000.
Для PyText требуется .tsv (значения, разделенные табуляцией, следующим образом):

___label___ 'This is a Text'

Вот как выглядит наш набор данных (формат .tsv):

Чтобы определить модель в PyText, он использует файл конфигурации (задача) в формате .json, где вы можете определить свою модель.

Вот файл конфигурации, в котором мы предоставляем данные обучения, проверки и тестирования, а также другие детали, такие как количество эпох, размер пакета и оптимизатор.

{
  "task": {
    "DocClassificationTask": {
      "data_handler": {
        "train_path": "data/train.tsv",
        "eval_path": "data/eval.tsv",
        "test_path": "data/test.tsv",
        "train_batch_size": 128,
        "eval_batch_size": 128,
        "test_batch_size": 128
},
      "trainer": {
        "epochs": 20
      },
      "optimizer":{
        "lr": 0.001,
        "type": "adam",
        "weight_decay": 0.000004
      }
    }
  }
}

Теперь, чтобы обучить модель, просто введите в командной строке:

pytext train < config.json

И бум, это должно быть обучение. По умолчанию он использует двунаправленную модель LSTM, и с 15 эпохами модель достигает около 83%, что хорошо, учитывая данные, поскольку мы не обрабатывали текстовые данные предварительно.

PyText экспортирует модель как объект Caffe2, чтобы сохранить обученную модель:

pytext export --output-path model.c2 < config.json

Для прогнозирования мы используем объект прогнозирования PyText, для которого требуется сохраненная модель и файл конфигурации (.json). Вот небольшой скрипт на Python для прогнозирования тональности данного предложения/текста:

Вышеупомянутые четыре строки — это то, что требуется для прогнозирования обзора на основе предыдущей обученной модели.

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

Вывод

Это было базовое руководство для изучения PyText и начала работы с базовым классификатором. Я буду писать гораздо больше о PyText в ближайшие недели, поэтому убедитесь, что вы следите за мной, чтобы узнать больше о PyText и его приложениях.

Репозиторий GitHub: https://github.com/jayrodge/PyText-Classifier

Если вы нашли это полезным, поделитесь им в Linkedin, Twitter, Facebook или на любом из ваших любимых форумов.

Свяжитесь со мной в Linkedin, about.me