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. , 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 .
Selles artiklis rÀÀgime, kuidas kÀivitada REST-server ettevalmistatud NLP mudelitega, mis on kasutamiseks valmis ilma lisaseadistuste vÔi koolituseta.

DeepPavlov'i installimine
Siin ja edaspidi on toodud juhised Linuxile. Windowsi kohta vaadake meie
- 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:
- Installeerime aktiivsetesse virtuaalsetesse keskkondadesse mudeli sÔltuvused, mis on mÀrgitud tema konfiguratsioonis:
python -m deeppavlov install ner_ontonotes_bert_mult - Laeme DeepPavlovi serveritest mudeli serialiseeritud komponente:
python -m deeppavlov download ner_ontonotes_bert_multSerialiseeritud komponendid laetakse alla DeepPavlovi kodukausta, mis asub vaikimisi
~/ .deeppavlovLaadimise 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.
- 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.
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 .
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 .
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 â esitage oma kĂŒsimusi raamatukogu ja mudelite kohta. TĂ€name tĂ€helepanu eest!
Allikas: habr.com
