Përshëndetje të gjithëve! Ne po fillojmë një cikël artikujsh që i kushtohet zgjidhjes së problemeve praktike të lidhura me përpunimin e gjuhës natyrore (Natural Language Processing ose thjesht NLP) dhe krijimin e agjentëve dialogues (chat-bots) me ndihmën e bibliotekës me burim të hapur , që po zhvillon ekipi ynë në laboratorin e Sistemeve Nënqëndrore dhe Mësimit të Thellë të MFTI. Qëllimi kryesor i ciklit është të njohë një grup të gjerë zhvilluesish me DeepPavlov dhe të tregojë se si është e mundur të zgjidhen probleme praktike të NLP-së, pa pasur njohuri të thella në Machine Learning dhe PhD në Matematikë.
Problemet e NLP përfshijnë përcaktimin e tonit të tekstit, analizën e entiteteve të emëruara, përcaktimin e asaj që përbiseduesi do nga boti juaj: të porosisë pizza apo të marrë informacion të referencës dhe shumë më tepër. Për detaje të mëtejshme rreth problemeve dhe metodave të NLP, mund të lexoni .
Në këtë artikull do të tregojmë se si të filloni një server REST me modele NLP të parainstruara, të gatshme për t'u përdorur pa ndonjë konfigurgim ose trajnim të mëtejshëm.

Instalimi i DeepPavlov
Këtu dhe më pas do të jepen udhëzime për Linux. Për Windows, shikoni udhëzimet tona në
- Krijoni dhe aktivizoni një mjedis virtual me versionin e mbështetur aktual të Python:
virtualenv env -p python3.7 source env/bin/activate - Instaloni DeepPavlov në mjedisin virtual:
pip install deeppavlov
Fillimi i serverit REST me modelin DeepPavlov
Para se të fillojmë për herë të parë serverin me modelin DeepPavlov, do të ishte e dobishme të flasim për disa veçori të arhitekturës së bibliotekës.
Ădo model nĂ« DP pĂ«rbĂ«het nga:
- Kodi në Python;
- Komponentët e shkarkueshëm - rezultatet e serializuara të trajnimit në të dhëna të caktuara (embedding, pesha të rrjeteve nervore dhe të tjera);
- Skeda e konfigurimit (më pas - konfig), e cila përmban informacion rreth klasave të përdorura nga modeli, URL-të e komponentëve të shkarkueshëm, varësitë e Python dhe gjërat e tjera.
Më shumë rreth asaj që ndodhet nën kapuçin e DeepPavlov do të tregojmë në artikujt e ardhshëm, për momentin mjafton të dimë se:
- Ădo model nĂ« DeepPavlov identifikohet me emrin e konfigut tĂ« tij;
- Për të nisur modelin, është e nevojshme të shkarkohen komponentët e tij nga serverët e DeepPavlov;
- Po ashtu, për të nisur modelin është e nevojshme të instalohen bibliotekat e Python të përdorura prej tij.
Modeli i parë që do të nisim do të jetë modeli multilinguist i Njohjes të Entiteteve të Emëruara (NER). Ky model klasifikon fjalët e tekstit sipas tipit të entiteteve të emëruara që i përkasin (emra të përshtatshëm, emra gjeografikë, emrat e monedhave dhe të tjera). Emri i konfigut për versionin më të fundit të NER është:
ner_ontonotes_bert_mult
Nisim serverin REST me modelin:
- Instaloni në ambientin virtual aktiv varësitë e modelit të përmendura në konfigun e tij:
python -m deeppavlov install ner_ontonotes_bert_mult - Shkarkoni komponentët e serializuar të modelit nga serverët e DeepPavlov:
python -m deeppavlov download ner_ontonotes_bert_multKomponentët e serializuar do të shkarkohen në direktorinë e shtëpisë të DeepPavlov, e cila në mënyrë të paracaktuar është
~/ .deeppavlovGjatë shkarkimit, hash-i i komponentëve të shkarkuar verifikohet me hash-at e komponentëve që ndodhen në server. Në rast përputhjeje, shkarkimi kalon dhe përdoren skedarët që janë tashmë të pranishëm. Madhësitë e komponentëve të shkarkuar mund të ndryshojnë nga 0.5 deri në 8 Gb, në disa raste pas shkarkimit arrijnë deri në 20 Gb.
- Nisim serverin REST me modelin:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
Si rezultat i ekzekutimit të kësaj komande do të niset një server REST me modelin në portin 5005 të makinës pritëse (porti i paracaktuar është 5000).
Pas inicializimit të modelit, Swagger me dokumentacionin e API dhe mundësinë për ta testuar mund të gjendet në URL http://127.0.0.1:5005. Do ta testojmë modelin duke dërguar një kërkesë POST në endpoint http://127.0.0.1:5005/model me përmbajtjen JSON të mëposhtme:
{
"x": [
"NĂ« MFTI mund tĂ« arrish me tren nga Stacioni SavŃlovski.",
"Në Rusinë jugperëndimore, nje shtëllungë gruri vlerësohet në 15 grivna"
]
}Në përgjigje duhet të marrim këtë JSON:
[
[
["NĂ«", "MFTI", "mund", "tĂ«", "arrish", "me", "tren", "nga", "Stacioni", "SavŃlovski", "."],
["O", "B-FAC", "O", "O", "O", "O", "O", "B-FAC", "I-FAC", "O"]
],
[
["Në", "jug", "-", "perëndimor", "Rusinë", "shtëllungë", "gruri", "vlerësohet", "në", "15", "grivna"],
["O", "B-LOC", "I-LOC", "I-LOC", "I-LOC", "O", "O", "O", "O", "B-MONEY", "I-MONEY"]
]
]Me këto shembuj do të analizojmë REST API DeepPavlov.
API DeepPavlov
Ădo model i DeepPavlov ka tĂ« paktĂ«n njĂ« argument hyrĂ«s. NĂ« REST API, argumentet janĂ« tĂ« emĂ«rtuara, emrat e tyre janĂ« çelĂ«sa tĂ« fjalorit hyrĂ«s. NĂ« shumicĂ«n e rasteve, argumenti Ă«shtĂ« teksti qĂ« duhet tĂ« pĂ«rpunohet. MĂ« shumĂ« rreth argumenteve dhe vlerave tĂ« kthyera nga modelet mund tĂ« mĂ«soni nĂ« seksionin MODELS tĂ« dokumentacionit.
Në shembullin, në argumentin x u kalua një listë me dy rreshta, për çdo të cilin u dha një ndarje e veçantë. Në DeepPavlov të gjitha modelet pranojnë si hyrje një listë (batch) vlerash që përpunohen në mënyrë të pavarur.
Termi "batch" i referohet fushës së mësimit të makinerive dhe nënkupton një paketë të vlerave hyrëse të pavarura, të përpunuara nga një algoritëm ose një rrjet nervor njëkohësisht. Ky qasje lejon të shkurtohet (shpesh ndjeshëm) koha e përpunimit të modelit për një element të vetëm të batch-it krahasuar me këtë vlerë, e cila është dërguar veçmas si hyrëse. Por rezultati i përpunimit jepet vetëm pasi të përpunohen të gjithë elementët. Prandaj, kur formohet një batch hyrës, do të jetë e nevojshme të merret parasysh shpejtësia e punës së modelit dhe koha e kërkuar për përpunimin e çdo elementi të veçantë.
Në rast se modelit DeepPavlov i jepen disa argumente, çdo njëri prej tyre merr batch-in e tij të vlerave, dhe në dalje modeli gjithmonë jep një batch përgjigjesh. Elementët e batch-it të daljes janë rezultatet e përpunimit të elementëve të batch-eve hyrëse me të njëjtin indeks.
Në shembullin e dhënë, rezultati i punës së modelit ishte ndarja e çdo rreshti në toka (fjalë dhe shenja pikësimi) dhe klasifikimi i tokës në lidhje me entitetin e emëruar (emri i organizatës, monedha) që ajo përfaqëson. Aktualisht modeli ner_ontonotes_bert_mult është në gjendje të njohë 18 lloje entitetesh të emëruara, përshkrimi i detajuar mund të gjendet .
Modelet e tjera out-of-the-box të DeepPavlov
Përveç NER, në DeepPavlov në momentin e shkruar do të jenë të disponueshme modelet e tjera out-of-the-box:
Përgjigje Pyetje për Tekst
Përgjigje në një pyetje për tekstin nga një fragment i këtij teksti. Konfigurimi i modelit: squad_ru_bert_infer
Shembulli i kërkesës:
{
"context_raw": [
"DeepPavlov është duke u zhvilluar nga laboratori i MFTI.",
"Në jug-perëndim të Rusisë, një grumbull gruri është vlerësuar në 15 hrivna."
],
"question_raw": [
"Kush e zhvillon DeepPavlov?",
"Sa kushtonte grumbulli i grurit në Rusi?"
]
}Rezultati:
[
["laboratori i MFTI", 27, 31042.484375],
["15 hrivna", 39, 1049.598876953125]
]
Zbulimi i Ofendimeve
Identifikimi i pranisĂ« sĂ« njĂ« ofendimi pĂ«r personin, tĂ« cilit i Ă«shtĂ« adresuar teksti (nĂ« momentin e shkruar â vetĂ«m pĂ«r gjuhĂ«n angleze). Konfigurimi i modelit: insults_kaggle_conv_bert
Shembulli i kërkesës:
{
"x": [
"Para flet, budallallëku ecën.",
"Nuk je nga më të mençurit.
]
}Rezultati:
[
["Jo Ofendim"],
["Ofendim"]
]Analiza e Ndjenjave
Klasifikimi i tonit të tekstit (pozitivi, neutral, negativ). Konfigurimi i modelit: rusentiment_elmo_twitter_cnn
Shembulli i kërkesës:
{
"x": [
"Më pëlqen biblioteka DeepPavlov.",
"Kam dëgjuar për bibliotekën DeepPavlov.",
"Më shqetësojnë trollat dhe anonimët."
]
}Rezultati:
[
["pozitiv"],
["neutral"],
["negativ"]
]Zbulimi i Parafrazave
Përcaktimi nëse dy tekste të ndryshëm kanë të njëjtin kuptim. Konfigurimi i modelit: stand_paraphraser_ru
Kërkesa:
{
"text_a": [
"Qyteti i bie në gjumë, Mafia zgjohet.",
"Presidenti amerikan kërcënoi me anulimin e marrëveshjes me Gjermaninë."
],
"text_b": [
"Nata po vjen, të gjithë banorët e qytetit shkuan të flinin, ndërsa kriminelët u zgjuan.",
"Gjermania nuk ka ndërmend të dorëzohet përballë kërcënimeve nga Shtetet e Bashkuara."
]
}Rezultati:
[
[1],
[0]
]Lista aktuale e të gjitha modeleve out-of-the-box të DeepPavlov mund të gjendet gjithmonë .
Përfundimi
Në këtë artikull ne u njohëm me API-në e DeepPavlov dhe disa mundësi të bibliotekës për përpunimin e tekstit, të ofruara "nga kutia". Në të njëjtën kohë, duhet pasur parasysh se për çdo detyrë NLP do të arrihet rezultati më i mirë duke trajnuar modelin në një grup të dhënash që i përshtatet domenit të detyrës. Për më tepër, nuk ka ndonjë model që mund të trajnohet për të gjitha rastet.
NĂ« artikujt e ardhshĂ«m do tĂ« shqyrtojmĂ« konfigurime shtesĂ« tĂ« bibliotekĂ«s, nisjen e DeepPavlov nga Docker, dhe mĂ« pas do tĂ« kalojmĂ« nĂ« trajnimet e modeleve. Dhe mos harroni, qĂ« DeepPavlov ka â bĂ«ni pyetjet tuaja nĂ« lidhje me bibliotekĂ«n dhe modelet. Faleminderit pĂ«r vĂ«mendjen!
Burimi: habr.com
