Pershendetje te gjitheve! Ne po hapim një seri artikujsh kushtuar zgjidhjes së problemeve praktike që lidhen me përpunimin e gjuhës natyrore (Natural Language Processing ose thjesht NLP) dhe krijimin e agjentëve dialogues (chatbots) duke përdorur një bibliotekë me burim të hapur
Detyrat NLP përfshijnë përcaktimin e ndjenjës së tekstit, analizimin e entiteteve të emërtuara, përcaktimin e asaj që bashkëbiseduesi dëshiron nga roboti juaj: porositni pica ose merrni informacione në sfond, dhe shumë më tepër. Mund të lexoni më shumë rreth detyrave dhe metodave NLP
Në këtë artikull, ne do t'ju tregojmë se si të ekzekutoni një server REST me modele NLP të trajnuara paraprakisht, të gatshëm për t'u përdorur pa ndonjë konfigurim ose trajnim shtesë.
Instalimi i DeepPavlov
Këtu dhe më poshtë, do të jepen udhëzimet për Linux. Për Windows, shihni faqen tonë
- Krijoni dhe aktivizoni një mjedis virtual me versionin aktual të mbështetur të Python:
virtualelnv env -p python3.7 source env/bin/activate
- Instaloni DeepPavlov në një mjedis virtual:
pip install deeppavlov
Nisja e një serveri REST me modelin DeepPavlov
Përpara se të nisim një server me modelin DeepPavlov për herë të parë, do të jetë e dobishme të flasim për disa veçori të arkitekturës së bibliotekës.
Çdo model në PD përbëhet nga:
- kodi Python;
- Komponentët e shkarkueshëm - rezultatet e trajnimit të serializuara në të dhëna specifike (ngulitje, pesha e rrjeteve nervore, etj.);
- Një skedar konfigurimi (në tekstin e mëtejmë i referuar si konfigurimi), i cili përmban informacione për klasat e përdorura nga modeli, URL-të e komponentëve të shkarkuar, varësitë e Python, etj.
Ne do t'ju tregojmë më shumë për atë që është nën kapuçin e DeepPavlov në artikujt e mëposhtëm, tani për tani mjafton të dimë se:
- Çdo model në DeepPavlov identifikohet me emrin e konfigurimit të tij;
- Për të ekzekutuar modelin, duhet të shkarkoni përbërësit e tij nga serverët DeepPavlov;
- Gjithashtu, për të ekzekutuar modelin, duhet të instaloni bibliotekat Python që ai përdor.
Modeli i parë që do të lançojmë do të jetë Njohja shumëgjuhëshe e Entitetit të Emërtuar (NER). Modeli i klasifikon fjalët e tekstit sipas llojit të entiteteve të emërtuara të cilave u përkasin (emrat e përveçëm, emrat gjeografikë, emrat e monedhave dhe të tjera). Emri i konfigurimit për versionin aktual më të fundit të NER:
ner_ontonotes_bert_mult
Ne nisim serverin REST me modelin:
- Ne instalojmë varësitë e modelit të specifikuara në konfigurimin e tij në mjedisin virtual aktiv:
python -m deeppavlov install ner_ontonotes_bert_mult
- Shkarkoni komponentët e modelit të serializuar nga serverët DeepPavlov:
python -m deeppavlov download ner_ontonotes_bert_mult
Komponentët e serializuar do të shkarkohen në drejtorinë kryesore të DeepPavlov, e cila ndodhet si parazgjedhje
~/.deeppavlov
Gjatë shkarkimit, hash-i i komponentëve të shkarkuar tashmë kontrollohet kundrejt hasheve të komponentëve të vendosur në server. Nëse ka një përputhje, shkarkimi anashkalohet dhe skedarët ekzistues përdoren. Madhësitë e komponentëve të shkarkuar mund të ndryshojnë mesatarisht nga 0.5 në 8 Gb, në disa raste duke arritur në 20 Gb pas zbërthimit.
- Ne nisim serverin REST me modelin:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
Si rezultat i ekzekutimit të kësaj komande, një server REST me një model do të lëshohet në portin 5005 të makinës pritës (porti i paracaktuar është 5000).
Pas inicializimit të modelit, Swagger me dokumentacionin API dhe aftësinë për të testuar mund të gjenden në URL http://127.0.0.1:5005
. Le të testojmë modelin duke e dërguar në pikën përfundimtare http://127.0.0.1:5005/model
Kërkesa POST me përmbajtjen e mëposhtme JSON:
{
"x": [
"В МФТИ можно добраться на электричке с Савёловского Вокзала.",
"В юго-западной Руси стог жита оценен в 15 гривен"
]
}
Si përgjigje, ne duhet të marrim JSON-in e mëposhtëm:
[
[
["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
["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"]
]
]
Duke përdorur këta shembuj, ne do të analizojmë DeepPavlov REST API.
API DeepPavlov
Çdo model DeepPavlov ka të paktën një argument hyrës. Në REST API, argumentet emërtohen, emrat e tyre janë çelësat e fjalorit në hyrje. Në shumicën e rasteve, argumenti është teksti që duhet të përpunohet. Më shumë informacion rreth argumenteve dhe vlerave të kthyera nga modelet mund të gjenden në seksionin MODELS të dokumentacionit
Në shembull, një listë me dy vargje iu kalua argumentit x, secilit prej të cilëve iu dha një shënim i veçantë. Në DeepPavlov, të gjitha modelet marrin 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 i referohet një grupi vlerash hyrëse të pavarura të përpunuara nga një algoritëm ose rrjet nervor njëkohësisht. Kjo qasje ju lejon të zvogëloni (shpesh në mënyrë të konsiderueshme) kohën që modeli përpunon një element të një grupi në krahasim me të njëjtën vlerë të kaluar në hyrje veç e veç. Por rezultati i përpunimit lëshohet vetëm pasi të jenë përpunuar të gjithë elementët. Prandaj, kur gjeneroni një grup në hyrje, do të jetë e nevojshme të merret parasysh shpejtësia e modelit dhe koha e kërkuar e përpunimit për secilin nga elementët e tij individualë.
Nëse ka disa argumente për modelin DeepPavlov, secili prej tyre merr grupin e vet të vlerave, dhe në dalje modeli gjithmonë prodhon një grup përgjigjesh. Elementet e grupit dalës janë rezultat i përpunimit të elementeve të grupeve hyrëse me të njëjtin indeks.
Në shembullin e mësipërm, rezultati i modelit ishte zbërthimi i çdo vargu në shenja (fjalë dhe shenja pikësimi) dhe klasifikimi i tokenit në lidhje me entitetin e emërtuar (emri i organizatës, monedha) që ai përfaqëson. Aktualisht modeli ner_ontonotes_bert_mult të aftë për të njohur 18 lloje të entiteteve të emërtuara, mund të gjendet një përshkrim i detajuar
Modele të tjera të disponueshme nga DeepPavlov
Përveç NER, modelet e mëposhtme të disponueshme janë në dispozicion në DeepPavlov në kohën e shkrimit:
Përgjigja e pyetjes së tekstit
Përgjigjuni pyetjes së tekstit me një fragment të këtij teksti. Konfigurimi i modelit: squad_ru_bert_infer
Shembull i kërkesës:
{
"context_raw": [
"DeepPavlov разрабатывается лабораторией МФТИ.",
"В юго-западной Руси стог жита оценен в 15 гривен."
],
"question_raw": [
"Кем разрабатывается DeepPavlov?",
"Сколько стоил стог жита на Руси?"
]
}
Rezultati:
[
["лабораторией МФТИ", 27, 31042.484375],
["15 гривен", 39, 1049.598876953125]
]
Zbulimi i fyerjes
Zbulimi i pranisë së një fyerjeje ndaj personit të cilit i drejtohet teksti (në kohën e shkrimit - vetëm për anglisht). Konfigurimi i modelit: insults_kaggle_conv_bert
Shembull i kërkesës:
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}
Rezultati:
[
["Not Insult"],
["Insult"]
]
Analiza e ndjenjës
Klasifikimi i ndjenjës së tekstit (pozitiv, neutral, negativ). Konfigurimi i modelit: rusentiment_elmo_twitter_cnn
Shembull i kërkesës:
{
"x": [
"Мне нравится библиотека DeepPavlov.",
"Я слышал о библиотеке DeepPavlov.",
"Меня бесят тролли и анонимусы."
]
}
Rezultati:
[
["positive"],
["neutral"],
["negative"]
]
Zbulimi i parafrazës
Përcaktimi nëse dy tekste të ndryshme kanë të njëjtin kuptim. Konfigurimi i modelit: stand_parafrazuesi_en
Kërkesë:
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
Rezultati:
[
[1],
[0]
]
Lista aktuale e të gjitha modeleve të disponueshme të DeepPavlov mund të gjendet gjithmonë
Përfundim
Në këtë artikull, ne u njohëm me API-në DeepPavlov dhe disa nga aftësitë e përpunimit të tekstit të bibliotekës së ofruar jashtë kutisë. Duhet të kihet parasysh se për çdo detyrë NLP, rezultati më i mirë do të arrihet kur trajnohet modeli në një grup të dhënash që korrespondon me fushën e temës (domain) të detyrës. Për më tepër, edhe më shumë modele, në parim, nuk mund të trajnohen për të gjitha situatat.
Në artikujt e mëposhtëm do të shikojmë cilësimet shtesë të bibliotekës, duke lëshuar DeepPavlov nga Docker, dhe më pas do të kalojmë te modelet e trajnimit. Dhe mos harroni se DeepPavlov ka
Burimi: www.habr.com