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

Ahoj všichni! Otevíráme sérii článků věnovaných řešení praktických problémů souvisejících se zpracováním přirozeného jazyka (Natural Language Processing nebo jednoduše NLP) a vytváření dialogových agentů (chatbotů) pomocí open-source knihovny DeepPavlov, kterou vyvíjí náš tým v MIPT Laboratory of Neural Systems and Deep Learning. Hlavním cílem série je představit DeepPavlov širokému spektru vývojářů a ukázat, jak můžete řešit aplikované problémy NLP, aniž byste měli hluboké znalosti v oblasti strojového učení a PhD v matematice.

Úkoly NLP zahrnují určení sentimentu textu, analýzu pojmenovaných entit, určení toho, co partner chce od vašeho robota: objednat si pizzu nebo získat informace o pozadí a mnoho dalšího. Můžete si přečíst více o úkolech a metodách NLP zde.

V tomto článku vám ukážeme, jak spustit REST server s předem trénovanými modely NLP, připravený k použití bez jakékoli další konfigurace nebo školení.

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

Instalace DeepPavlov

Zde a níže budou uvedeny pokyny pro Linux. Pro Windows viz naše dokumentace

  • Vytvořte a aktivujte virtuální prostředí pomocí aktuální podporované verze Pythonu:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Nainstalujte DeepPavlov ve virtuálním prostředí:
    pip install deeppavlov
    

Spuštění REST serveru s modelem DeepPavlov

Než poprvé spustíme server s modelem DeepPavlov, bude užitečné pohovořit o některých funkcích architektury knihovny.

Jakýkoli model v DP se skládá z:

  • Python kód;
  • Komponenty ke stažení - serializované výsledky tréninku na konkrétních datech (vložení, váhy neuronových sítí atd.);
  • Konfigurační soubor (dále jen config), který obsahuje informace o třídách používaných modelem, URL stažených komponent, závislostech Pythonu atd.

O tom, co je pod kapotou DeepPavlova, vám prozradíme více v následujících článcích, zatím nám stačí vědět, že:

  • Jakýkoli model v DeepPavlov je identifikován názvem jeho konfigurace;
  • Chcete-li spustit model, musíte si stáhnout jeho součásti ze serverů DeepPavlov;
  • Ke spuštění modelu je také potřeba nainstalovat knihovny Pythonu, které používá.

První model, který spustíme, bude vícejazyčný Named Entity Recognition (NER). Model klasifikuje textová slova podle typu pojmenovaných entit, ke kterým patří (vlastní jména, zeměpisná jména, názvy měn a další). Název konfigurace pro aktuální nejnovější verzi NER:

ner_ontonotes_bert_mult

Spouštíme REST server s modelem:

  1. Závislosti modelu uvedené v jeho konfiguraci nainstalujeme do aktivního virtuálního prostředí:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Stáhněte si serializované komponenty modelu ze serverů DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

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

    ~/.deeppavlov

    Při stahování se porovnává hash již stažených komponent s hodnotami hash komponent umístěných na serveru. Pokud existuje shoda, stahování se přeskočí a použijí se existující soubory. Velikosti stahovaných komponent se mohou v průměru lišit od 0.5 do 8 Gb, v některých případech dosahují po rozbalení až 20 Gb.

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

V důsledku provedení tohoto příkazu bude spuštěn REST server s modelem na portu 5005 hostitelského počítače (výchozí port je 5000).

Po inicializaci modelu najdete na URL Swagger s dokumentací API a možností testování http://127.0.0.1:5005. Pojďme otestovat model jeho odesláním do koncového bodu http://127.0.0.1:5005/model Požadavek POST s následujícím obsahem JSON:

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

Jako odpověď bychom měli obdržet následující 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"]
  ]
]

Na těchto příkladech budeme analyzovat DeepPavlov REST API.

API DeepPavlov

Každý model DeepPavlov má alespoň jeden vstupní argument. V REST API jsou argumenty pojmenovány, jejich názvy jsou klíče příchozího slovníku. Ve většině případů je argumentem text, který je třeba zpracovat. Více informací o argumentech a hodnotách vrácených modely naleznete v dokumentaci v sekci MODELY DeepPavlov

V příkladu byl argumentu x předán seznam dvou řetězců, z nichž každý dostal samostatné označení. V DeepPavlov všechny modely berou jako vstup seznam (dávku) hodnot, které se zpracovávají nezávisle.

Termín „dávka“ označuje oblast strojového učení a označuje dávku nezávislých vstupních hodnot zpracovaných algoritmem nebo neuronovou sítí současně. Tento přístup umožňuje zkrátit (často výrazně) dobu, po kterou model zpracovává jeden prvek dávky ve srovnání se stejnou hodnotou předávanou na vstup samostatně. Ale výsledek zpracování je vydán až po zpracování všech prvků. Při generování příchozí dávky tedy bude nutné vzít v úvahu rychlost modelu a požadovanou dobu zpracování pro každý jeho jednotlivý prvek.

Pokud je k modelu DeepPavlov více argumentů, každý z nich obdrží vlastní dávku hodnot a na výstupu model vždy vytvoří jednu dávku odpovědí. Prvky odchozí dávky jsou výsledky zpracování prvků příchozích dávek se stejným indexem.

Ve výše uvedeném příkladu bylo výsledkem modelu rozdělení každého řetězce na tokeny (slova a interpunkční znaménka) a klasifikace tokenu vzhledem k pojmenované entitě (název organizace, měna), kterou představuje. Aktuálně model ner_ontonotes_bert_mult schopný rozpoznat 18 typů pojmenovaných entit, podrobný popis lze nalézt zde.

Další out-of-the-box modely od DeepPavlova

Kromě NER jsou v DeepPavlov v době psaní tohoto článku k dispozici následující modely připravené k použití:

Odpověď na textovou otázku

Odpovězte na otázku k textu fragmentem tohoto textu. Konfigurace modelu: squad_ru_bert_infer

Příklad požadavku:

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

Výsledek:

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

Detekce urážek

Detekce přítomnosti urážky osoby, které je text určen (v době psaní - pouze pro angličtinu). Konfigurace modelu: insults_kaggle_conv_bert

Příklad požadavku:


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

Výsledek:

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

Analýza sentimentu

Klasifikace textového sentimentu (pozitivní, neutrální, negativní). Konfigurace modelu: rusentiment_elmo_twitter_cnn

Příklad požadavku:

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

Výsledek:

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

Detekce parafrází

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

Poptávka:

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

Výsledek:

[
  [1],
  [0]
]

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

Závěr

V tomto článku jsme se seznámili s rozhraním DeepPavlov API a některými možnostmi zpracování textu knihovny, která je k dispozici hned po vybalení. Je třeba mít na paměti, že pro jakýkoli úkol NLP bude nejlepšího výsledku dosaženo při trénování modelu na souboru dat odpovídajících předmětové oblasti (doméně) úkolu. Navíc ani více modelů v zásadě nelze vycvičit na všechny situace.

V následujících článcích se podíváme na další nastavení knihovny, spouštění DeepPavlov z Dockeru a poté přejdeme k tréninkovým modelům. A nezapomeňte, že DeepPavlov má форум – zeptejte se na své otázky týkající se knihovny a modelů. Děkuji za pozornost!

Zdroj: www.habr.com

Přidat komentář