Kamusta kayong lahat! Binubuksan namin ang isang serye ng mga artikulo na nakatuon sa paglutas ng mga praktikal na problema na may kaugnayan sa natural na pagpoproseso ng wika (Natural Language Processing o simpleng NLP) at paglikha ng mga dialog agent (chatbots) gamit ang isang open-source na library
Kasama sa mga gawain ng NLP ang pagtukoy sa damdamin ng text, pag-parse ng mga pinangalanang entity, pagtukoy kung ano ang gusto ng kausap mula sa iyong bot: mag-order ng pizza o kumuha ng background na impormasyon, at marami pa. Maaari kang magbasa nang higit pa tungkol sa mga gawain at pamamaraan ng NLP
Sa artikulong ito, ipapakita namin sa iyo kung paano magpatakbo ng isang REST server na may mga pre-trained na modelo ng NLP, na handang gamitin nang walang anumang karagdagang configuration o pagsasanay.
Pag-install ng DeepPavlov
Dito at sa ibaba, ibibigay ang mga tagubilin para sa Linux. Para sa Windows, tingnan ang aming
- Lumikha at mag-activate ng virtual na kapaligiran gamit ang kasalukuyang sinusuportahang bersyon ng Python:
virtualelnv env -p python3.7 source env/bin/activate
- I-install ang DeepPavlov sa isang virtual na kapaligiran:
pip install deeppavlov
Paglulunsad ng REST server na may modelong DeepPavlov
Bago kami maglunsad ng server na may modelong DeepPavlov sa unang pagkakataon, magiging kapaki-pakinabang na pag-usapan ang ilang mga tampok ng arkitektura ng library.
Ang anumang modelo sa DP ay binubuo ng:
- Python code;
- Nada-download na mga bahagi - serialized na mga resulta ng pagsasanay sa partikular na data (mga pag-embed, timbang ng mga neural network, atbp.);
- Isang configuration file (mula rito ay tinutukoy bilang config), na naglalaman ng impormasyon tungkol sa mga klase na ginagamit ng modelo, mga URL ng mga na-download na bahagi, mga dependency ng Python, atbp.
Sasabihin namin sa iyo ang higit pa tungkol sa kung ano ang nasa ilalim ng hood ng DeepPavlov sa mga sumusunod na artikulo, sa ngayon ay sapat na para sa amin na malaman iyon:
- Ang anumang modelo sa DeepPavlov ay nakikilala sa pamamagitan ng pangalan ng config nito;
- Upang patakbuhin ang modelo, kailangan mong i-download ang mga bahagi nito mula sa mga server ng DeepPavlov;
- Gayundin, upang patakbuhin ang modelo, kailangan mong i-install ang mga aklatan ng Python na ginagamit nito.
Ang unang modelong ilulunsad namin ay ang multilingual na Named Entity Recognition (NER). Inuuri ng modelo ang mga text na salita ayon sa uri ng mga pinangalanang entity kung saan kabilang ang mga ito (mga wastong pangalan, heograpikal na pangalan, pangalan ng mga pera, at iba pa). Pangalan ng config para sa kasalukuyang pinakabagong bersyon ng NER:
ner_ontonotes_bert_mult
Inilunsad namin ang REST server na may modelo:
- Ini-install namin ang mga dependency ng modelo na tinukoy sa config nito sa aktibong virtual na kapaligiran:
python -m deeppavlov install ner_ontonotes_bert_mult
- Mag-download ng mga serialized na bahagi ng modelo mula sa mga server ng DeepPavlov:
python -m deeppavlov download ner_ontonotes_bert_mult
Ang mga serialized na bahagi ay mada-download sa DeepPavlov home directory, na matatagpuan bilang default
~/.deeppavlov
Kapag nagda-download, ang hash ng na-download na mga bahagi ay sinusuri laban sa mga hash ng mga bahagi na matatagpuan sa server. Kung may tugma, lalaktawan ang pag-download at gagamitin ang mga kasalukuyang file. Ang mga laki ng mga na-download na bahagi ay maaaring mag-iba sa average mula 0.5 hanggang 8 Gb, sa ilang mga kaso ay umaabot sa 20 Gb pagkatapos i-unzip.
- Inilunsad namin ang REST server na may modelo:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
Bilang resulta ng pagpapatupad ng command na ito, ang isang REST server na may modelo ay ilulunsad sa port 5005 ng host machine (ang default na port ay 5000).
Pagkatapos simulan ang modelo, ang Swagger na may dokumentasyon ng API at ang kakayahang sumubok ay makikita sa URL http://127.0.0.1:5005
. Subukan natin ang modelo sa pamamagitan ng pagpapadala nito sa endpoint http://127.0.0.1:5005/model
POST na kahilingan na may sumusunod na nilalaman ng JSON:
{
"x": [
"В МФТИ можно добраться на электричке с Савёловского Вокзала.",
"В юго-западной Руси стог жита оценен в 15 гривен"
]
}
Bilang tugon, dapat nating matanggap ang sumusunod na JSON:
[
[
["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
["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"]
]
]
Gamit ang mga halimbawang ito, susuriin namin ang DeepPavlov REST API.
API DeepPavlov
Ang bawat modelo ng DeepPavlov ay may kahit isang input argument. Sa REST API, ang mga argumento ay pinangalanan, ang kanilang mga pangalan ay ang mga susi ng papasok na diksyunaryo. Sa karamihan ng mga kaso, ang argumento ay ang teksto na kailangang iproseso. Higit pang impormasyon tungkol sa mga argumento at halaga na ibinalik ng mga modelo ay matatagpuan sa seksyong MODELS ng dokumentasyon
Sa halimbawa, isang listahan ng dalawang string ang ipinasa sa argumento x, bawat isa ay binigyan ng hiwalay na markup. Sa DeepPavlov, ang lahat ng mga modelo ay kumukuha bilang input ng isang listahan (batch) ng mga halaga na pinoproseso nang nakapag-iisa.
Ang terminong "batch" ay tumutukoy sa larangan ng machine learning at tumutukoy sa isang batch ng mga independiyenteng halaga ng input na pinoproseso ng isang algorithm o neural network nang sabay-sabay. Binibigyang-daan ka ng diskarteng ito na bawasan (madalas nang malaki) ang oras na pinoproseso ng modelo ang isang elemento ng isang batch kumpara sa parehong halaga na ipinasa sa input nang hiwalay. Ngunit ang resulta ng pagproseso ay ibinibigay lamang pagkatapos maproseso ang lahat ng mga elemento. Samakatuwid, kapag bumubuo ng isang papasok na batch, kakailanganing isaalang-alang ang bilis ng modelo at ang kinakailangang oras ng pagproseso para sa bawat isa sa mga indibidwal na elemento nito.
Kung mayroong ilang mga argumento sa modelo ng DeepPavlov, ang bawat isa sa kanila ay tumatanggap ng sarili nitong batch ng mga halaga, at sa output ang modelo ay palaging gumagawa ng isang batch ng mga sagot. Ang mga elemento ng papalabas na batch ay ang mga resulta ng pagproseso ng mga elemento ng mga papasok na batch na may parehong index.
Sa halimbawa sa itaas, ang resulta ng modelo ay hatiin ang bawat string sa mga token (mga salita at punctuation mark) at uriin ang token na nauugnay sa pinangalanang entity (pangalan ng organisasyon, currency) na kinakatawan nito. Sa kasalukuyan ang modelo ner_ontonotes_bert_mult may kakayahang makilala ang 18 uri ng mga pinangalanang entity, makikita ang isang detalyadong paglalarawan
Iba pang mga out-of-the-box na modelo ni DeepPavlov
Bilang karagdagan sa NER, ang mga sumusunod na out-of-the-box na mga modelo ay available sa DeepPavlov sa oras ng pagsulat:
Pagsagot sa Tanong sa Teksto
Sagutin ang tanong sa teksto gamit ang isang fragment ng tekstong ito. Config ng modelo: squad_ru_bert_infer
Halimbawa ng kahilingan:
{
"context_raw": [
"DeepPavlov разрабатывается лабораторией МФТИ.",
"В юго-западной Руси стог жита оценен в 15 гривен."
],
"question_raw": [
"Кем разрабатывается DeepPavlov?",
"Сколько стоил стог жита на Руси?"
]
}
Resulta:
[
["лабораторией МФТИ", 27, 31042.484375],
["15 гривен", 39, 1049.598876953125]
]
Insulto Detection
Ang pagtuklas ng pagkakaroon ng isang insulto sa taong tinutugunan ng teksto (sa oras ng pagsulat - para lamang sa Ingles). Config ng modelo: insults_kaggle_conv_bert
Halimbawa ng kahilingan:
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}
Resulta:
[
["Not Insult"],
["Insult"]
]
Pagtatasa ng sentimyento
Pag-uuri ng damdamin ng teksto (positibo, neutral, negatibo). Config ng modelo: rusentiment_elmo_twitter_cnn
Halimbawa ng kahilingan:
{
"x": [
"Мне нравится библиотека DeepPavlov.",
"Я слышал о библиотеке DeepPavlov.",
"Меня бесят тролли и анонимусы."
]
}
Resulta:
[
["positive"],
["neutral"],
["negative"]
]
Paraphrase Detection
Pagtukoy kung ang dalawang magkaibang teksto ay may parehong kahulugan. Config ng modelo: stand_paraphraser_en
Humiling ng:
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
Resulta:
[
[1],
[0]
]
Ang kasalukuyang listahan ng lahat ng out-of-the-box na mga modelo ng DeepPavlov ay palaging makikita
Konklusyon
Sa artikulong ito, nakilala namin ang DeepPavlov API at ang ilan sa mga kakayahan sa pagpoproseso ng teksto ng library na ibinigay sa labas ng kahon. Dapat tandaan na para sa anumang gawain ng NLP, ang pinakamahusay na resulta ay makakamit kapag sinasanay ang modelo sa isang set ng data na naaayon sa lugar ng paksa (domain) ng gawain. Bilang karagdagan, kahit na higit pang mga modelo ay hindi maaaring, sa prinsipyo, ay sanayin para sa lahat ng mga sitwasyon.
Sa mga sumusunod na artikulo titingnan natin ang mga karagdagang setting ng library, paglulunsad ng DeepPavlov mula sa Docker, at pagkatapos ay magpapatuloy tayo sa mga modelo ng pagsasanay. At huwag kalimutan na mayroon ang DeepPavlov
Pinagmulan: www.habr.com