Silav hemû! Em rêzek gotaran vedikin ku ji bo çareserkirina pirsgirêkên pratîkî yên têkildarî pêvajokirina zimanê xwezayî (Pêvajoya Zimanê Xwezayî an bi tenê NLP) ve girêdayî ne û bi karanîna pirtûkxaneyek çavkaniyek vekirî ajanên diyalogê (chatbots) diafirînin.
Karên NLP-ê di nav de destnîşankirina hesta nivîsê, parskirina sazûmanên binavkirî, destnîşankirina tiştê ku hevpeyivîn ji bota we dixwaze: pizza ferman bikin an agahdariya paşîn bistînin, û hêj bêtir. Hûn dikarin li ser kar û rêbazên NLP bêtir bixwînin
Di vê gotarê de, em ê nîşanî we bidin ka meriv çawa serverek REST-ê bi modelên NLP-ya pêş-perwerdekirî dimeşîne, amade ye ku bêyî konfigurasyon an perwerdehiyek zêde bikar bîne.
Sazkirina DeepPavlov
Li vir û jêrîn, dê rêwerzên ji bo Linux werin dayîn. Ji bo Windows, me bibînin
- Bi guhertoya piştgirî ya heyî ya Python re jîngehek virtual biafirînin û çalak bikin:
virtualelnv env -p python3.7 source env/bin/activate
- DeepPavlov di hawîrdorek virtual de saz bikin:
pip install deeppavlov
Bi modela DeepPavlov re serverek REST dest pê dike
Berî ku em yekem car serverek bi modela DeepPavlov vekin, dê kêrhatî be ku em li ser hin taybetmendiyên mîmariya pirtûkxaneyê biaxivin.
Her modelek di DP de pêk tê:
- Koda Python;
- Parçeyên dakêşbar - encamên perwerdehiya serialkirî yên li ser daneyên taybetî (binavkirin, giraniya torên neuralî, hwd.);
- Pelek veavakirinê (li vir wekî mîheng tê binav kirin), ku agahdariya der barê çînên ku ji hêla modelê ve têne bikar anîn, URL-yên pêkhateyên dakêşandî, girêdayîbûna Python, hwd.
Em ê di gotarên jêrîn de li ser tiştê ku di bin kavilê DeepPavlov de ye bêtir ji we re vebêjin, ji ber ku niha bes e ku em zanibin ku:
- Her modelek di DeepPavlov de bi navê konfigurasyona xwe tê nasîn;
- Ji bo xebitandina modelê, hûn hewce ne ku pêkhateyên wê ji serverên DeepPavlov dakêşin;
- Di heman demê de, ji bo xebitandina modelê, hûn hewce ne ku pirtûkxaneyên Python ku ew bikar tîne saz bikin.
Modela yekem a ku em ê bidin destpêkirin dê Named Entity Recognition (NER) pirzimanî be. Model peyvên nivîsê li gorî celebê hebûnên binavkirî yên ku ew girêdayî ne (navên xwerû, navên erdnîgarî, navên dirav û yên din) dabeş dike. Navê mîhengê ji bo guhertoya herî dawî ya NER ya heyî:
ner_ontonotes_bert_mult
Em servera REST bi modêlê dest pê dikin:
- Em girêdanên modelê yên ku di veavakirina wê de hatine destnîşan kirin li hawîrdora virtual ya çalak saz dikin:
python -m deeppavlov install ner_ontonotes_bert_mult
- Ji serverên DeepPavlov pêkhateyên modela serialîzekirî dakêşin:
python -m deeppavlov download ner_ontonotes_bert_mult
Dê pêkhateyên serialîzekirî li pelrêça malê ya DeepPavlov, ku ji hêla xwerû ve ye, werin dakêşandin
~/.deeppavlov
Dema dakêşandinê, haşa hêmanên jixwe dakêşandî li hember haşên pêkhateyên ku li ser serverê ne têne kontrol kirin. Ger lihevhatinek hebe, dakêşandin tê avêtin û pelên heyî têne bikar anîn. Mezinahiyên hêmanên dakêşandî dikarin bi navînî ji 0.5 heta 8 Gb diguhezin, di hin rewşan de piştî rakirinê digihîjin 20 Gb.
- Em servera REST bi modêlê dest pê dikin:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
Di encama pêkanîna vê fermanê de, dê serverek REST bi modelek li ser porta 5005-a makîneya mêvandar were destpêkirin (porta xwerû 5000 e).
Piştî destpêkirina modelê, Swagger bi belgeyên API-ê û şiyana ceribandinê dikare li URL-ê were dîtin http://127.0.0.1:5005
. Ka em modelê bi şandina wê berbi xala dawîn ve ceribandin http://127.0.0.1:5005/model
Daxwaza POST bi naveroka JSON jêrîn:
{
"x": [
"В МФТИ можно добраться на электричке с Савёловского Вокзала.",
"В юго-западной Руси стог жита оценен в 15 гривен"
]
}
Di bersivê de divê em JSON-ya jêrîn bistînin:
[
[
["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
["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"]
]
]
Bi karanîna van mînakan, em ê API-ya DeepPavlov REST analîz bikin.
API DeepPavlov
Her modela DeepPavlov bi kêmî ve yek argumana têketinê heye. Di REST API de, argûman têne binav kirin, navên wan mifteyên ferhengê ne. Di pir rewşan de, arguman ew nivîs e ku pêdivî ye ku were pêvajo kirin. Zêdetir agahdarî di derbarê arguman û nirxên ku ji hêla modelan ve hatine vegerandin dikarin di beşa MODELS ya belgeyê de werin dîtin.
Di nimûneyê de, navnîşek ji du rêzan ji argumana x re hate derbas kirin, ku her yek ji wan nîşanek cûda hate dayîn. Di DeepPavlov de, hemî model navnîşek (hevok) nirxên ku serbixwe têne hilberandin wekî navnîşek digirin.
Têgîna "hevî" ji qada fêrbûna makîneyê re vedibêje û ji komek nirxên têketinê yên serbixwe ku ji hêla algorîtmek an tora neuralî ve bi hevdemî ve têne hilberandin vedibêje. Ev nêzîkatî dihêle hûn (pir caran bi girîngî) dema ku model yek hêmanek hevîrê pêvajo dike li gorî heman nirxê ku ji têketinê veqetandî derbas dibe kêm bikin. Lê encama pêvajoyê tenê piştî ku hemî hêman têne hilberandin têne derxistin. Ji ber vê yekê, dema ku berhevokek hatî hilberandin, pêdivî ye ku meriv leza modelê û dema pêvajoyek pêdivî ya ji bo her hêmanên wê yên ferdî li ber çavan bigire.
Ger çend argûmanên modela DeepPavlov hebin, her yek ji wan komek nirxan distîne, û di encam de model her gav komek bersivan derdixe. Hêmanên berika derketinê encamên pêvajokirina hêmanên beşên hatina bi heman indexê ne.
Di mînaka li jor de, encama modelê ew bû ku her xêz li nîşanan (peyv û nîşaneyên xalbendiyê) veqetîne û tokenê li gorî saziya binavkirî (navê rêxistinê, dirav) ku ew temsîl dike, dabeş bike. Niha modela ner_ontonotes_bert_mult ku karibe 18 celeb hebûnên binavkirî nas bike, ravekirinek berfireh dikare were dîtin
Modelên din ên derveyî ji hêla DeepPavlov ve
Digel NER-ê, di dema nivîsandinê de modelên derveyî yên jêrîn li DeepPavlov hene:
Text Question Bersiv
Pirsa nivîsê bi parçeyek ji vê nivîsê bibersivînin. Veavakirina modelê: squad_ru_bert_infer
Nimûne daxwaz:
{
"context_raw": [
"DeepPavlov разрабатывается лабораторией МФТИ.",
"В юго-западной Руси стог жита оценен в 15 гривен."
],
"question_raw": [
"Кем разрабатывается DeepPavlov?",
"Сколько стоил стог жита на Руси?"
]
}
Encam:
[
["лабораторией МФТИ", 27, 31042.484375],
["15 гривен", 39, 1049.598876953125]
]
Tespîtkirina heqaretê
Tespîtkirina hebûna heqaretê li kesê ku nivîs jê re tê şandin (di dema nivîsandinê de - tenê ji bo Englishngilîzî). Veavakirina modelê: insults_kaggle_conv_bert
Nimûne daxwaz:
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}
Encam:
[
["Not Insult"],
["Insult"]
]
Analysis Sentiment
Dabeşkirina hesta nivîsê (erênî, bêalî, neyînî). Veavakirina modelê: rusentiment_elmo_twitter_cnn
Nimûne daxwaz:
{
"x": [
"Мне нравится библиотека DeepPavlov.",
"Я слышал о библиотеке DeepPavlov.",
"Меня бесят тролли и анонимусы."
]
}
Encam:
[
["positive"],
["neutral"],
["negative"]
]
Parafrase Detection
Tesbîtkirina ka du metnên cuda xwedî heman wateyê ne. Veavakirina modelê: stand_paraphraser_en
Tika:
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
Encam:
[
[1],
[0]
]
Navnîşa heyî ya hemî modelên derveyî yên DeepPavlov her gav dikare were dîtin
encamê
Di vê gotarê de, me bi API-ya DeepPavlov û hin kapasîteyên hilberandina nivîsê ya pirtûkxaneyê ku ji qutîkê hatî peyda kirin nas kir. Pêdivî ye ku ji bîr mekin ku ji bo her peywirek NLP, dema ku modela li ser berhevokek daneya ku bi qada mijarê (domîna) peywirê re têkildar e, dê encama çêtirîn were bidestxistin. Wekî din, hêj bêtir model, di prensîbê de, ji bo hemî rewşan nayên perwerde kirin.
Di gotarên jêrîn de em ê li mîhengên zêde yên pirtûkxaneyê binêrin, DeepPavlov ji Docker dest pê bikin, û dûv re em ê derbasî modelên perwerdehiyê bibin. Û ji bîr nekin ku DeepPavlov heye
Source: www.habr.com