DeepPavlov kehittäjille: #1 NLP-työkalut ja chatbotin luominen

Hei kaikki! Avaamme artikkelisarjan, joka on omistettu luonnollisen kielen käsittelyyn (Natural Language Processing tai yksinkertaisesti NLP) liittyvien käytännön ongelmien ratkaisemiseen ja dialogiagenttien (chatbottien) luomiseen avoimen lähdekoodin kirjaston avulla. Syvä Pavlov, jota kehittää tiimimme MIPT Laboratory of Neural Systems and Deep Learning -laboratoriossa. Sarjan päätavoitteena on esitellä DeepPavlov laajalle valikoimalle kehittäjiä ja näyttää, kuinka voit ratkaista sovellettuja NLP-ongelmia ilman syvällistä koneoppimisen tuntemusta ja matematiikan tohtorintutkintoa.

NLP-tehtäviin kuuluu tekstin tunteen määrittäminen, nimettyjen entiteettien jäsentäminen, sen määrittäminen, mitä keskustelukumppani haluaa robotiltasi: pizzan tilaaminen tai taustatietojen hankkiminen ja paljon muuta. Voit lukea lisää NLP-tehtävistä ja -menetelmistä täällä.

Tässä artikkelissa näytämme, kuinka voit käyttää REST-palvelinta valmiiksi koulutetuilla NLP-malleilla, jotka ovat käyttövalmiita ilman lisämäärityksiä tai koulutusta.

DeepPavlov kehittäjille: #1 NLP-työkalut ja chatbotin luominen

DeepPavlovin asennus

Tässä ja alla annetaan ohjeet Linuxille. Katso Windowsille dokumentointi

  • Luo ja aktivoi virtuaalinen ympäristö nykyisellä tuetulla Python-versiolla:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Asenna DeepPavlov virtuaaliympäristöön:
    pip install deeppavlov
    

REST-palvelimen käynnistäminen DeepPavlov-mallilla

Ennen kuin käynnistämme DeepPavlov-mallin palvelimen ensimmäistä kertaa, on hyödyllistä puhua joistakin kirjaston arkkitehtuurin ominaisuuksista.

Mikä tahansa DP:n malli koostuu:

  • Python-koodi;
  • Ladattavat komponentit - sarjoitetut harjoitustulokset tietyille tiedoille (upotukset, hermoverkkojen painot jne.);
  • Määritystiedosto (jäljempänä konfiguraatio), joka sisältää tietoja mallin käyttämistä luokista, ladattujen komponenttien URL-osoitteista, Python-riippuvuuksista jne.

Kerromme sinulle lisää siitä, mitä DeepPavlovin konepellin alla on seuraavissa artikkeleissa, toistaiseksi meille riittää, että tiedämme:

  • Kaikki mallit DeepPavlovissa tunnistetaan sen konfiguraation nimellä;
  • Mallin suorittamiseksi sinun on ladattava sen komponentit DeepPavlov-palvelimista;
  • Lisäksi mallin suorittamiseksi sinun on asennettava sen käyttämät Python-kirjastot.

Ensimmäinen lanseeraamamme malli on monikielinen Named Entity Recognition (NER). Malli luokittelee tekstisanat niiden nimettyjen entiteettien tyypin mukaan, johon ne kuuluvat (oisnimet, maantieteelliset nimet, valuuttojen nimet ja muut). NER:n nykyisen uusimman version kokoonpanon nimi:

ner_ontonotes_bert_mult

Käynnistämme REST-palvelimen mallilla:

  1. Asennamme sen asetuksissa määritellyt malliriippuvuudet aktiiviseen virtuaaliympäristöön:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Lataa sarjamuotoiset mallikomponentit DeepPavlov-palvelimista:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Sarjaistetut komponentit ladataan DeepPavlovin kotihakemistoon, joka sijaitsee oletuksena

    ~/.deeppavlov

    Ladattaessa jo ladattujen komponenttien tiiviste tarkistetaan palvelimella olevien komponenttien hajautusarvojen kanssa. Jos osuma löytyy, lataus ohitetaan ja olemassa olevia tiedostoja käytetään. Ladattujen komponenttien koot voivat vaihdella keskimäärin 0.5 - 8 Gt, joissain tapauksissa jopa 20 Gt purkamisen jälkeen.

  3. Käynnistämme REST-palvelimen mallilla:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Tämän komennon suorittamisen seurauksena isäntäkoneen portissa 5005 (oletusportti on 5000) käynnistetään mallineen REST-palvelin.

Mallin alustamisen jälkeen Swagger API-dokumentaatiolla ja testausmahdollisuudella löytyy URL-osoitteesta http://127.0.0.1:5005. Testataan mallia lähettämällä se päätepisteeseen http://127.0.0.1:5005/model POST-pyyntö, jossa on seuraava JSON-sisältö:

{
  "x": [
    "В МФТИ можно добраться на электричке с Савёловского Вокзала.",
    "В юго-западной Руси стог жита оценен в 15 гривен"
  ]
}

Vastauksena meidän pitäisi saada seuraava 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"]
  ]
]

Näiden esimerkkien avulla analysoimme DeepPavlov REST API:n.

API DeepPavlov

Jokaisella DeepPavlov-mallilla on vähintään yksi syöteargumentti. REST API:ssa argumentit nimetään, niiden nimet ovat saapuvan sanakirjan avaimia. Useimmissa tapauksissa argumentti on teksti, joka on käsiteltävä. Lisätietoja mallien palauttamista argumenteista ja arvoista löytyy dokumentaation MALLIT-osiosta Syvä Pavlov

Esimerkissä argumenttiin x välitettiin luettelo kahdesta merkkijonosta, joille kullekin annettiin erillinen merkintä. DeepPavlovissa kaikki mallit ottavat syötteenä luettelon (erän) arvoista, jotka käsitellään itsenäisesti.

Termi "erä" viittaa koneoppimisen alaan ja viittaa itsenäisten syöttöarvojen joukkoon, jota algoritmi tai neuroverkko käsittelee samanaikaisesti. Tämän lähestymistavan avulla voit lyhentää (usein merkittävästi) aikaa, jonka malli käsittelee erän yhden elementin verrattuna samaan arvoon, joka välitetään syötteeseen erikseen. Mutta käsittelytulos julkaistaan ​​vasta, kun kaikki elementit on käsitelty. Siksi tulevaa erää luotaessa on otettava huomioon mallin nopeus ja vaadittava käsittelyaika jokaiselle sen yksittäiselle elementille.

Jos DeepPavlov-mallissa on useita argumentteja, kukin niistä saa oman arvoerän, ja tulosteessa malli tuottaa aina yhden erän vastauksia. Lähtevän erän elementit ovat tulosta saapuvien erien elementtien käsittelystä samalla indeksillä.

Yllä olevassa esimerkissä mallin tuloksena oli jakaa jokainen merkkijono tokeneiksi (sanoihin ja välimerkkeihin) ja luokitella merkki suhteessa nimettyyn kokonaisuuteen (organisaation nimi, valuutta), jota se edustaa. Tällä hetkellä malli ner_ontonotes_bert_mult pystyy tunnistamaan 18 tyyppiä nimettyjä entiteettejä, yksityiskohtainen kuvaus löytyy täällä.

Muita DeepPavlovin valmiita malleja

NER:n lisäksi seuraavat valmiit mallit ovat saatavilla DeepPavlovissa tätä kirjoitettaessa:

Tekstikysymykseen vastaaminen

Vastaa kysymykseen tekstin osalla tätä tekstiä. Mallin konfiguraatio: squad_ru_bert_infer

Esimerkkipyyntö:

{
  "context_raw": [
    "DeepPavlov разрабатывается лабораторией МФТИ.",
    "В юго-западной Руси стог жита оценен в 15 гривен."
  ],
  "question_raw": [
    "Кем разрабатывается DeepPavlov?",
    "Сколько стоил стог жита на Руси?"
  ]
}

Результат:

[
  ["лабораторией МФТИ", 27, 31042.484375],
  ["15 гривен", 39, 1049.598876953125]
]

Loukkauksen havaitseminen

Loukkauksen havaitseminen henkilölle, jolle teksti on osoitettu (kirjoitushetkellä - vain englanniksi). Mallin konfiguraatio: insults_kaggle_conv_bert

Esimerkkipyyntö:


{
  "x": [
    "Money talks, bullshit walks.",
    "You are not the brightest one."
  ]
}

Результат:

[
  ["Not Insult"],
  ["Insult"]
]

Aistien analyysi

Tekstin tunteiden luokitus (positiivinen, neutraali, negatiivinen). Mallin konfiguraatio: rusentiment_elmo_twitter_cnn

Esimerkkipyyntö:

{
  "x": [
    "Мне нравится библиотека DeepPavlov.",
    "Я слышал о библиотеке DeepPavlov.",
    "Меня бесят тролли и анонимусы."
  ]
}

Результат:

[
  ["positive"],
  ["neutral"],
  ["negative"]
]

Parafraasien tunnistus

Sen määrittäminen, onko kahdella eri tekstillä sama merkitys. Mallin konfiguraatio: stand_paraphraser_en

kysely:

{
  "text_a": [
    "Город погружается в сон, просыпается Мафия.",
    "Президент США пригрозил расторжением договора с Германией."
  ],
  "text_b": [
    "Наступает ночь, все жители города пошли спать, а преступники проснулись.",
    "Германия не собирается поддаваться угрозам со стороны США."
  ]
}

Результат:

[
  [1],
  [0]
]

Ajantasainen luettelo kaikista valmiista DeepPavlov-malleista löytyy aina täällä.

Johtopäätös

Tässä artikkelissa tutustuimme DeepPavlov-sovellusliittymään ja joihinkin kirjaston tekstinkäsittelyominaisuuksiin, jotka toimitetaan heti valmiina. On syytä muistaa, että missä tahansa NLP-tehtävässä paras tulos saavutetaan harjoittamalla mallia tehtävän aihealuetta (aluetta) vastaavalle tietojoukolle. Lisäksi useampia malleja ei periaatteessa voida kouluttaa kaikkiin tilanteisiin.

Seuraavissa artikkeleissa tarkastellaan kirjaston lisäasetuksia, käynnistämällä DeepPavlov Dockerista, ja sitten siirrymme koulutusmalleihin. Ja älä unohda, että DeepPavlovilla on foorumi – kysy kysymyksiä kirjastosta ja malleista. Kiitos huomiostasi!

Lähde: will.com

Lisää kommentti