DeepPavlov за програмери: # 1 NLP алатки и создавање чет-бот

Здраво на сите! Отвораме серија написи посветени на решавање на практични проблеми поврзани со обработката на природниот јазик (обработка на природен јазик или едноставно НЛП) и создаваме агенти за дијалог (чет-ботови) користејќи библиотека со отворен код Дип Павлов, кој го развива нашиот тим во Лабораторијата за невронски системи и длабоко учење MIPT. Главната цел на серијата е да го запознае Дип Павлов со широк опсег на програмери и да покаже како можете да ги решите применетите НЛП проблеми без да имате длабоко знаење за машинско учење и докторат по математика.

Задачите на НЛП вклучуваат одредување на чувството на текстот, парсирање на именувани ентитети, одредување што сака соговорникот од вашиот бот: нарачајте пица или добијте информации во позадина и многу повеќе. Можете да прочитате повеќе за задачите и методите на НЛП тука.

Во оваа статија, ќе ви покажеме како да стартувате сервер REST со претходно обучени NLP модели, подготвени за употреба без дополнителна конфигурација или обука.

DeepPavlov за програмери: # 1 NLP алатки и создавање чет-бот

Инсталација на DeepPavlov

Овде и подолу, ќе бидат дадени инструкции за Linux. За Windows, видете го нашиот документација

  • Креирајте и активирајте виртуелна средина со тековната поддржана верзија на Python:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Инсталирајте го DeepPavlov во виртуелна средина:
    pip install deeppavlov
    

Лансирање на REST сервер со моделот DeepPavlov

Пред да започнеме сервер со моделот DeepPavlov за прв пат, ќе биде корисно да зборуваме за некои карактеристики на архитектурата на библиотеката.

Секој модел во ДП се состои од:

  • Пајтон код;
  • Компоненти за преземање - сериски резултати од обуката за специфични податоци (вградувања, тежини на невронски мрежи итн.);
  • Конфигурациска датотека (во натамошниот текст: конфигурација), која содржи информации за класите што ги користи моделот, URL-адреси на преземените компоненти, зависности од Python итн.

За тоа што се наоѓа под хаубата на Дип Павлов ќе ви кажеме во следните написи, за сега доволно е да го знаеме тоа:

  • Секој модел во DeepPavlov се идентификува со името на неговата конфигурација;
  • За да го стартувате моделот, треба да ги преземете неговите компоненти од серверите DeepPavlov;
  • Исто така, за да го извршите моделот, треба да ги инсталирате библиотеките на Python што ги користи.

Првиот модел што ќе го лансираме ќе биде повеќејазичен Препознавање именуван ентитет (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"]
  ]
]

Користејќи ги овие примери, ќе го анализираме DeepPavlov REST API.

API DeepPavlov

Секој модел на Дип Павлов има барем еден влезен аргумент. Во REST API, аргументите се именуваат, нивните имиња се клучевите на дојдовниот речник. Во повеќето случаи, аргументот е текстот што треба да се обработи. Повеќе информации за аргументите и вредностите што ги враќаат моделите може да најдете во делот МОДЕЛИ во документацијата Дип Павлов

Во примерот, листа од две низи беше предадена на аргументот x, од кои на секоја и беше дадена посебна ознака. Во DeepPavlov, сите модели земаат како влезен список (серија) на вредности што се обработуваат независно.

Терминот „серија“ се однесува на полето на машинско учење и се однесува на серија независни влезни вредности обработени од алгоритам или невронска мрежа истовремено. Овој пристап ви овозможува да го намалите (често значително) времето кога моделот обработува еден елемент од серија во споредба со истата вредност што се пренесува на влезот одделно. Но, резултатот од обработката се издава само откако ќе се обработат сите елементи. Затоа, при генерирање на дојдовна серија, ќе биде неопходно да се земе предвид брзината на моделот и потребното време за обработка за секој од неговите поединечни елементи.

Ако има неколку аргументи за моделот DeepPavlov, секој од нив добива своја серија на вредности, а на излезот моделот секогаш произведува една серија одговори. Елементите на излезната серија се резултати од обработката на елементите на влезните серии со истиот индекс.

Во примерот погоре, резултатот од моделот беше да се разложи секоја низа на токени (зборови и интерпункциски знаци) и да се класифицира токенот во однос на именуваниот ентитет (име на организацијата, валута) што го претставува. Моментално моделот ner_ontonotes_bert_mult способен да препознае 18 типови на именувани ентитети, може да се најде детален опис тука.

Други модели кои се надвор од кутијата на Дип Павлов

Покрај NER, во DeepPavlov во моментот на пишување се достапни следните модели кои не се достапни во кутијата:

Текст прашање Одговарање

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

Пример барање:

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

Резултатот е:

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

Откривање на навреда

Откривање на присуство на навреда на лицето на кое му е упатен текстот (во моментот на пишување - само за англиски јазик). Конфигурација на модел: insults_kaggle_conv_bert

Пример барање:


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

Резултатот е:

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

Анализа на чувството

Класификација на чувството за текст (позитивно, неутрално, негативно). Конфигурација на моделот: rusentiment_elmo_twitter_cnn

Пример барање:

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

Резултатот е:

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

Откривање парафрази

Утврдување дали два различни текста имаат исто значење. Конфигурација на моделот: stand_paraphraser_en

Барање:

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

Резултатот е:

[
  [1],
  [0]
]

Секогаш може да се најде тековната листа на сите модели на DeepPavlov надвор од кутијата тука.

Заклучок

Во оваа статија се запознавме со DeepPavlov API и некои од можностите за обработка на текст на библиотеката обезбедени надвор од кутијата. Треба да се има на ум дека за која било НЛП задача, најдобриот резултат ќе се постигне при обука на моделот на збир на податоци што одговара на предметната област (домен) на задачата. Покрај тоа, уште повеќе модели, во принцип, не можат да бидат обучени за сите ситуации.

Во следните статии ќе разгледаме дополнителни поставки на библиотеката, лансирање на DeepPavlov од Docker, а потоа ќе преминеме на модели за обука. И не заборавајте дека Дип Павлов има форум – поставувајте ги вашите прашања во врска со библиотеката и моделите. Ви благодариме за вниманието!

Извор: www.habr.com

Додадете коментар