DeepPavlov за разработчици: #1 инструменти за NLP и създаване на чат-ботове

Здравейте на всички! Започваме цикъл от статии, посветени на решаването на практически задачи, свързани с обработката на естествен език (Natural Language Processing или просто NLP) и създаването на диалогови агенти (чат-ботове) с помощта на open-source библиотеката DeepPavlov, която нашият екип от лабораторията по Невронни системи и Дълбоко обучение на МФТИ разработва. Основната цел на цикъла е да запознае широка аудитория от разработчици с DeepPavlov и да покаже как могат да се решават практични задачи на NLP, без да имате дълбоки познания по Машинно обучение и докторска степен по Математика.

Към задачите на NLP се отнасят определяне на настроението на текста, парсинг на именувани ентитети, разпознаване на желанията на вашия бот, дали собеседникът иска да поръча пица или да получи справочна информация и много други. По-подробно за задачите и методите на NLP можете да прочетете тук.

В тази статия ще разкажем как да стартирате REST сървър с предварително обучени модели на NLP, готови за използване без допълнителна настройка или обучение.

DeepPavlov за разработчици: #1 инструменти за NLP и създаване на чат-ботове

Инсталиране на DeepPavlov

Тук и в бъдеще ще бъдат предоставени инструкции за Linux. За Windows вижте нашето документацията

  • Създайте и активирайте виртуална среда с текущата поддържана версия на Python:
    virtualenv 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", "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 типа именувани сущности, подробното описание може да се намери тук.

Други готови модели на DeepPavlov

Освен NER, в DeepPavlov към момента на написване на статията са налични следните готови модели:

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.",
    "Дразнят ме троловете и анонимниците."
  ]
}

Резултат:

[
  ["позитивен"],
  ["неутрален"],
  ["негативен"]
]

Откритие на парафрази

Определяне дали два различни текста имат едно и също значение. Конфигурация на модела: stand_paraphraser_ru

Запитване:

{
  "text_a": [
    "Градът заспива, мафията се събужда.",
    "Президентът на САЩ заплаши с прекратяване на договора с Германия."
  ],
  "text_b": [
    "Настъпва нощ, всички жители на града отиват да спят, а престъпниците се събуждат.",
    "Германия не възнамерява да се поддаде на заплахите от страна на САЩ."
  ]
}

Резултат:

[
  [1],
  [0]
]

Актуален списък на всички out-of-the-box модели DeepPavlov може винаги да бъде намерен тук.

Заключение

В тази статия се запознахме с API на DeepPavlov и някои от възможностите на библиотеката за обработка на текст, предоставяни “из коробка”. Трябва да се има предвид, че за всяка задача в NLP най-добър резултат ще бъде постигнат при обучение на модела с набор от данни, съответстващ на тематичната област (домен) на задачата. Освен това, още повече модели не могат да бъдат обучени за всички случаи на живота.

В следващите статии ще разгледаме допълнителни настройки на библиотеката, стартиране на DeepPavlov от Docker, а след това ще преминем към обучението на моделите. И не забравяйте, че DeepPavlov има форум – задавайте своите въпроси относно библиотеката и моделите. Благодаря за вниманието!

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

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster