ДеепПавлов за програмере: #1 НЛП алати и креирање цхатбот-а

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

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

У овом чланку ћемо вам показати како да покренете РЕСТ сервер са унапред обученим НЛП моделима, спремним за употребу без икакве додатне конфигурације или обуке.

ДеепПавлов за програмере: #1 НЛП алати и креирање цхатбот-а

Инсталација ДеепПавлова

Овде и испод ће бити дата упутства за Линук. За Виндовс, погледајте нашу документација

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

Покретање РЕСТ сервера са моделом ДеепПавлов

Пре него што први пут покренемо сервер са моделом ДеепПавлов, биће корисно да разговарамо о неким карактеристикама архитектуре библиотеке.

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

  • Питхон код;
  • Компоненте које се могу преузети – серијализовани резултати обуке на специфичним подацима (уградње, тежине неуронских мрежа, итд.);
  • Конфигурациони фајл (у даљем тексту цонфиг), који садржи информације о класама које модел користи, УРЛ-ове преузетих компоненти, Питхон зависности итд.

Више о томе шта се крије испод хаубе ДеепПавлова ћемо вам рећи у следећим чланцима, за сада нам је довољно да знамо да:

  • Сваки модел у ДеепПавлову се идентификује по имену његове конфигурације;
  • Да бисте покренули модел, потребно је да преузмете његове компоненте са ДеепПавлов сервера;
  • Такође, да бисте покренули модел, потребно је да инсталирате Питхон библиотеке које користи.

Први модел који ћемо лансирати биће вишејезично препознавање именованих ентитета (НЕР). Модел класификује текстуалне речи према врсти именованих ентитета којима припадају (властита имена, географска имена, називи валута и друго). Назив конфигурације за најновију верзију НЕР-а:

ner_ontonotes_bert_mult

Покрећемо РЕСТ сервер са моделом:

  1. Инсталирамо зависности модела наведене у његовој конфигурацији у активно виртуелно окружење:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Преузмите серијализоване компоненте модела са ДеепПавлов сервера:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Сериализоване компоненте ће бити преузете у кућни директоријум ДеепПавлов, који се подразумевано налази

    ~/.deeppavlov

    Приликом преузимања, хеш већ преузетих компоненти се проверава у односу на хешове компоненти које се налазе на серверу. Ако постоји подударање, преузимање се прескаче и користе се постојеће датотеке. Величина преузетих компоненти може варирати у просеку од 0.5 до 8 Гб, у неким случајевима достижући 20 Гб након распакивања.

  3. Покрећемо РЕСТ сервер са моделом:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Као резултат извршавања ове команде, РЕСТ сервер са моделом ће бити покренут на порту 5005 хост машине (подразумевани порт је 5000).

Након иницијализације модела, Сваггер са АПИ документацијом и могућношћу тестирања може се наћи на УРЛ-у http://127.0.0.1:5005. Хајде да тестирамо модел тако што ћемо га послати на крајњу тачку http://127.0.0.1:5005/model ПОСТ захтев са следећим ЈСОН садржајем:

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

Као одговор требало би да добијемо следећи ЈСОН:

[
  [
    ["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
    ["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"]
  ]
]

Користећи ове примере, анализираћемо ДеепПавлов РЕСТ АПИ.

АПИ ДеепПавлов

Сваки ДеепПавлов модел има најмање један улазни аргумент. У РЕСТ АПИ-ју, аргументи су именовани, њихова имена су кључеви долазног речника. У већини случајева, аргумент је текст који треба обрадити. Више информација о аргументима и вредностима које враћају модели можете пронаћи у одељку МОДЕЛС у документацији ДеепПавлов

У примеру, листа од два низа је прослеђена аргументу к, од којих је сваки добио посебну ознаку. У ДеепПавлову, сви модели узимају као улаз листу (серију) вредности које се обрађују независно.

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

Ако постоји неколико аргумената за ДеепПавлов модел, сваки од њих добија сопствену групу вредности, а на излазу модел увек производи једну групу одговора. Елементи одлазне серије су резултати обраде елемената долазних серија са истим индексом.

У горњем примеру, резултат модела је био да се сваки стринг подели на токене (речи и знакови интерпункције) и класификује токен у односу на именовани ентитет (назив организације, валута) који представља. Тренутно модел нер_онтонотес_берт_мулт способан да препозна 18 типова именованих ентитета, може се наћи детаљан опис овде.

Други готови модели од ДеепПавлова

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

Одговор на текстуално питање

На питање уз текст одговорите фрагментом овог текста. Конфигурација модела: скуад_ру_берт_инфер

Пример захтева:

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

Резултат:

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

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

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

Пример захтева:


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

Резултат:

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

Анализа осјећаја

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

Пример захтева:

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

Резултат:

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

Детекција парафразе

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

Захтев:

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

Резултат:

[
  [1],
  [0]
]

Увек се може пронаћи актуелна листа свих ДеепПавлов модела који су већ из кутије овде.

Закључак

У овом чланку смо се упознали са ДеепПавлов АПИ-јем и неким могућностима обраде текста библиотеке која се добија из кутије. Треба имати на уму да ће за било који НЛП задатак најбољи резултат бити постигнут када се модел обучи на скупу података који одговара предметној области (домену) задатка. Осим тога, још више модела у принципу не може бити обучено за све ситуације.

У наредним чланцима ћемо погледати додатна подешавања библиотеке, покретање ДеепПавлова из Доцкер-а, а затим ћемо прећи на моделе за обуку. И не заборавите да ДеепПавлов има форум – поставите своја питања у вези са библиотеком и моделима. Хвала на пажњи!

Извор: ввв.хабр.цом

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