DeepPavlov fejlesztők számára: #1 NLP és chatbot-készítő eszközök.

Ü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. DeepPavlov, 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. itt.

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 fejlesztők számára: #1 NLP és chatbot-készítő eszközök.

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 a dokumentációval

  • 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:

  1. 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
    
  2. A DeepPavlov szerverekről a modell sorosított komponenseinek letöltése:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    A sorosított komponensek a DeepPavlov otthoni könyvtárába lesznek letöltve, amely alapértelmezés szerint itt található:

    ~/ .deeppavlov

    A 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.

  3. 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. DeepPavlov

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: 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 itt.

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 fórum – tegyen fel kérdéseket a könyvtárral és a modellekkel kapcsolatban. Köszönjük a figyelmet!

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster