DeepPavlov arendajatele: #1 NLP ja vestlusrobotite loomise tööriistad

Tere kĂ”igile! Alustame artiklite seeriat, mis on pĂŒhendatud praktiliste ĂŒlesannete lahendamisele, mis on seotud loomuliku keele töötlemisega (Natural Language Processing vĂ”i lihtsalt NLP) ja dialoogagentide (vestlusrobotite) loomisega avatud lĂ€htekoodiga raamatukogu abil DeepPavlov, mille arendamisega tegeleb meie MFTI nĂ€rvisĂŒsteemide ja sĂŒvaĂ”ppe labori meeskond. Seeria peamine eesmĂ€rk on tutvustada laiemale arendajate ringile DeepPavlovit ja nĂ€idata, kuidas saab lahendada praktilisi NLP ĂŒlesandeid, omamata seejuures sĂŒgavaid teadmisi masinĂ”ppest ja matemaatika doktorikraadist.

NLP ĂŒlesannete hulka kuuluvad teksti tooni mÀÀramine, nimetatud entiteetide parsimine, mÀÀramine, mida tahab teie robotist vestluspartner: tellida pitsat vĂ”i saada teavet ja palju muud. TĂ€iendavalt NLP ĂŒlesannete ja meetodite kohta saate lugeda siit.

Selles artiklis rÀÀgime, kuidas kÀivitada REST-server eelÔppinud NLP mudelitega, mis on valmis kasutamiseks ilma igasuguse tÀiendava seadistuse vÔi koolituseta.

DeepPavlov arendajatele: #1 NLP ja vestlusrobotite loomise tööriistad

DeepPavlovi installatsioon

Allpool on antud juhised Linuxi jaoks. Windowsi jaoks vaadake meie dokumentatsioon

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

DeepPavlovi mudeli REST-serveri kÀivitamine

Enne, kui kÀivitame esmakordselt serveri DeepPavlovi mudeliga, oleks kasulik rÀÀkida mÔningatest raamatukogu arhitektuuri eripÀra.

Iga mudel DP-s koosneb jÀrgmistest osadest:

  • Pythonis kirjutatud kood;
  • Allalaadimistest komponentidest — seriaalsetest Ă”ppimistulemustest konkreetsetest andmetest (embeddingud, nĂ€rvivĂ”rkude kaalu jne);
  • Konfiguratsioonifailist (edaspidi — konfigureerimisfail), milles on teave mudelis kasutatavate klasside, allalaadimise komponentide URL-ide, Python sĂ”ltuvuste ja muu kohta.

Selle kohta, mis toimub DeepPavlovi all, rÀÀgime jÀrgmistes artiklites; praegu piisab meile teada, et:

  • Iga mudel DeepPavlovis identifitseeritakse oma konfiguratsiooni nimega;
  • Mudeli kĂ€ivitamiseks on vaja alla laadida selle komponendid DeepPavlovi serveritest;
  • Samuti on mudeli kĂ€itamiseks vajalik installida kasutatavad Python raamatukogud.

Esimene mudel, mida kĂ€ivitame, on mitmekeelne nimetuste tuvastamise mudel (NER). Mudel klassifitseerib sĂ”nad teksti jĂ€rgi nimetu seose tĂŒĂŒpide kaupa, kuhu nad kuuluvad (isikunimed, geograafilised nimed, valuutanimed jne). Konfiguratsiooni nimi praeguse versiooni NER jaoks:

ner_ontonotes_bert_mult

KĂ€ivitame REST serveri mudeliga:

  1. Installeerime aktiivsesse virtuaalsesse keskkonda mudeli sÔltuvused, mis on nÀidatud tema konfigureerimises:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Laeme mudeli serialiseeritud komponendid DeepPavlovi serveritest:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Serialiseeritud komponendid laetakse DeepPavlovi kodukausta, mis vaikimisi asub

    ~/.deeppavlov

    Laadimise ajal kontrollitakse, et allalaaditud komponentide hash vastaks serveris olevate komponentide hash'ile. Kui hash'id kattuvad, siis allalaadimist ei toimu ja kasutatakse juba olemasolevaid faile. Allalaaditavate komponentide suurused vÔivad varieeruda keskmiselt 0,5 kuni 8 Gb, mÔnel juhul pÀrast vÀlja pakkimist ulatudes 20 Gb.

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

Selle kÀsu tÀitmise tulemusena kÀivitatakse REST server mudeliga host-masina 5005. port (vaikimisi port on 5000).

PÀrast mudeli initsialiseerimist leiate API dokumentatsiooniga Swaggeri, kus saate seda testida, URL-ilt 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 sisuga:

{
  "x": [
    "MFPIsse saab rongiga Savjolovski jaamast.",
    "LÔuna-lÀÀnes Venemaal hinnatakse heina virna 15 grivni"
  ]
}

Vastuseks peaksime saama jÀrgmise JSON-i:

[
  [
    ["M", "MFPIsse", "saab", "rongiga", "Savjolovski", "jaamast", "."],
    ["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]
  ],
  [
    ["L", "lÔuna", "-", "lÀÀnes", "Venemaal", "heina", "virna", "hinnatakse", "15", "grivni"],
    ["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
  ]
]

Nendel nÀidetel kÀsitleme REST API DeepPavlovi.

DeepPavlovi API

Iga DeepPavlovi mudelil on vĂ€hemalt ĂŒks sisendargument. REST API-s on argumendid nimetatud, nende nimed on sisenddicti vĂ”tmed. Enamasti on argument tekst, mida tuleb töödelda. Rohkem teavet argumentide ja mudelite tagastatavate vÀÀrtuste kohta leiate dokumentatsiooni rubriigist MODELS. DeepPavlov

NĂ€ites oli argumendiks x edastatud kahe rea loend, mille igaĂŒhele anti eraldi vormindus. DeepPavlovis aktsepteerivad kĂ”ik mudelid sisendiks loendi (partii) vÀÀrtusi, mida töödeldakse iseseisvalt.

Termin "partii" (batch) viitab masinĂ”ppe valdkonnale ja tĂ€histab sĂ”ltumatute sisendite pakki, mida algoritm vĂ”i nĂ€rvivĂ”rk töödeldakse samaaegselt. Selline lĂ€henemine vĂ”imaldab tavaliselt vĂ€hendada töötlemisaja, mil ĂŒksiku partii element töödeldakse mudeli poolt, vĂ”rreldes sama vÀÀrtuse eraldiseisva sisendi töötlemisega. Kuid töötlemise tulemus antakse vĂ€lja alles pĂ€rast kĂ”igi elementide töötlemist. SeetĂ”ttu tuleb sisendi partii moodustamisel arvestada mudeli töökiirus ja iga eraldi elementi vajalik töötlemisaeg.

Kui DeepPavlovi mudelil on mitu argumenti, edastatakse igasse neist oma partii vÀÀrtusi, ja mudel vĂ€ljastab alati ĂŒhe partii vastuseid. VĂ€ljundpartii elemendid on sisendpartiidest sama indeksiga elementide töötlemise tulemused.

Antud nĂ€ites oli mudeli töö tulemus igal real tokenite (sĂ”nad ja kirjavahemĂ€rgid) jagamine ja tokeni klassifitseerimine seoses nimetatud entiteediga (ettevĂ”tte nimi, valuuta), mida see esindab. Praegu mudel ner_ontonotes_bert_mult on vĂ”imeline tuvastama 18 tĂŒĂŒpi nimetatud entiteete, mille ĂŒksikasjaliku kirjelduse leidmine on vĂ”imalik siit.

Muud DeepPavlovi vÀlja töötatud mudelid out-of-the-box

Lisaks NER-ile on DeepPavlovis artikli kirjutamise hetkel saadaval jÀrgmised out-of-the-box mudelid:

Teksti kĂŒsimustele vastamine

KĂŒsimusele vastus antud teksti fragmendiga. Mudeli konfigureerimine: squad_ru_bert_infer

PÀringu nÀide:

{
  "context_raw": [
    "DeepPavlovi arendab MFTI laboratoorium.",
    "LÔuna-LÀÀnes hinnati heina kuhi 15 grivnat."
  ],
  "question_raw": [
    "Kes arendab DeepPavlovi?",
    "Kui palju maksis heina kuhi Venemaal?"
  ]
}

Tulemus:

[
  ["MFTI laboratooriumi", 27, 31042.484375],
  ["15 grivnat", 39, 1049.598876953125]
]

Solvangute tuvastamine

Isiku solvangute olemasolu tuvastamine, kellele tekst on suunatud (artikli kirjutamise hetkel — ainult inglise keeles). Mudeli konfigureerimine: insults_kaggle_conv_bert

PÀringu nÀide:


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

Tulemus:

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

Meelsuse analĂŒĂŒs

Teksti meelsuse klassifitseerimine (positiivne, neutraalne, negatiivne). Mudeli konfigureerimine: rusentiment_elmo_twitter_cnn

PÀringu nÀide:

{
  "x": [
    "Mulle meeldib DeepPavlovi teek.",
    "Olen kuulnud DeepPavlovi teegist.",
    "Mulle ei meeldi trollid ja anonĂŒĂŒmsed."
  ]
}

Tulemus:

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

Parafraseerimise tuvastamine

MÀÀramine, kas kahel erineval tekstil on sama tÀhendus. Mudeli konfiguratsioon: stand_paraphraser_ru

PĂ€ring:

{
  "text_a": [
    "Linn jÀÀb unne, Mafia tÔuseb igal hommikul.",
    "USA president on Àhvardanud Saksamaa lepingut lÔpetada."
  ],
  "text_b": [
    "Öö saabub, kĂ”ik linnaelanikud on magama lĂ€inud, kurjategijad on aga Ă€rganud.",
    "Saksamaa ei kavatse USA Àhvardustele alluda."
  ]
}

Tulemus:

[
  [1],
  [0]
]

Aktuaalne nimekiri kÔigist eeldefineeritud DeepPavlovi mudelitest on alati saadaval. siin.

KokkuvÔte

Selles artiklis tutvustasime DeepPavlovi API-d ja mĂ”ningaid teegi tekstiprotsessimise vĂ”imalusi, mis on saadaval "kastist vĂ€lja". T tuleks aga arvestada, et iga NLP ĂŒlesande puhul saavutatakse parim tulemus selle mudeli treenimisel andmekogul, mis vastab ĂŒlesande teema valdkonnale. Lisaks ei saa veelgi rohkem mudeleid olla treenitud kĂ”igeks elu jaoks.

JĂ€rgnevates artiklites vaatame teegi lisaseadeid, DeepPavlovi kĂ€ivitamist Dockeris ning seejĂ€rel liigume mudelite treenimise juurde. Ja Ă€rge unustage, et DeepPavlov on a forum – esitage oma kĂŒsimusi seoses teegi ja mudelitega. AitĂ€h tĂ€helepanu eest!

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster