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
Ú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
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í.
Instalace DeepPavlov
Zde a níže budou uvedeny pokyny pro Linux. Pro Windows viz naše
- 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:
- Závislosti modelu uvedené v jeho konfiguraci nainstalujeme do aktivního virtuálního prostředí:
python -m deeppavlov install ner_ontonotes_bert_mult
- 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.
- 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
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
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
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á
Zdroj: www.habr.com