Ahojte všetci! Otvárame cyklus článkov venovaných riešeniu praktických úloh spojených s 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 , ktorú vyvíja náš tím laboratória Neurónových systémov a hlbokého učenia MFTI. Hlavným cieľom cyklu je oboznámiť široký okruh vývojárov s DeepPavlov a ukázať, ako sa dajú riešiť aplikované úlohy NLP bez hlbokých znalostí v oblasti strojového učenia a PhD v matematike.
Medzi úlohy NLP patrí určenie sentimentu textu, parsovanie pomenovaných entít, určenie toho, čo chce váš chatbot od používateľa: objednať si pizzu alebo získať informačné údaje a mnoho ďalšieho. Viac o úlohách a metódach NLP si môžete prečítať .
V tomto článku vám povieme, ako spustiť REST server s predtrénovanými modelmi NLP, ktoré sú pripravené na použitie bez akýchkoľvek ďalších nastavení alebo učenia.

Inštalácia DeepPavlov
Tu a ďalej budú uvedené pokyny pre Linux. Pre Windows si pozrite našu
- Vytvorte a aktivujte virtuálne prostredie s aktuálnou podporovanou verziou Python:
virtualenv env -p python3.7 source env/bin/activate - Nainštalujte DeepPavlov do virtuálneho prostredia:
pip install deeppavlov
Spustenie REST servera s modelom DeepPavlov
Predtým, než prvýkrát spustíme server s modelom DeepPavlov, bude užitočné porozprávať o niektorých aspektoch architektúry knižnice.
Každý model v DP sa skladá z:
- Kódu v Pythone;
- Sťahovateľných komponentov — serializovaných výsledkov učenia na konkrétnych dátach (embeddingy, váhy neurónových sietí atď.);
- Konfiguračného súboru (ďalej len — konfigu), v ktorom sú informácie o používaných triedach modelu, URL sťahovateľných komponentov, závislostiach Python a podobne.
Viac o tom, čo sa skrýva za DeepPavlov, povieme v nasledujúcich článkoch, zatiaľ nám stačí vedieť, že:
- Každý model v DeepPavlov je identifikovaný názvom svojho konfigu;
- Na spustenie modelu je potrebné stiahnuť jeho komponenty zo serverov DeepPavlov;
- Taktiež na spustenie modelu je potrebné nainštalovať používané knižnice Python.
Prvou modelou, ktorú uvedieme, bude viacjazyčné rozpoznávanie pomenovaných entít (NER). Model klasifikuje slová textu podľa typu pomenovaných entít, ku ktorým patria (vlastné mená, geografické názvy, názvy mien a ďalšie). Názov konfigurácie pre najnovšiu dostupnú verziu NER:
ner_ontonotes_bert_mult
Spúšťame REST server s modelom:
- Inštalujeme do aktívneho virtuálneho prostredia závislosti modelu, uvedené v jeho konfigurácii:
python -m deeppavlov install ner_ontonotes_bert_mult - Sťahujeme serializované komponenty modelu zo serverov DeepPavlov:
python -m deeppavlov download ner_ontonotes_bert_multSerializované komponenty budú stiahnuté do domácej zložky DeepPavlov, ktorá je predvolene umiestnená
~/.deeppavlovPri sťahovaní sa hash už stiahnutých komponentov porovnáva s hash komponentov nachádzajúcich sa na serveri. V prípade zhody sa sťahovanie preskočí a používajú sa už existujúce súbory. Veľkosti sťahovaných komponentov sa môžu pohybovať medzi 0,5 až 8 Gb, v niektorých prípadoch po rozbalení dosahujú 20 Gb.
- Spúšťame REST server s modelom:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
V dôsledku vykonania tejto príkazu sa spustí REST server s modelom na porte 5005 hostiteľského stroja (predvolený port je 5000).
Po inicializácii modelu, Swagger s dokumentáciou API a možnosťou otestovať ho, bude dostupný na URL http://127.0.0.1:5005. Otestujeme model, odoslaním na koncový bod http://127.0.0.1:5005/model POST požiadavka s nasledujúcim JSON obsahom:
{
"x": [
"Na MFTI sa dá dostať električkou zo Savëlovského Nádražia.",
"Na juhozápadnom Rusku je stoh žita ohodnotený na 15 hrivien"
]
}V odpovedi by sme mali dostať nasledujúci JSON:
[
[
["Na", "MFTI", "sa", "dá", "dostať", "električkou", "zo", "Savëlovského", "Nádražia", "."],
["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]
],
[
["Na", "juho", "-", "západnom", "Rusku", "je", "stoh", "žita", "ohodnotený", "na", "15", "hrivien"],
["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
]
]Na týchto príkladoch sa pozrieme na REST API DeepPavlov.
API DeepPavlov
Každý model DeepPavlov má aspoň jeden vstupný argument. V REST API sú argumenty pomenované, ich mená sú kľúče vstupného slovníka. V väčšine prípadov je argument text, ktorý je potrebné spracovať. Viac informácií o argumentoch a hodnotách, ktoré modely vracajú, nájdete v sekcii MODELS dokumentácie.
V príklade bol ako argument x odovzdaný zoznam dvoch reťazcov, na každý z ktorých bola vydaná samostatná štruktúra. V DeepPavlov všetky modely prijímajú ako vstup zoznam (batch) hodnôt, ktoré sú spracovávané nezávisle.
Termín 'batch' sa týka oblasti strojového učenia a znamená balík nezávislých vstupných hodnôt, ktoré sú spracovávané algoritmom alebo neurónovou sieťou súčasne. Tento prístup umožňuje skrátiť (často – podstatne) čas spracovania jedného prvku batche modelom v porovnaní s rovnakou hodnotou, odovzdanou jednotlivé. Výsledok spracovania sa však poskytuje až po spracovaní všetkých prvkov. Preto pri tvorbe vstupného batche bude potrebné zohľadniť rýchlosť modelu a požadovaný čas spracovania každého jeho jednotlivého prvku.
V prípade, že argumentov modelu DeepPavlov je viac, do každého sa odovzdáva svoj vlastný batch hodnôt a model vždy na výstupe poskytuje jeden batch odpovedí. Prvky výstupného batche sú výsledkami spracovania prvkov vstupných batchov so rovnakým indexom.
V uvedenom príklade bol výsledkom činnosti modelu rozklad každej strany na tokeny (slová a interpunkciu) a klasifikácia tokenu vo vzťahu k pomenovanej entite (názov organizácie, mena), ktorú reprezentuje. V súčasnosti model ner_ontonotes_bert_mult dokáže rozpoznať 18 typov pomenovaných entít, podrobné popisy sú k dispozícii .
Iné out-of-the-box modely DeepPavlov
Okrem NER sú v DeepPavlov k dispozícii nasledujúce out-of-the-box modely k dátumu písania článku:
Text Question Answering
Odpoveď na otázku k textu fragmentom tohto textu. Konfigurácia modelu: squad_ru_bert_infer
Príklad dotazu:
{
"context_raw": [
"DeepPavlov vyvíja laboratórium MFTI.",
"Na juhozápadnej Rusku je stoh žita ocenený na 15 hrivien."
],
"question_raw": [
"Kto vyvíja DeepPavlov?",
"Koľko stál stoh žita na Rusku?"
]
}Výsledok:
[
["laboratóriom MFTI", 27, 31042.484375],
["15 hrivien", 39, 1049.598876953125]
]
Insult Detection
Vyhodnocovanie prítomnosti urážky voči osobe, ktorej je text adresovaný (k dátumu písania článku – len pre anglický jazyk). Konfigurácia modelu: insults_kaggle_conv_bert
Príklad dotazu:
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}Výsledok:
[
["Not Insult"],
["Insult"]
]Sentiment Analysis
Klasifikácia sentimentu textu (pozitívny, neutrálny, negatívny). Konfigurácia modelu: rusentiment_elmo_twitter_cnn
Príklad dotazu:
{
"x": [
"Páči sa mi knižnica DeepPavlov.",
"Počul som o knižnici DeepPavlov.",
"Hnevajú ma trollovia a anonymní užívatelia."
]
}Výsledok:
[
["pozitívny"],
["neutrálny"],
["negatívny"]
]Detekcia parafrázovania
Zistenie, či majú dva rôzne texty rovnaký význam. Konfigurácia modelu: stand_paraphraser_ru
Žiadosť:
{
"text_a": [
"Mesto zaspáva, Mafián sa prebúdza.",
"Prezident USA pohrozil vypovedaním zmluvy s Nemeckom."
],
"text_b": [
"Noc prichádza, všetci obyvatelia mesta išli spať, zatiaľ čo zločinci sa prebudili.",
"Nemecko sa nechystá poddať hrozbám USA."
]
}Výsledok:
[
[1],
[0]
]Aktuálny zoznam všetkých out-of-the-box modelov DeepPavlov nájdete vždy .
Záver
V tomto článku sme sa zoznámili s API DeepPavlov a niektorými funkciami knižnice na spracovanie textu, ktoré sú dostupné 'z krabice'. Treba mať na pamäti, že pre akúkoľvek úlohu NLP dosiahnete najlepšie výsledky, ak model trénujete na dátovej sade, ktorá zodpovedá predmetovej oblasti (doméne) úlohy. Okrem toho, ešte viac modelov nemôže byť vytrénovaných pre všetky prípady života.
V nasledujúcich článkoch sa pozrieme na ďalšie nastavenia knižnice, spustenie DeepPavlov z Dockeru, a potom prejdeme k trénovaniu modelov. A nezabudnite, že DeepPavlov má – kladte svoje otázky týkajúce sa knižnice a modelov. Ďakujeme za pozornosť!
Zdroj: habr.com
