DeepPavlov għall-iżviluppaturi: Għodod NLP #1 u ħolqien ta' chatbot

Hi kollha! Qed niftħu sensiela ta’ artikli ddedikati biex insolvu problemi prattiċi relatati mal-ipproċessar tal-lingwa naturali (Natural Language Processing jew sempliċiment NLP) u noħolqu aġenti tad-djalogu (chatbots) bl-użu ta’ librerija open-source DeepPavlov, li qed jiġi żviluppat mit-tim tagħna fil-Laboratorju MIPT ta 'Sistemi Newrali u Tagħlim Profond. L-għan ewlieni tas-serje huwa li tintroduċi DeepPavlov għal firxa wiesgħa ta 'żviluppaturi u turi kif tista' ssolvi problemi NLP applikati mingħajr ma jkollok għarfien profond fit-Tagħlim tal-Machine u PhD fil-Matematika.

Il-kompiti tal-NLP jinkludu d-determinazzjoni tas-sentiment tat-test, l-analiżi tal-entitajiet imsemmija, id-determinazzjoni ta 'dak li jrid l-interlokutur mill-bot tiegħek: tordna pizza jew tikseb informazzjoni ta' sfond, u ħafna aktar. Tista 'taqra aktar dwar il-kompiti u l-metodi NLP hawn.

F'dan l-artikolu, aħna ser nuruk kif tħaddem server REST b'mudelli NLP imħarrġa minn qabel, lesti għall-użu mingħajr ebda konfigurazzjoni jew taħriġ addizzjonali.

DeepPavlov għall-iżviluppaturi: Għodod NLP #1 u ħolqien ta' chatbot

Installazzjoni ta 'DeepPavlov

Hawn u hawn taħt, se jingħataw struzzjonijiet għal Linux. Għall-Windows, ara tagħna dokumentazzjoni

  • Oħloq u attiva ambjent virtwali bil-verżjoni appoġġjata attwali ta 'Python:
    virtualelnv env -p python3.7
    source env/bin/activate
  • Installa DeepPavlov f'ambjent virtwali:
    pip install deeppavlov
    

Tnedija ta' server REST bil-mudell DeepPavlov

Qabel ma nniedu server bil-mudell DeepPavlov għall-ewwel darba, ikun utli li nitkellmu dwar xi karatteristiċi tal-arkitettura tal-librerija.

Kwalunkwe mudell fid-DP jikkonsisti minn:

  • Kodiċi Python;
  • Komponenti li jistgħu jitniżżlu - riżultati ta 'taħriġ serjali fuq data speċifika (inkorporazzjonijiet, piżijiet ta' netwerks newrali, eċċ.);
  • Fajl ta' konfigurazzjoni (minn hawn 'il quddiem imsejjaħ il-konfigurazzjoni), li fih informazzjoni dwar il-klassijiet użati mill-mudell, URLs ta' komponenti mniżżla, dipendenzi Python, eċċ.

Aħna se ngħidulek aktar dwar dak li hemm taħt il-barnuża ta 'DeepPavlov fl-artikoli li ġejjin, għalissa huwa biżżejjed li nkunu nafu li:

  • Kwalunkwe mudell f'DeepPavlov huwa identifikat mill-isem tal-konfigurazzjoni tiegħu;
  • Biex tmexxi l-mudell, trid tniżżel il-komponenti tiegħu mis-servers DeepPavlov;
  • Ukoll, biex tħaddem il-mudell, għandek bżonn tinstalla l-libreriji Python li juża.

L-ewwel mudell li se nniedu se jkun Multilingwi Named Entity Recognition (NER). Il-mudell jikklassifika l-kliem tat-test skont it-tip ta’ entitajiet imsemmija li jappartjenu għalihom (ismijiet proprji, ismijiet ġeografiċi, ismijiet ta’ muniti, u oħrajn). Isem tal-konfigurazzjoni għall-verżjoni l-aktar reċenti attwali ta' NER:

ner_ontonotes_bert_mult

Inniedu s-server REST bil-mudell:

  1. Aħna ninstallaw id-dipendenzi tal-mudell speċifikati fil-konfigurazzjoni tiegħu fl-ambjent virtwali attiv:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. Niżżel komponenti tal-mudell serjali minn servers DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    Il-komponenti serialized se jitniżżlu fid-direttorju tad-dar DeepPavlov, li jinsab awtomatikament

    ~/.deeppavlov

    Meta tniżżel, il-hash tal-komponenti diġà mniżżla jiġi ċċekkjat mal-hashes tal-komponenti li jinsabu fuq is-server. Jekk ikun hemm qbil, it-tniżżil jinqabeż u jintużaw fajls eżistenti. Id-daqsijiet tal-komponenti mniżżla jistgħu jvarjaw bħala medja minn 0.5 sa 8 Gb, f'xi każijiet jilħqu 20 Gb wara l-unzipping.

  3. Inniedu s-server REST bil-mudell:
    python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
    

Bħala riżultat tal-eżekuzzjoni ta 'dan il-kmand, server REST b'mudell se jitnieda fuq il-port 5005 tal-magna ospitanti (il-port default huwa 5000).

Wara l-inizjalizzazzjoni tal-mudell, Swagger bid-dokumentazzjoni tal-API u l-abbiltà li tittestja jistgħu jinstabu fil-URL http://127.0.0.1:5005. Ejja nittestjaw il-mudell billi nibagħtu lill-endpoint http://127.0.0.1:5005/model Talba POST bil-kontenut JSON li ġej:

{
  "x": [
    "В МФТИ можно добраться на электричке с Савёловского Вокзала.",
    "В юго-западной Руси стог жита оценен в 15 гривен"
  ]
}

Bi tweġiba għandna nirċievu l-JSON li ġej:

[
  [
    ["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
    ["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"]
  ]
]

Bl-użu ta 'dawn l-eżempji, se nanalizzaw l-API REST DeepPavlov.

API DeepPavlov

Kull mudell DeepPavlov għandu mill-inqas argument wieħed ta' input. Fl-API REST, l-argumenti huma msemmija, l-ismijiet tagħhom huma ċ-ċwievet tad-dizzjunarju li jkun dieħel. Fil-biċċa l-kbira tal-każijiet, l-argument huwa t-test li jeħtieġ li jiġi pproċessat. Aktar informazzjoni dwar argumenti u valuri rritornati mill-mudelli tista 'tinstab fit-taqsima MUDELLI tad-dokumentazzjoni DeepPavlov

Fl-eżempju, lista ta 'żewġ kordi ġiet mgħoddija lill-argument x, li kull wieħed minnhom ingħata markup separat. F'DeepPavlov, il-mudelli kollha jieħdu bħala input lista (lott) ta 'valuri li jiġu pproċessati b'mod indipendenti.

It-terminu "lott" jirreferi għall-qasam tat-tagħlim tal-magni u jirreferi għal lott ta 'valuri ta' input indipendenti pproċessati minn algoritmu jew netwerk newrali simultanjament. Dan l-approċċ jippermettilek tnaqqas (spiss b'mod sinifikanti) il-ħin li l-mudell jipproċessa element wieħed ta 'lott meta mqabbel mal-istess valur mgħoddi lill-input separatament. Iżda r-riżultat tal-ipproċessar jinħareġ biss wara li l-elementi kollha jkunu ġew ipproċessati. Għalhekk, meta tiġġenera lott li jkun dieħel, ikun meħtieġ li titqies il-veloċità tal-mudell u l-ħin tal-ipproċessar meħtieġ għal kull wieħed mill-elementi individwali tiegħu.

Jekk hemm diversi argumenti għall-mudell DeepPavlov, kull wieħed minnhom jirċievi l-lott ta 'valuri tiegħu stess, u fl-output il-mudell dejjem jipproduċi lott wieħed ta' tweġibiet. L-elementi tal-lott ħerġin huma r-riżultati tal-ipproċessar tal-elementi tal-lottijiet deħlin bl-istess indiċi.

Fl-eżempju ta 'hawn fuq, ir-riżultat tal-mudell kien li jkisser kull string f'tokens (kliem u marki ta' punteġġjatura) u jikklassifika t-token relattiv għall-entità msemmija (isem tal-organizzazzjoni, munita) li tirrappreżenta. Bħalissa l-mudell ner_ontonotes_bert_mult kapaċi jirrikonoxxu 18-il tip ta' entitajiet imsemmija, tista' tinstab deskrizzjoni dettaljata hawn.

Mudelli oħra out-of-the-box minn DeepPavlov

Minbarra NER, il-mudelli li ġejjin out-of-the-box huma disponibbli f'DeepPavlov fil-ħin tal-kitba:

Test Mistoqsija Tweġiba

Wieġeb il-mistoqsija għat-test bi framment ta 'dan it-test. Konfigurazzjoni tal-mudell: squad_ru_bert_infer

Eżempju talba:

{
  "context_raw": [
    "DeepPavlov разрабатывается лабораторией МФТИ.",
    "В юго-западной Руси стог жита оценен в 15 гривен."
  ],
  "question_raw": [
    "Кем разрабатывается DeepPavlov?",
    "Сколько стоил стог жита на Руси?"
  ]
}

Riżultat:

[
  ["лабораторией МФТИ", 27, 31042.484375],
  ["15 гривен", 39, 1049.598876953125]
]

Sejbien ta 'insult

Sejbien tal-preżenza ta 'insult lill-persuna li lilha huwa indirizzat it-test (fil-ħin tal-kitba - għall-Ingliż biss). Mudell konfigurazzjoni: insults_kaggle_conv_bert

Eżempju talba:


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

Riżultat:

[
  ["Not Insult"],
  ["Insult"]
]

Analiżi tas-Sentimenti

Klassifikazzjoni tas-sentiment tat-test (pożittiv, newtrali, negattiv). Konfigurazzjoni tal-mudell: rusentiment_elmo_twitter_cnn

Eżempju talba:

{
  "x": [
    "Мне нравится библиотека DeepPavlov.",
    "Я слышал о библиотеке DeepPavlov.",
    "Меня бесят тролли и анонимусы."
  ]
}

Riżultat:

[
  ["positive"],
  ["neutral"],
  ["negative"]
]

Parafrażi Sejbien

Iddetermina jekk żewġ testi differenti għandhomx l-istess tifsira. Konfigurazzjoni tal-mudell: stand_paraphraser_en

Talba:

{
  "text_a": [
    "Город погружается в сон, просыпается Мафия.",
    "Президент США пригрозил расторжением договора с Германией."
  ],
  "text_b": [
    "Наступает ночь, все жители города пошли спать, а преступники проснулись.",
    "Германия не собирается поддаваться угрозам со стороны США."
  ]
}

Riżultat:

[
  [1],
  [0]
]

Il-lista attwali tal-mudelli DeepPavlov kollha barra mill-kaxxa dejjem tista 'tinstab hawn.

Konklużjoni

F'dan l-artikolu, aħna ltqajna familjari ma 'l-API DeepPavlov u xi wħud mill-kapaċitajiet ta' pproċessar tat-test tal-librerija pprovduti barra mill-kaxxa. Wieħed għandu jżomm f'moħħu li għal kwalunkwe kompitu NLP, l-aħjar riżultat se jinkiseb meta jitħarreġ il-mudell fuq sett ta 'dejta li jikkorrispondi għall-qasam tas-suġġett (dominju) tal-kompitu. Barra minn hekk, saħansitra aktar mudelli ma jistgħux, fil-prinċipju, jiġu mħarrġa għas-sitwazzjonijiet kollha.

Fl-artikoli li ġejjin se nħarsu lejn settings addizzjonali tal-librerija, billi nibdew DeepPavlov minn Docker, u mbagħad se ngħaddu għal mudelli ta 'taħriġ. U tinsiex li DeepPavlov għandu il-forum – staqsi l-mistoqsijiet tiegħek dwar il-librerija u l-mudelli. Grazzi tal-attenzjoni tiegħek!

Sors: www.habr.com

Żid kumment