DeepPavlov fejlesztőknek: #1 NLP-eszközök és chatbotok létrehozása

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. Mély Pavlov, amelyet a MIPT Laboratory of Neural Systems and Deep Learning csapatunk fejleszt. A sorozat fő célja, hogy megismertesse DeepPavlovot a fejlesztők széles körével, és megmutassa, hogyan oldhat meg alkalmazott NLP-problémákat anélkül, hogy mély gépi tanulási ismeretekkel és matematikai doktori fokozattal rendelkezne.

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

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.

DeepPavlov fejlesztőknek: #1 NLP-eszközök és chatbotok létrehozása

A DeepPavlov telepítése

Itt és alább a Linuxra vonatkozó utasításokat adjuk meg. Windows esetén lásd a mi dokumentáció

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

  1. 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
    
  2. 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.

  3. 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ó Mély Pavlov

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

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

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 a fórum – tegye fel kérdéseit a könyvtárral és a modellekkel kapcsolatban. Köszönöm a figyelmet!

Forrás: will.com

Hozzászólás