DeepPavlov для разработчиков: #1 инструменты NLP и создания чат-ботов

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Всем привет! Мы открываем цикл статей, посвященных решению практических задач, связанных с обработкой естественного языка (Natural Language Processing или просто NLP) и созданием диалоговых агентов (чат-ботов) с помощью open-source библиотеки DeepPavlov, которую разрабатывает наша команда лаборатории Нейронных систем и глубокого обучения МФТИ. Главная цель цикла — познакомить широкий круг разработчиков с DeepPavlov и показать, как можно решать прикладные задачи NLP, не обладая при этом глубокими познаниями в Machine Learning и PhD in Mathematics. К NLP задачам относят определение тональности текста, парсинг именованных сущностей, определение того, что хочет от вашего бота собеседник: заказать пиццу или получить справочную информацию и многое другое. Более подробно про задачи и методы NLP вы можете прочитать тут. В этой статье мы расскажем, как запустить REST север с предобученными моделями NLP, готовыми к использованию без какой-либо дополнительной настройки или обучения.

Установка DeepPavlov

Здесь и далее будут приведены инструкции для Linux. Для Windows смотрите нашу документацию

  • Создайте и активируйте виртуальное окружение с текущей поддерживаемой версией Python:

    virtualelnv env -p python3.7 source env/bin/activate
  • Установите DeepPavlov в виртуальное окружение:

    pip install deeppavlov 

Запуск REST сервера с моделью DeepPavlov

Перед тем, как мы в первый раз запустим сервер с моделью DeepPavlov, будет полезным рассказать о некоторых особенностях архитектуры библиотеки.

Любая модель в DP состоит из:

  • Кода на Python;
  • Скачиваемых компонент — сериализованных результатов обучения на конкретных данных (эмбеддинги, веса нейронных сетей и проч.);
  • Конфигурационного файла (далее — конфига), в котором содержится информация об используемых моделью классах, URL скачиваемых компонент, зависимостях Python и прочем.

Подробнее о том, что находится под капотом DeepPavlov мы расскажем в следующих статьях, пока что нам достаточно знать, что:

  • Любая модель в DeepPavlov идентифицируется именем её конфига;
  • Для запуска модели необходимо скачать её компоненты с серверов DeepPavlov;
  • Так же для запуска модели необходимо установить используемые ею библиотеки Python.

Первой моделью, которую мы запустим, будет мультиязычный Named Entity Recognition (NER). Модель классифицирует слова текста по типу именованных сущностей, к которым они принадлежат (имена собственные, географические названия, названия валют и другие). Имя конфига для самой свежей на текущий момент версии NER:

ner_ontonotes_bert_mult 

Запускаем REST сервер с моделью:

  1. Устанавливаем в активное виртуальное окружение зависимости модели, указанные в её конфиге:

    python -m deeppavlov install ner_ontonotes_bert_mult 
  2. Скачиваем сериализованные компоненты модели с серверов DeepPavlov:

    python -m deeppavlov download ner_ontonotes_bert_mult 

    Сериализованные компоненты будут скачаны в домашнюю директорию DeepPavlov, которая по умолчанию находится
    ~/.deeppavlov
    При скачивании хэш уже скаченных компонентов сверяется с хэшами компонентов, находящихся на сервере. В случае совпадения скачивание пропускается и используются уже имеющиеся файлы. Размеры скачиваемых компонент могут варьироваться в среднем от 0.5 до 8 Gb, в некоторых случаях после разархивирования достигая 20 Gb.
  3. Запускаем REST-сервер с моделью:

    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005 

В результате выполнения этой команды будет запущен REST сервер с моделью на 5005 порту хост-машины (порт по умолчанию — 5000).

После инициализации модели, Swagger с документацией API и возможностью протестировать, можно будет найти по URL http://127.0.0.1:5005. Протестируем модель, отправив на эндпоинт http://127.0.0.1:5005/model POST запрос со следующим JSON содержимым:

{   "x": [     "В МФТИ можно добраться на электричке с Савёловского Вокзала.",     "В юго-западной Руси стог жита оценен в 15 гривен"   ] }

В ответ мы должны получить такой JSON:

[   [     ["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],     ["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]   ],   [     ["В", "юго", "-", "западной", "Руси", "стог", "жита", "оценен", "в", "15", "гривен"],     ["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]   ] ]

На этих примерах разберём REST API DeepPavlov.

API DeepPavlov

Каждая модель DeepPavlov имеет как минимум один входящий аргумент. В REST API аргументы именованные, их имена — ключи входящего словаря. В большинстве случаев аргумент — это текст, который необходимо обработать. Подробнее про аргументы и возвращаемые моделями значения можно узнать в разделе MODELS документации DeepPavlov В примере в аргумент x был передан список из двух строк, на каждую из которых была выдана отдельная разметка. В DeepPavlov все модели принимают на вход список (батч) значений, обрабатываемых независимо.

Термин “батч” (batch) относится к области машинного обучения и подразумевает под собой пакет из независимых входящих значений, обрабатываемых алгоритмом или нейронной сетью одновременно. Такой подход позволяет сократить (зачастую — существенно) время обработки моделью одного элемента батча по сравнению с этим же значением, переданным на вход отдельно. Но результат обработки выдаётся только после обработки всех элементов. Поэтому при формировании входящего батча будет необходимо учитывать скорость работы модели и требуемое время обработки каждого его отдельного элемента.

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

В приведённом примере результатом работы модели была разбивка каждой строки на токены (слова и знаки препинания) и классификация токена относительно именованной сущности (название организации, валюта), которую он представляет. На данный момент модель ner_ontonotes_bert_mult способна распознавать 18 типов именованных сущностей, подробное описание можно найти тут.

Другие out-of-the-box модели DeepPavlov

Помимо NER в DeepPavlov на момент написания статьи доступны следующие out-of the-box модели:

Text Question Answering

Ответ на вопрос к тексту фрагментом этого текста. Конфиг модели: squad_ru_bert_infer

Пример запроса:

{   "context_raw": [     "DeepPavlov разрабатывается лабораторией МФТИ.",     "В юго-западной Руси стог жита оценен в 15 гривен."   ],   "question_raw": [     "Кем разрабатывается DeepPavlov?",     "Сколько стоил стог жита на Руси?"   ] }

Результат:

[   ["лабораторией МФТИ", 27, 31042.484375],   ["15 гривен", 39, 1049.598876953125] ] 

Insult Detection

Выявление наличия оскорбления лица, к которому адресован текст (на момент написания статьи — только для английского языка). Конфиг модели: insults_kaggle_conv_bert

Пример запроса:

 {   "x": [     "Money talks, bullshit walks.",     "You are not the brightest one."   ] }

Результат:

[   ["Not Insult"],   ["Insult"] ]

Sentiment Analysis

Классификация тональности текста (положительная, нейтральная, негативная). Конфиг модели: rusentiment_elmo_twitter_cnn

Пример запроса:

{   "x": [     "Мне нравится библиотека DeepPavlov.",     "Я слышал о библиотеке DeepPavlov.",     "Меня бесят тролли и анонимусы."   ] }

Результат:

[   ["positive"],   ["neutral"],   ["negative"] ]

Paraphrase Detection

Определение, имеют ли два разных текста одинаковое значение. Конфиг модели: stand_paraphraser_ru

Запрос:

{   "text_a": [     "Город погружается в сон, просыпается Мафия.",     "Президент США пригрозил расторжением договора с Германией."   ],   "text_b": [     "Наступает ночь, все жители города пошли спать, а преступники проснулись.",     "Германия не собирается поддаваться угрозам со стороны США."   ] }

Результат:

[   [1],   [0] ]

Актуальный список всех out-of-the-box моделей DeepPavlov можно всегда найти здесь.

Заключение

В этой статье мы познакомились с API DeepPavlov и некоторыми возможностями библиотеки по обработке текста, предоставляемые “из коробки”. При этом надо иметь в виду, что для любой задачи NLP наилучший результат будет достигаться при обучении модели на наборе данных, соответствующем предметной области (домену) задачи. Кроме того, ещё больше моделей в принципе нельзя обучить на все случаи жизни.

В следующих статьях мы рассмотрим дополнительные настройки библиотеки, запуск DeepPavlov из Docker, а после перейдём к обучению моделей. И не забывайте, что у DeepPavlov есть форум – задавайте свои вопросы относительно библиотеки и моделей. Спасибо за внимание!


Источник: habr.com

Комментарии: