DeepPavlov ji bo pêşdebiran: #1 Amûrên NLP û afirandina chatbot

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. DeepPavlov, ya ku ji hêla tîmê me ve li Laboratoriya Pergalên Neuralî û Fêrbûna Kûr a MIPT ve hatî pêşve xistin. Armanca sereke ya rêzê ew e ku DeepPavlov bi cûrbecûr pêşdebiran re bide nasîn û nîşan bide ka hûn çawa dikarin pirsgirêkên NLP-ê yên sepandî bêyî zanîna kûr di Fêrbûna Makîneyê û PhD-ya Matematîkê de çareser bikin.

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

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.

DeepPavlov ji bo pêşdebiran: #1 Amûrên NLP û afirandina chatbot

Sazkirina DeepPavlov

Li vir û jêrîn, dê rêwerzên ji bo Linux werin dayîn. Ji bo Windows, me bibînin belgekirin

  • 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:

  1. 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
    
  2. 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.

  3. 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. DeepPavlov

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

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

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 forum - Di derbarê pirtûkxane û modelan de pirsên xwe bipirsin. Spas ji bo baldariya we!

Source: www.habr.com

Add a comment