DeepPavlov pro vývojáře: #1 nástroje NLP a vytváření chatovacích botů

Ahoj všichni! Otevíráme sérii článků věnovaných řešení praktických úloh týkajících se zpracování přirozeného jazyka (Natural Language Processing neboli NLP) a vytváření dialogových agentů (chatovacích botů) pomocí open-source knihovny. DeepPavlov, kterou vyvíjí náš tým laboratoře neuronových systémů a hlubokého učení na MFTI. Hlavním cílem této série je seznámit širokou veřejnost vývojářů s DeepPavlov a ukázat, jak lze řešit praktické úlohy NLP, aniž byste měli hluboké znalosti v oblasti strojového učení a PhD v matematice.

Mezi úlohy NLP patří definování sentimentu textu, parsování pojmenovaných entit, určování, co od vašeho bota chce jeho protějšek: objednat pizzu nebo získat informace, a mnoho dalšího. O úlohách a metodách NLP se můžete podívat podrobněji. tady.

V tomto článku vám ukážeme, jak spustit REST server s předtrénovanými modely NLP, které jsou připraveny k použití bez jakékoliv další konfigurace nebo výcviku.

DeepPavlov pro vývojáře: #1 nástroje NLP a vytváření chatovacích botů

Instalace DeepPavlov

Zde a dále budou uvedeny pokyny pro Linux. Pro Windows navštivte naše. dokumentaci

  • Vytvořte a aktivujte virtuální prostředí s aktuální podporovanou verzí Pythonu:
    virtualenv env -p python3.7
    source env/bin/activate
  • Nainstalujte DeepPavlov do virtuálního prostředí:
    pip install deeppavlov
    

Spuštění REST serveru s modelem DeepPavlov

Předtím, než poprvé spustíme server s modelem DeepPavlov, bude užitečné se podívat na některé vlastnosti architektury knihovny.

Každý model v DP se skládá z:

  • Kódu v Pythonu;
  • Stahovaných komponent — serializovaných výsledků učení na konkrétních datech (embeddingy, váhy neuronových sítí atd.);
  • Konfiguračního souboru (dále jen — konfigu), ve kterém jsou informace o používaných třídách modelu, URL stahovaných komponent, závislostech Pythonu a mnoho dalšího.

Podrobněji o tom, co se skrývá pod kapotou DeepPavlov, se dozvíte v dalších článcích, prozatím nám stačí vědět, že:

  • Každý model v DeepPavlov je identifikován názvem svého konfigu;
  • Pro spuštění modelu je nutné stáhnout jeho komponenty z serverů DeepPavlov;
  • Také pro spuštění modelu je nutné nainstalovat používané knihovny Pythonu.

První model, který spustíme, bude vícejazyčné rozpoznávání pojmenovaných entit (NER). Model klasifikuje slova textu podle typu pojmenovaných entit, ke kterým patří (vlastní jména, geografické názvy, názvy měn a další). Název konfiguračního souboru pro nejnovější verzi NER je:

ner_ontonotes_bert_mult

Spouštíme REST server s modelem:

  1. Instalujeme do aktivního virtuálního prostředí závislosti modelu uvedené v jeho konfiguraci:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Stahujeme serializované komponenty modelu ze serverů DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Serializované komponenty budou staženy do domácího adresáře DeepPavlov, který je ve výchozím nastavení umístěn na

    ~/ .deeppavlov

    Při stahování se hash již stažených komponent porovnává s hashi komponent nacházejících se na serveru. V případě shody se stahování přeskočí a použijí se již existující soubory. Velikosti stahovaných komponent mohou obvykle kolísat od 0,5 do 8 Gb, v některých případech po rozbalení dosahují 20 Gb.

  3. Spouštíme REST server s modelem:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Po provedení tohoto příkazu bude spuštěn REST server s modelem na portu 5005 hostitelské mašiny (výchozí port je 5000).

Po inicializaci modelu bude Swagger s dokumentací API a možností testování k nalezení na URL http://127.0.0.1:5005. Otestujeme model odesláním na koncový bod http://127.0.0.1:5005/model POST dotaz s následujícím JSON obsahem:

{
  "x": [
    "Na MFTI se lze dostat vlakem z Savyolovského nádraží.",
    "Na jihozápadní Rusi je stoh žita oceněn na 15 hřiven"
  ]
}

V odpovědi bychom měli obdržet takovýto JSON:

[
  [
    ["Na", "MFTI", "se", "lze", "dostat", "vlakem", "z", "Savyolovského", "nádraží", "."],
    ["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]
  ],
  [
    ["Na", "jiho", "-", "západní", "Rusi", "stoh", "žita", "oceněn", "na", "15", "hřiven"],
    ["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
  ]
]

Na těchto příkladech si ukážeme REST API DeepPavlov.

API DeepPavlov

Každý model DeepPavlov má alespoň jeden vstupní argument. V REST API jsou argumenty pojmenované, jejich názvy jsou klíče vstupního slovníku. Většinou je argumentem text, který je třeba zpracovat. Podrobnosti o argumentech a hodnotách vracených modely lze nalézt v sekci MODELS dokumentace. DeepPavlov

V tomto příkladu byl argumentu x předán seznam dvou řetězců, pro každý z nich byla vydána samostatná struktura. Ve DeepPavlov všechny modely přijímají na vstupu seznam (batch) hodnot, které jsou zpracovávány nezávisle.

Termín „batch“ se vztahuje na oblast strojového učení a označuje balíček nezávislých vstupních hodnot, které jsou algoritmem nebo neuronovou sítí zpracovávány současně. Tento přístup umožňuje zkrátit (často výrazně) dobu zpracování jednoho prvku batch modelu ve srovnání se stejnou hodnotou, která byla předána samostatně. Ale výsledek zpracování je vydán až po zpracování všech prvků. Při formování vstupního batch bude nutné zohlednit rychlost modelu a požadovaný čas zpracování každého jeho samostatného prvku.

V případě, že má model DeepPavlov více argumentů, každému z nich je předán vlastní batch hodnot, a na výstupu model vždy vydává jeden batch odpovědí. Prvky výstupního batch jsou výsledky zpracování prvků vstupních batch se stejným indexem.

Ve zmíněném příkladu byla výsledkem práce modelu segmentace každého řetězce na tokeny (slova a interpunkci) a klasifikace tokenu vzhledem k pojmenované entitě (název organizace, měna), kterou představuje. V současné době model ner_ontonotes_bert_mult schopen rozpoznávat 18 typů pojmenovaných entit, podrobné popisy lze nalézt tady.

Další out-of-the-box modely DeepPavlov

Kromě NER jsou v DeepPavlov k datu psaní článku k dispozici následující out-of-the-box modely:

Text Question Answering

Odpověď na otázku k textu úryvkem tohoto textu. Konfigurace modelu: squad_ru_bert_infer

Příklad dotazu:

{
  "context_raw": [
    "DeepPavlov vyvíjí laboratoř MFTI.",
    "Ve jihozápadním Rusku byl snop žita ohodnocen na 15 hřiven."
  ],
  "question_raw": [
    "Kdo vyvíjí DeepPavlov?",
    "Kolik stál snop žita v Rusku?"
  ]
}

Result:

[
  ["laboratoří MFTI", 27, 31042.484375],
  ["15 hřiven", 39, 1049.598876953125]
]

Insult Detection

Identifikace přítomnosti urážky vůči osobě, kterou se text adresuje (k datu psaní článku — pouze pro anglický jazyk). Konfigurace modelu: insults_kaggle_conv_bert

Příklad dotazu:


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

Result:

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

Sentiment Analysis

Klasifikace sentimentu textu (kladný, neutrální, záporný). Konfigurace modelu: rusentiment_elmo_twitter_cnn

Příklad dotazu:

{
  "x": [
    "Líbí se mi knihovna DeepPavlov.",
    "Slyšel jsem o knihovně DeepPavlov.",
    "Rozčilují mě trollové a anonymní uživatelé."
  ]
}

Result:

[
  ["pozitivní"],
  ["neutrální"],
  ["negativní"]
]

Detekce parafrází

Určení, zda mají dva různé texty stejný význam. Konfigurace modelu: stand_paraphraser_ru

Dotaz:

{
  "text_a": [
    "Město se ponořilo do spánku, Mafia se probouzí.",
    "Prezident USA pohrozil vypovězením smlouvy s Německem."
  ],
  "text_b": [
    "Noc přichází, všichni obyvatelé města šli spát, a zločinci se probudili.",
    "Německo se nehodlá poddat hrozbám ze strany USA."
  ]
}

Result:

[
  [1],
  [0]
]

Aktuální seznam všech out-of-the-box modelů DeepPavlov lze vždy nalézt zde.

Závěr

V tomto článku jsme se seznámili s API DeepPavlov a některými možnostmi knihovny pro zpracování textu, které jsou poskytovány 'z krabice'. Je však třeba mít na paměti, že pro jakýkoli úkol NLP bude nejlepšího výsledku dosaženo trénováním modelu na datovém souboru odpovídajícím oboru (doméně) úkolu. Kromě toho nelze vytrénovat více modelů, které by pokrývaly všechny případy použití.

V následujících článcích se zaměříme na další nastavení knihovny, spuštění DeepPavlov z Dockeru, a poté se přesuneme k trénování modelů. A nezapomeňte, že u DeepPavlov máte forum – pokládejte své otázky ohledně knihovny a modelů. Děkujeme za pozornost!

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster