Üdvözlet mindenkinek! Megnyitjuk cikluset, amely a természetes nyelvfeldolgozással (Natural Language Processing vagy egyszerűen csak NLP) és a nyílt forráskódú könyvtár segítségével készített párbeszédügynökökkel (chatbotok) kapcsolatos gyakorlati feladatok megoldására összpontosít. , amelyet a MFTI Ideghálózati Rendszerek és Mélytanulás Laboratóriumunk csapata fejleszt. A ciklus fő célja, hogy széles körben megismertesse a fejlesztőket a DeepPavlov-val, és bemutassa, hogyan lehet alkalmazási feladatokat megoldani NLP területen, anélkül hogy mélyreható ismeretekkel kellene rendelkezni a gépi tanulásban és a matematikai PhD során.
Az NLP feladatok közé tartozik a szöveg hangnemének meghatározása, a névben szereplő entitások kiemelése, annak megértése, hogy a beszélgetőpartner mit szeretne a chatbotjától: pizzát rendelni vagy információt kérni, és még sok más. Részletesebben az NLP feladatokról és módszereiről itt olvashat. .
Ebben a cikkben bemutatjuk, hogyan indítható el egy REST szerver előképzett NLP modellekkel, amelyek használatra készek bármiféle további beállítás vagy tanulás nélkül.

DeepPavlov telepítése
Itt és a továbbiakban Linux számára készült utasítások találhatóak. Windows felhasználóknak nézze meg a
- Hozza létre és aktiválja a virtuális környezetet a jelenlegi támogatott Python verzióval:
virtualenv env -p python3.7 source env/bin/activate - Telepítse a DeepPavlov-t a virtuális környezetbe:
pip install deeppavlov
REST szerver indítása a DeepPavlov modellel
Mielőtt először elindítanánk a szervert a DeepPavlov modellel, hasznos lenne néhány architektúrával kapcsolatos sajátosságot bemutatni.
Bármely modell a DP-ben a következőkből áll:
- Python kód;
- Letölthető komponensekből — konkrét adatokon végzett tanulás sorozatának (beágyazások, neurális hálózatok súlyai stb.) serializeált eredményei;
- Konfigurációs fájlból (továbbiakban — konfig), amely az általa használt modellek osztályaival, a letöltendő komponensek URL-jeivel, Python függőségekkel és egyéb információval rendelkezik.
Részletesebben arról, hogy mi található a DeepPavlov motorházteteje alatt, a következő cikkekben számolunk be, addig is elegendő tudni, hogy:
- Bármely modell a DeepPavlov-ban a konfigjának nevével azonosítható;
- A modell futtatásához szükséges letölteni annak komponenseit a DeepPavlov szerveréről;
- A modell futtatásához szükséges telepíteni a használt Python könyvtárakat is.
Az első modell, amelyet be fogunk indítani, egy többnyelvű Named Entity Recognition (NER) lesz. A modell a szöveg szavait a nevükből az azonosított entitások típusa szerint osztályozza (sajátnevek, földrajzi nevek, valuta nevek és egyebek). A legfrissebb NER verzió konfigurációs neve:
ner_ontonotes_bert_mult
REST szerver indítása a modellel:
- A modell konfigurációjában megadott függőségek telepítése az aktív virtuális környezetbe:
python -m deeppavlov install ner_ontonotes_bert_mult - A DeepPavlov szerverekről a modell sorosított komponenseinek letöltése:
python -m deeppavlov download ner_ontonotes_bert_multA sorosított komponensek a DeepPavlov otthoni könyvtárába lesznek letöltve, amely alapértelmezés szerint itt található:
~/ .deeppavlovA letöltés során a már letöltött komponensek hash értékei összehasonlításra kerülnek a szerveren található komponensek hash értékeivel. Ha egyezés történik, a letöltés ki van hagyva, és a már meglévő fájlok kerülnek felhasználásra. A letöltött komponensek mérete átlagosan 0,5 és 8 Gb között változhat, bizonyos esetekben a kicsomagolás után elérheti a 20 Gb-ot.
- REST szerver indítása a modellel:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
Ennek a parancsnak a végrehajtása után REST szerver indul a modullal a host gép 5005-ös portján (alapértelmezett port — 5000).
A modell inicializálása után Swagger dokumentációval és tesztelési lehetőséggel található API lesz elérhető az alábbi URL-en: http://127.0.0.1:5005. Teszteljük a modellt, küldjünk egy kérést az végpontra: http://127.0.0.1:5005/model POST kérés a következő JSON tartalommal:
{
"x": [
"Az MFTI-be elektricskával a Savjolovszkij Állomásról lehet eljutni.",
"Délnyugat Oroszországban egy hszájt a 15 hrivnya értéken béleltek"
]
}A válaszban a következő JSON-t kell kapnunk:
[
[
["Az", "MFTI", "be", "lehet", "jutni", "elektricskával", "a", "Savjolovszkij", "Állomásról", "."],
["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]
],
[
["Dél", "nyugati", "Oroszországban", "hszájt", "értékeltek", "15", "hrivnya"],
["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
]
]Ezeken a példákon keresztül megvizsgáljuk a DeepPavlov REST API-ját.
DeepPavlov API
Minden DeepPavlov modell rendelkezik legalább egy bemeneti paraméterrel. A REST API meglévő paraméterek névvel illetett argumentumok, azok nevei a bemeneti szótár kulcsai. A legtöbb esetben a paraméter az a szöveg, amelyet feldolgozni kell. A paraméterekről és a modellek által visszaadott értékekről részletesebben a MODELLEK dokumentációs részben olvashat.
A példában az x argumentumban egy két sorból álló lista került átadásra, amelyhez külön-külön lett kiadva a formázás. A DeepPavlov összes modellje egy listát (batch) fogad, amelynek elemei függetlenül kerülnek feldolgozásra.
A 'batch' kifejezés a gépi tanulás területén használatos, és egy független bejövő értékek csomagját jelenti, amelyeket az algoritmus vagy a neurális hálózat egyszerre dolgoz fel. Ez a megközelítés általában jelentősen csökkenti az egy batch elem feldolgozásának idejét a külön bejövő értékhez képest. Azonban az eredmény csak az összes elem feldolgozása után lesz elérhető. Ezért a bejövő batch kialakításakor figyelembe kell venni a modell működési sebességét és az egyes elemek feldolgozási idejét.
Ha a DeepPavlov modelljeinek több argumentuma van, minden egyes argumentumban saját batch értékcsoportját adják át, miközben a modell mindig egy batch választ ad vissza. A kimeneti batch elemei a bejövő batch-ek azonos indexű elemeinek feldolgozásának eredményei.
A megadott példában a modell munkájának eredményeként minden sort tokenekre (szavak és írásjeleket) bontottunk, és a tokent az általa képviselt elnevezett entitás (szervezet neve, valuta) szempontjából osztályoztuk. Jelenleg a modell ner_ontonotes_bert_mult 18 különböző elnevezett entitás típusának felismerésére képes, részletes leírást találhat itt: .
Egyéb out-of-the-box DeepPavlov modellek
A NER mellett a DeepPavlov a cikk írásának idején az alábbi out-of-the-box modelleket kínálja:
Text Question Answering
Válasz a szöveg kérdésére, ennek a szövegnek egy részével. A modell konfigurációja: squad_ru_bert_infer
Példa kérés:
{
"context_raw": [
"A DeepPavlovot az MFTI laboratóriuma fejleszti.",
"Délnyugat-Oroszországban a búza 15 hrivnya értékű."
],
"question_raw": [
"Ki fejleszti a DeepPavlovot?",
"Mennyibe került a búza tartója Oroszországban?"
]
}Eredmény:
[
["MFTI laboratóriuma", 27, 31042.484375],
["15 hrivnya", 39, 1049.598876953125]
]
Insult Detection
A szöveget címzett személy sértegetésének megállapítása (a cikk írásának idején – csak angol nyelven). Modell konfigurációja: insults_kaggle_conv_bert
Példa kérés:
{
"x": [
"A pénz beszél, a hülyeség jár.",
"Te nem vagy a legokosabb."
]
}Eredmény:
[
["Nem sértés"],
["Sértés"]
]Sentiment Analysis
A szöveg hangulatának (pozitív, semleges, negatív) osztályozása. Modell konfiguráció: rusentiment_elmo_twitter_cnn
Példa kérés:
{
"x": [
"Tetszik a DeepPavlov könyvtár.",
"Hallottam a DeepPavlov könyvtárról.",
"Bosszantanak a trollok és az anonim felhasználók."
]
}Eredmény:
[
["pozitív"],
["semleges"],
["negatív"]
]Parafrázis észlelés
Megállapítja, hogy két különböző szöveg ugyanazt a jelentést hordozza. Modell konfiguráció: stand_paraphraser_ru
Kérelem:
{
"text_a": [
"A város álomba merül, a maffia felébred.",
"Az Egyesült Államok elnöke megfenyegette Németországot a szerződés felmondásával."
],
"text_b": [
"Éjjel van, a város összes lakója aludni tér, a bűnözők pedig felébrednek.",
"Németország nem szándékozik engedni az Egyesült Államok fenyegetéseinek."
]
}Eredmény:
[
[1],
[0]
]A DeepPavlov minden out-of-the-box modelljének aktuális listáját mindig megtalálja .
Zárás
A cikkben megismertük a DeepPavlov API-ját és a könyvtár szövegfeldolgozási lehetőségeit, amelyeket „dobozból ki” kínál. Fontos megjegyezni, hogy bármely NLP feladat esetén a legjobb eredményt akkor érhetjük el, ha a modellt a feladat szakterületének (domain) megfelelő adathalmazon tanítjuk. Ezen kívül még több modellt gyakorlatilag nem lehet minden helyzetre megtanítani.
A következő cikkekben további beállításokat fogunk megvizsgálni a könyvtár számára, a DeepPavlov Docker-ből való indítását, majd áttérünk a modellek tanítására. Ne feledje, hogy a DeepPavlov rendelkezik – tegyen fel kérdéseket a könyvtárral és a modellekkel kapcsolatban. Köszönjük a figyelmet!
Forrás: habr.com
