DeepPavlov pre vývojárov: #1 NLP nástroje a vytváranie chatbotov

Ahojte všetci! Otvárame sériu článkov venovaných riešeniu praktických problémov súvisiacich so spracovaním prirodzeného jazyka (Natural Language Processing alebo jednoducho NLP) a vytváraním dialógových agentov (chatbotov) pomocou open-source knižnice DeepPavlov, ktorú vyvíja náš tím v MIPT Laboratory of Neural Systems and Deep Learning. Hlavným cieľom série je predstaviť DeepPavlov širokému spektru vývojárov a ukázať, ako môžete riešiť aplikované problémy NLP bez hlbokých znalostí strojového učenia a doktorátu z matematiky.

Úlohy NLP zahŕňajú určenie sentimentu textu, analýzu pomenovaných entít, určenie toho, čo partner chce od vášho robota: objednať si pizzu alebo získať informácie o pozadí a oveľa viac. Môžete si prečítať viac o úlohách a metódach NLP tu.

V tomto článku vám ukážeme, ako spustiť REST server s predtrénovanými modelmi NLP, pripravenými na použitie bez akejkoľvek ďalšej konfigurácie alebo školenia.

DeepPavlov pre vývojárov: #1 NLP nástroje a vytváranie chatbotov

Inštalácia DeepPavlov

Tu a nižšie budú uvedené pokyny pre Linux. Pre systém Windows nájdete naše dokumentácia

  • Vytvorte a aktivujte virtuálne prostredie pomocou aktuálnej podporovanej verzie Pythonu:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Nainštalujte DeepPavlov vo virtuálnom prostredí:
    pip install deeppavlov
    

Spustenie REST servera s modelom DeepPavlov

Pred prvým spustením servera s modelom DeepPavlov bude užitočné porozprávať sa o niektorých funkciách architektúry knižnice.

Každý model v DP pozostáva z:

  • Python kód;
  • Stiahnuteľné komponenty – serializované výsledky tréningu na konkrétnych dátach (vloženie, váhy neurónových sietí atď.);
  • Konfiguračný súbor (ďalej len config), ktorý obsahuje informácie o triedach používaných modelom, URL stiahnutých komponentov, závislosti Pythonu atď.

O tom, čo sa skrýva pod kapotou DeepPavlova, vám povieme viac v nasledujúcich článkoch, zatiaľ nám stačí vedieť, že:

  • Každý model v DeepPavlov je identifikovaný názvom jeho konfigurácie;
  • Na spustenie modelu si musíte stiahnuť jeho komponenty zo serverov DeepPavlov;
  • Na spustenie modelu je tiež potrebné nainštalovať knižnice Pythonu, ktoré používa.

Prvý model, ktorý uvedieme na trh, bude viacjazyčný Named Entity Recognition (NER). Model klasifikuje textové slová podľa typu pomenovaných entít, ku ktorým patria (vlastné mená, geografické názvy, názvy mien a iné). Názov konfigurácie pre aktuálnu najnovšiu verziu NER:

ner_ontonotes_bert_mult

Spúšťame REST server s modelom:

  1. Závislosti modelu uvedené v jeho konfigurácii nainštalujeme do aktívneho virtuálneho prostredia:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Stiahnite si komponenty sériového modelu zo serverov DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Serializované komponenty sa stiahnu do domovského adresára DeepPavlov, ktorý sa štandardne nachádza

    ~/.deeppavlov

    Pri sťahovaní sa hash už stiahnutých komponentov porovná s hashmi komponentov umiestnených na serveri. Ak sa nájde zhoda, sťahovanie sa preskočí a použijú sa existujúce súbory. Veľkosti sťahovaných komponentov sa môžu pohybovať v priemere od 0.5 do 8 Gb, v niektorých prípadoch dosahujú po rozbalení 20 Gb.

  3. Spúšťame REST server s modelom:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

V dôsledku vykonania tohto príkazu sa na porte 5005 hostiteľského počítača spustí REST server s modelom (predvolený port je 5000).

Po inicializácii modelu Swagger s dokumentáciou API a možnosťou testovania nájdete na URL http://127.0.0.1:5005. Otestujme model jeho odoslaním do koncového bodu http://127.0.0.1:5005/model Žiadosť POST s nasledujúcim obsahom JSON:

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

Ako odpoveď by sme mali dostať nasledujúci 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"]
  ]
]

Pomocou týchto príkladov budeme analyzovať DeepPavlov REST API.

API DeepPavlov

Každý model DeepPavlov má aspoň jeden vstupný argument. V REST API sú argumenty pomenované, ich názvy sú kľúčmi prichádzajúceho slovníka. Vo väčšine prípadov je argumentom text, ktorý je potrebné spracovať. Viac informácií o argumentoch a hodnotách vrátených modelmi nájdete v dokumentácii v sekcii MODELY DeepPavlov

V príklade bol argumentu x odovzdaný zoznam dvoch reťazcov, z ktorých každý dostal samostatné označenie. V DeepPavlov všetky modely berú ako vstup zoznam (dávku) hodnôt, ktoré sú spracované nezávisle.

Pojem „dávka“ sa vzťahuje na oblasť strojového učenia a označuje dávku nezávislých vstupných hodnôt spracovaných súčasne algoritmom alebo neurónovou sieťou. Tento prístup vám umožňuje skrátiť (často výrazne) čas, počas ktorého model spracováva jeden prvok dávky v porovnaní s rovnakou hodnotou odovzdanou na vstup samostatne. Výsledok spracovania sa však vydá až po spracovaní všetkých prvkov. Preto pri generovaní prichádzajúcej dávky bude potrebné brať do úvahy rýchlosť modelu a požadovaný čas spracovania pre každý z jeho jednotlivých prvkov.

Ak je k modelu DeepPavlov viacero argumentov, každý z nich dostane vlastnú dávku hodnôt a na výstupe model vytvorí vždy jednu dávku odpovedí. Prvky odchádzajúcej dávky sú výsledkom spracovania prvkov prichádzajúcich dávok s rovnakým indexom.

Vo vyššie uvedenom príklade bolo výsledkom modelu rozdelenie každého reťazca na tokeny (slová a interpunkčné znamienka) a klasifikácia tokenu vzhľadom na pomenovanú entitu (názov organizácie, mena), ktorú predstavuje. V súčasnosti model ner_ontonotes_bert_mult schopný rozpoznať 18 typov pomenovaných entít, podrobný popis možno nájsť tu.

Ďalšie out-of-the-box modely od DeepPavlov

Okrem NER sú v DeepPavlov v čase písania k dispozícii aj nasledujúce predpripravené modely:

Odpovedanie na textovú otázku

Odpovedzte na otázku k textu úryvkom tohto textu. Konfigurácia modelu: squad_ru_bert_infer

Príklad žiadosti:

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

Výsledok:

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

Detekcia urážok

Detekcia prítomnosti urážky osoby, ktorej je text určený (v čase písania - iba pre angličtinu). Konfigurácia modelu: insults_kaggle_conv_bert

Príklad žiadosti:


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

Výsledok:

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

Analýza sentimentu

Klasifikácia textového sentimentu (pozitívny, neutrálny, negatívny). Konfigurácia modelu: rusentiment_elmo_twitter_cnn

Príklad žiadosti:

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

Výsledok:

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

Detekcia parafráz

Určenie, či dva rôzne texty majú rovnaký význam. Konfigurácia modelu: stand_paraphraser_ru

Žiadosť:

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

Výsledok:

[
  [1],
  [0]
]

Aktuálny zoznam všetkých out-of-the-box modelov DeepPavlov nájdete vždy tu.

Záver

V tomto článku sme sa zoznámili s DeepPavlov API a niektorými možnosťami spracovania textu knižnice poskytovanej hneď po vybalení. Treba mať na pamäti, že pri akejkoľvek úlohe NLP sa najlepší výsledok dosiahne pri trénovaní modelu na súbore údajov zodpovedajúcich predmetnej oblasti (doméne) úlohy. Navyše ešte viac modelov sa v zásade nedá vycvičiť na všetky situácie.

V nasledujúcich článkoch sa pozrieme na dodatočné nastavenia knižnice, spustenie DeepPavlov z Dockeru a následne prejdeme k tréningovým modelom. A nezabudnite, že DeepPavlov má форум – pýtajte sa svoje otázky týkajúce sa knižnice a modelov. Ďakujem za tvoju pozornosť!

Zdroj: hab.com

Pridať komentár