DeepPavlov arendajatele: #1 NLP ja vestlusbotide tööriistad

Tere kõigile! Alustame artiklite seeriat, mis on pühendatud praktilistele probleemidele, mis on seotud loomuliku keele töötlemise (Natural Language Processing ehk lihtsalt NLP) ja dialooge agente (vestlusbotide) loomisega open-source raamatukogu abil. DeepPavlov, mille arendab meie MFTI närvisüsteemide ja süvaõppe labori meeskond. Seeria peamine eesmärk on tutvustada laiemat arendajate ringi DeepPavloviga ning näidata, kuidas saab lahendada praktilisi NLP ülesandeid, omamata sügavaid teadmisi masinõppest ja doktorikraadist matemaatikas.

NLP ülesannete alla kuuluvad teksti toonuse määramine, nimetatud üksuste analüüs, määramine, mida soovib teie botilt vestluspartner: tellida pitsa või saada teavet ning palju muud. Täiendavat teavet NLP ülesannete ja meetodite kohta saate lugeda siin.

Selles artiklis räägime, kuidas käivitada REST-server ettevalmistatud NLP mudelitega, mis on kasutamiseks valmis ilma lisaseadistuste või koolituseta.

DeepPavlov arendajatele: #1 NLP ja vestlusbotide tööriistad

DeepPavlov'i installimine

Siin ja edaspidi on toodud juhised Linuxile. Windowsi kohta vaadake meie dokumentatsiooni

  • Looge ja aktiveerige virtuaalne keskkond praeguse toetatud Python versiooniga:
    virtualenv env -p python3.7
    source env/bin/activate
  • Installeerige DeepPavlov virtuaalsesse keskkonda:
    pip install deeppavlov
    

DeepPavlov mudeli REST serveri käivitamine

Enne, kui käivitame first korda DeepPavlov mudeli serveri, on kasulik rääkida mõningatest raamatukogu arhitektuuri omadustest.

Iga mudel DP-s koosneb:

  • Python koodist;
  • Allalaetavatest komponentidest — seeriate tulemustest, mis on koolitatud konkreetsetel andmetel (süvendi, närvivõrkude kaalud jne);
  • Konfiguratsioonifailist (edaspidi — konfig), mis sisaldab teavet mudelis kasutatavate klasside, allalaetavate komponentide URL-ide, Python sõltuvuste jne kohta.

Süvenemise juurde, mis on DeepPavlov-i all, räägime järgmistes artiklites, kuid praegu on meil piisav teada, et:

  • Iga mudel DeepPavlov-is identifitseeritakse oma konfigu nimi järgi;
  • Mudeli käivitamiseks tuleb selle komponendid alla laadida DeepPavlov serveritest;
  • Samuti tuleb mudeli käivitamiseks paigaldada selle kasutatavad Python raamatukogud.

Esimene mudel, mille me käivitame, on mitmekeelne nimede tuvastamise (NER) mudel. Mudel klassifitseerib teksti sõnu vastavalt nende kuuluvusele nimede tüüpidesse (isikunimed, geograafilised nimed, raha nimed ja teised). Hetkel kõige uuema NER versiooni konfiguratsiooni nimi:

ner_ontonotes_bert_mult

Käivitame REST-serveri mudeliga:

  1. Installeerime aktiivsetesse virtuaalsetesse keskkondadesse mudeli sõltuvused, mis on märgitud tema konfiguratsioonis:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Laeme DeepPavlovi serveritest mudeli serialiseeritud komponente:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Serialiseeritud komponendid laetakse alla DeepPavlovi kodukausta, mis asub vaikimisi

    ~/ .deeppavlov

    Laadimise käigus võrdleb allalaadimise ajal saadud komponentide hash juba allalaaditud komponentide hashidega, kui need kattuvad, siis allalaadimist vahele jäetakse ja kasutatakse juba olemasolevaid faile. Allalaaditavate komponentide suurused võivad keskmiselt varieeruda 0,5 kuni 8 Gb, mõnel juhul pärast dekompressimist isegi kuni 20 Gb.

  3. Käivitame REST-serveri mudeliga:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Antud käsu täitmisel käivitatakse REST-server mudeliga, mis töötab host-masinas pordil 5005 (vaikimisi port on 5000).

Pärast mudeli initsialiseerimist leiate Swaggeri dokumentatsiooni API ja testimisvõimalustega URL-i kaudu. http://127.0.0.1:5005. Testime mudelit, saates lõpp-punktile http://127.0.0.1:5005/model POST-päringu järgmise JSON-sisaldusega:

{
  "x": [
    "MFTIsse saab elektrirongiga Savëlovski jaamast.",
    "Lõuna-Venemaal hinnatakse heina umbes 15 grivna"
  ]
}

Vastusena peaksime saama järgmise JSONi:

[
  [
    ["M", "MFTI", "saab", "elektrirongiga", "Savëlovski", "jaamast", "."],
    ["O", "B-FAC", "O", "O", "B-FAC", "I-FAC", "O"]
  ],
  [
    ["L", "lõuna", "-", "venemaal", "hein", "hinnatud", "umbes", "15", "grivna"],
    ["O", "B-LOC", "I-LOC", "I-LOC", "O", "O", "O", "B-MONEY", "I-MONEY"]
  ]
]

Need näited tutvustavad REST API DeepPavlovist.

DeepPavlovi API

Iga DeepPavlovi mudelil on vähemalt üks sisenev argument. REST API-s on argumendid nimetatud, nende nimed on sissetuleva sõnastiku võtmed. Enamikul juhtudel on argument tekst, mida tuleb töödelda. Lisainfot argumentide ja mudelite tagastatavate väärtuste kohta leiate jaotisest MODELS dokumentatsioonis. DeepPavlov

Näites anti argumendiks x kaks rida, millele andis oma eraldi vormingu. DeepPavlovis võtavad kõik mudelid sisendiks nimekirja (partii) väärtustest, mida töödeldakse iseseisvalt.

Termin "partii" (batch) viitab masinõppe valdkonda ning tähendab paketti sõltumatutest sisendväärtustest, mida algoritm või närvivõrk töötleb samaaegselt. Selline lähenemine võimaldab oluliselt vähendada mudeli ühe partii elemendi töötlemise aega võrreldes sama väärtuse edastamisega eraldi. Kuid töötlemise tulemus antakse välja alles pärast kõigi elementide töötlemist. Seetõttu on siseneva partii koostamisel vajalik arvestada mudeli töökiirusest ja iga eraldi elemendi töötlemiseks vajalikust ajast.

Kui DeepPavlovi mudelil on mitu argumenti, siis edastatakse igasse neist oma partii väärtusi ning mudel annab alati välja ühe vastuste partii. Väljamineva partii elemendid on sisenevate partii elementide töötlemise tulemused, millel on sama indeks.

Antud näites koostas mudel tulemuse, jagades iga rea tokeniteks (sõnad ja kirjavahemärgistused) ning klassifitseerides tokeni vastavalt esindatavale nimetatud entiteedile (organisatsiooni nimi, valuuta). Praegu suudab mudel ner_ontonotes_bert_mult tuvastada 18 tüüpi nimetatud entiteete, detailse kirjelduse leiab siin.

Teised valmis mudelid DeepPavlovist

Lisaks NER-ile on DeepPavlovis antud artikli kirjutamise ajal saadaval järgmised välja töötatud mudelid:

Teksti Küsimusele Vastamine

Vastus küsimusele tekstile, kasutades selle teksti fragmenti. Mudeli konfiguratsioon: squad_ru_bert_infer

Küsimuse näidis:

{
  "context_raw": [
    "DeepPavlov on välja töötatud MFTI laboratooriumi poolt.",
    "Lõuna-Venemaal hinnati heinasalli 15 grivna."
  ],
  "question_raw": [
    "Kes arendab DeepPavlovi?",
    "Kui palju maksis heinasall Venemaal?"
  ]
}

Tulemus:

[
  ["MFTI laboratoorium", 27, 31042.484375],
  ["15 grivna", 39, 1049.598876953125]
]

Solvangute tuvastamine

Isiku solvangute tuvastamine, kellele tekst on suunatud (artikli kirjutamise ajal — ainult inglise keele jaoks). Mudeli konfiguratsioon: insults_kaggle_conv_bert

Küsimuse näidis:


{
  "x": [
    "Raha räägib, jama jalutab.",
    "Sa ei ole kõige erksam inimene."
  ]
}

Tulemus:

[
  ["Ei solvang"],
  ["Solvang"]
]

Tundeanalüüs

Teksti tonaalsuse klassifikatsioon (positiivne, neutraalne, negatiivne). Mudeli konfigureerimine: rusentiment_elmo_twitter_cnn

Küsimuse näidis:

{
  "x": [
    "Mulle meeldib DeepPavlov teek.",
    "Ma olen kuulnud DeepPavlov teegist.",
    "Mind häirivad trollid ja anonüümsed kasutajad."
  ]
}

Tulemus:

[
  ["positiivne"],
  ["neutraalne"],
  ["negatiivne"]
]

Parafraseerimise tuvastamine

Määramine, kas kahes erinevas tekstis on sama tähendus. Mudeli konfigureerimine: stand_paraphraser_ru

Küsimus:

{
  "text_a": [
    "Linn vajub unne, Mafia ärkab üles.",
    "USA president ähvardas lepingut Saksamaaga lõpetada."
  ],
  "text_b": [
    "Öö hakkab kätte jõudma, kõik linna elanikud läksid magama, ja kurjategijad ärkasid.",
    "Saksamaa ei kavatse USA ähvardustele alluda."
  ]
}

Tulemus:

[
  [1],
  [0]
]

Praeguse nimekirja kõigist DeepPavlov mudelitest out-of-the-box leiate alati siit.

Kokkuvõte

Selles artiklis tutvusime DeepPavlov API ja teekide tekstitöötluse võimalustega, mis on saadaval "välja kastist". Tuleb meeles pidada, et iga NLP ülesande jaoks saavutatakse parim tulemus, kui mudel treenitakse andmehulgale, mis vastab ülesande valdkonna (domeeni) nõuetele. Lisaks ei saa tegelikult veel rohkem mudeleid igasuguste olukordade jaoks treenida.

Järgmistes artiklites käsitleme DeepPavlovi raamatukogu täiendavaid seadeid, Dockeris DeepPavlovi käivitamist ja seejärel liigume mudelite koolitamise juurde. Ja ärge unustage, et DeepPavlov pakub projekti foorum, – esitage oma küsimusi raamatukogu ja mudelite kohta. Täname tähelepanu eest!

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster