Sziasztok! Cikksorozatot nyitunk, amely a természetes nyelvi feldolgozással (Natural Language Processing vagy egyszerűen NLP) kapcsolatos gyakorlati problémák megoldásával és a párbeszéd-ügynökök (chatbotok) létrehozásával foglalkozik nyílt forráskódú könyvtár segítségével.
Az NLP-feladatok közé tartozik a szöveg hangulatának meghatározása, a megnevezett entitások elemzése, annak meghatározása, hogy mit akar a beszélgetőpartner a robottól: pizzát rendelni vagy háttérinformációkat szerezni, és még sok más. Az NLP feladatokról és módszerekről bővebben olvashat
Ebben a cikkben bemutatjuk, hogyan futtathat REST-kiszolgálót előre betanított NLP-modellekkel, további konfiguráció és képzés nélkül használatra készen.
A DeepPavlov telepítése
Itt és alább a Linuxra vonatkozó utasításokat adjuk meg. Windows esetén lásd a mi
- Virtuális környezet létrehozása és aktiválása a Python jelenlegi támogatott verziójával:
virtualelnv env -p python3.7 source env/bin/activate
- Telepítse a DeepPavlovot virtuális környezetben:
pip install deeppavlov
REST szerver indítása a DeepPavlov modellel
Mielőtt először elindítanánk a DeepPavlov modellt használó szervert, hasznos lesz beszélni a könyvtár architektúrájának néhány jellemzőjéről.
A DP bármely modellje a következőkből áll:
- Python kód;
- Letölthető komponensek - sorozatos képzési eredmények meghatározott adatokon (beágyazások, neurális hálózatok súlya stb.);
- Egy konfigurációs fájl (a továbbiakban: konfiguráció), amely információkat tartalmaz a modell által használt osztályokról, a letöltött összetevők URL-jeiről, a Python-függőségekről stb.
A következő cikkekben bővebben eláruljuk, mi van DeepPavlov motorháztetője alatt, egyelőre elég, ha tudjuk:
- A DeepPavlov minden modelljét a konfiguráció neve azonosítja;
- A modell futtatásához le kell töltenie annak összetevőit a DeepPavlov szerverekről;
- Ezenkívül a modell futtatásához telepítenie kell az általa használt Python-könyvtárakat.
Az első modell, amelyet piacra dobunk, a többnyelvű Név Entitásfelismerés (NER) lesz. A modell a szövegszavakat aszerint osztályozza, hogy milyen nevű entitásokhoz tartoznak (tulajdonnevek, földrajzi nevek, pénznemek nevei stb.). A NER aktuális legújabb verziójának konfigurációs neve:
ner_ontonotes_bert_mult
Elindítjuk a REST szervert a következő modellel:
- A konfigurációjában megadott modellfüggőségeket telepítjük az aktív virtuális környezetbe:
python -m deeppavlov install ner_ontonotes_bert_mult
- Töltsd le a sorozatos modellösszetevőket a DeepPavlov szerverekről:
python -m deeppavlov download ner_ontonotes_bert_mult
A szerializált komponensek letöltésre kerülnek a DeepPavlov kezdőkönyvtárába, amely alapértelmezés szerint található
~/.deeppavlov
Letöltéskor a már letöltött komponensek kivonatát a rendszer összeveti a szerveren található komponensek hash-ével. Ha van egyezés, a letöltés kimarad, és a rendszer a meglévő fájlokat használja. A letöltött komponensek mérete átlagosan 0.5 és 8 Gb között változhat, egyes esetekben a kicsomagolás után elérheti a 20 Gb-ot is.
- Elindítjuk a REST szervert a következő modellel:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
A parancs végrehajtásának eredményeként egy modellel rendelkező REST szerver indul el a gazdagép 5005-ös portján (az alapértelmezett port az 5000).
A modell inicializálása után a Swagger API dokumentációval és tesztelési lehetőséggel az URL címen található http://127.0.0.1:5005
. Teszteljük a modellt úgy, hogy elküldjük a végpontra http://127.0.0.1:5005/model
POST-kérés a következő JSON-tartalommal:
{
"x": [
"В МФТИ можно добраться на электричке с Савёловского Вокзала.",
"В юго-западной Руси стог жита оценен в 15 гривен"
]
}
Válaszul a következő JSON-t kell kapnunk:
[
[
["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
["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"]
]
]
Ezekkel a példákkal elemezzük a DeepPavlov REST API-t.
API DeepPavlov
Minden DeepPavlov modellnek legalább egy bemeneti argumentuma van. A REST API-ban az argumentumok el vannak nevezve, nevük a bejövő szótár kulcsa. A legtöbb esetben az argumentum a feldolgozandó szöveg. A modellek által visszaadott argumentumokról és értékekről további információ a dokumentáció MODELLEK részében található
A példában két karakterláncot adtunk át az x argumentumnak, amelyek mindegyike külön jelölést kapott. A DeepPavlovban minden modell bemenetként veszi az értékek listáját (kötegelt), amelyeket egymástól függetlenül dolgoz fel.
A „kötegelt” kifejezés a gépi tanulás területére utal, és független bemeneti értékek kötegére utal, amelyeket egy algoritmus vagy neurális hálózat egyidejűleg dolgoz fel. Ez a megközelítés lehetővé teszi, hogy csökkentse (gyakran jelentősen) azt az időt, amikor a modell egy köteg egy elemét feldolgozza ahhoz képest, hogy ugyanazt az értéket külön-külön továbbítja a bemenetnek. De a feldolgozás eredménye csak az összes elem feldolgozása után kerül kiadásra. Ezért a bejövő köteg generálásakor figyelembe kell venni a modell sebességét és minden egyes elemének szükséges feldolgozási idejét.
Ha a DeepPavlov-modellnek több argumentuma is van, akkor mindegyik saját értékköteget kap, és a kimeneten a modell mindig egy köteg választ állít elő. A kimenő köteg elemei a bejövő kötegek azonos indexű elemeinek feldolgozásának eredményei.
A fenti példában a modell eredménye az volt, hogy minden karakterláncot tokenekre (szavakra és írásjelekre) bontott, és a tokent az általa képviselt megnevezett entitáshoz (szervezet neve, pénznem) viszonyítva osztályozta. Jelenleg a modell ner_ontonotes_bert_mult 18 féle megnevezett entitás felismerésére képes, részletes leírása található
A DeepPavlov további kész modelljei
A NER mellett a következő, kész modellek állnak rendelkezésre a DeepPavlovban a cikk írásakor:
Szöveges kérdés megválaszolása
Válaszoljon a szövegre adott kérdésre ennek a szövegnek a töredékével. Modell konfiguráció: squad_ru_bert_infer
Példa kérés:
{
"context_raw": [
"DeepPavlov разрабатывается лабораторией МФТИ.",
"В юго-западной Руси стог жита оценен в 15 гривен."
],
"question_raw": [
"Кем разрабатывается DeepPavlov?",
"Сколько стоил стог жита на Руси?"
]
}
Eredmény:
[
["лабораторией МФТИ", 27, 31042.484375],
["15 гривен", 39, 1049.598876953125]
]
Sértés észlelése
A szöveg címzettje elleni sértés észlelése (az írás idején - csak angol nyelven). Modell konfigurációja: insults_kaggle_conv_bert
Példa kérés:
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}
Eredmény:
[
["Not Insult"],
["Insult"]
]
Érzelmi elemzés
A szöveges hangulat osztályozása (pozitív, semleges, negatív). Modell konfiguráció: rusentiment_elmo_twitter_cnn
Példa kérés:
{
"x": [
"Мне нравится библиотека DeepPavlov.",
"Я слышал о библиотеке DeepPavlov.",
"Меня бесят тролли и анонимусы."
]
}
Eredmény:
[
["positive"],
["neutral"],
["negative"]
]
Parafrázis-felismerés
Annak meghatározása, hogy két különböző szövegnek ugyanaz a jelentése. Modell konfiguráció: stand_paraphraser_en
Kérés:
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
Eredmény:
[
[1],
[0]
]
Az összes kész DeepPavlov modell aktuális listája mindig megtalálható
Következtetés
Ebben a cikkben megismerkedtünk a DeepPavlov API-val és a könyvtár néhány szövegfeldolgozó funkciójával, amelyet már a dobozból is biztosítunk. Szem előtt kell tartani, hogy minden NLP-feladatnál a legjobb eredményt akkor érjük el, ha a modellt a feladat tárgykörének (domainjének) megfelelő adathalmazra tanítjuk. Ráadásul még több modellt elvileg nem lehet minden helyzetre kiképezni.
A következő cikkekben megvizsgáljuk a könyvtár további beállításait, a DeepPavlov elindítását a Dockerből, majd áttérünk a képzési modellekre. És ne felejtsd el, hogy DeepPavlovnak van
Forrás: will.com