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

DeepPavlovi installatsioon
Allpool on antud juhised Linuxi jaoks. Windowsi jaoks vaadake meie
- 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:
- Installeerime aktiivsesse virtuaalsesse keskkonda mudeli sÔltuvused, mis on nÀidatud tema konfigureerimises:
python -m deeppavlov install ner_ontonotes_bert_mult - Laeme mudeli serialiseeritud komponendid DeepPavlovi serveritest:
python -m deeppavlov download ner_ontonotes_bert_multSerialiseeritud komponendid laetakse DeepPavlovi kodukausta, mis vaikimisi asub
~/.deeppavlovLaadimise 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.
- 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.
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 .
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. .
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 â esitage oma kĂŒsimusi seoses teegi ja mudelitega. AitĂ€h tĂ€helepanu eest!
Allikas: habr.com
