Բարեւ բոլորին! Մենք բացում ենք մի շարք հոդվածներ, որոնք նվիրված են բնական լեզվի մշակման հետ կապված գործնական խնդիրների լուծմանը (Natural Language Processing կամ պարզապես NLP) և ստեղծում ենք երկխոսության գործակալներ (chatbots)՝ օգտագործելով բաց կոդով գրադարան։
NLP-ի առաջադրանքները ներառում են տեքստի տրամադրության որոշումը, անվանված միավորների վերլուծությունը, որոշել, թե ինչ է ուզում զրուցակիցը ձեր բոտից՝ պատվիրել պիցցա կամ ստանալ ֆոնային տեղեկատվություն և շատ ավելին: Դուք կարող եք ավելին կարդալ NLP առաջադրանքների և մեթոդների մասին
Այս հոդվածում մենք ձեզ ցույց կտանք, թե ինչպես գործարկել REST սերվերը նախապես վերապատրաստված NLP մոդելներով, որոնք պատրաստ են օգտագործել առանց որևէ լրացուցիչ կազմաձևման կամ վերապատրաստման:
DeepPavlov-ի տեղադրում
Այստեղ և ստորև կներկայացվեն Linux-ի հրահանգներ: Windows-ի համար տես մեր
- Ստեղծեք և ակտիվացրեք վիրտուալ միջավայր Python-ի ընթացիկ աջակցվող տարբերակով.
virtualelnv env -p python3.7 source env/bin/activate
- Տեղադրեք DeepPavlov-ը վիրտուալ միջավայրում.
pip install deeppavlov
REST սերվերի գործարկում DeepPavlov մոդելով
Նախքան առաջին անգամ DeepPavlov մոդելով սերվեր գործարկելը, օգտակար կլինի խոսել գրադարանի ճարտարապետության որոշ առանձնահատկությունների մասին:
DP-ի ցանկացած մոդել բաղկացած է.
- Python կոդը;
- Ներբեռնվող բաղադրիչներ - սերիականացված վերապատրաստման արդյունքներ հատուկ տվյալների վրա (ներկառուցումներ, նեյրոնային ցանցերի կշիռներ և այլն);
- Կազմաձևման ֆայլ (այսուհետ՝ կոնֆիգուրացիա), որը պարունակում է տեղեկատվություն մոդելի կողմից օգտագործվող դասերի, ներբեռնված բաղադրիչների URL-ների, Python-ի կախվածությունների և այլնի մասին։
Այն մասին, թե ինչ է գտնվում Դիպ Պավլովի գլխարկի տակ, մենք ձեզ ավելին կպատմենք հետևյալ հոդվածներում, առայժմ մեզ բավական է իմանալ, որ.
- DeepPavlov-ի ցանկացած մոդել նույնացվում է իր կազմաձևի անունով.
- Մոդելը գործարկելու համար անհրաժեշտ է ներբեռնել դրա բաղադրիչները DeepPavlov սերվերներից;
- Նաև մոդելը գործարկելու համար հարկավոր է տեղադրել Python գրադարանները, որոնք նա օգտագործում է:
Առաջին մոդելը, որը մենք կներկայացնենք, կլինի բազմալեզու Named Entity Recognition (NER): Մոդելը դասակարգում է տեքստային բառերը՝ ըստ անվանված միավորների տեսակի, որոնց դրանք պատկանում են (հատուկ անուններ, աշխարհագրական անուններ, արժույթների անվանումներ և այլն): NER-ի ընթացիկ ամենավերջին տարբերակի կազմաձևման անունը.
ner_ontonotes_bert_mult
Մենք գործարկում ենք REST սերվերը մոդելով.
- Մենք տեղադրում ենք մոդելի կախվածությունները, որոնք նշված են դրա կազմաձևում ակտիվ վիրտուալ միջավայրում.
python -m deeppavlov install ner_ontonotes_bert_mult
- Ներբեռնեք սերիական մոդելի բաղադրիչներ DeepPavlov սերվերներից.
python -m deeppavlov download ner_ontonotes_bert_mult
Սերիականացված բաղադրիչները կներբեռնվեն DeepPavlov տնային գրացուցակում, որը գտնվում է լռելյայնորեն
~/.deeppavlov
Ներբեռնելիս արդեն ներբեռնված բաղադրիչների հեշը ստուգվում է սերվերում տեղակայված բաղադրիչների հեշերի հետ: Եթե համընկնում է, ներբեռնումը բաց է թողնվում և առկա ֆայլերն օգտագործվում են: Ներբեռնված բաղադրիչների չափերը կարող են տատանվել միջինում 0.5-ից մինչև 8 Գբ, որոշ դեպքերում զիփելուց հետո հասնելով 20 Գբ-ի:
- Մենք գործարկում ենք REST սերվերը մոդելով.
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
Այս հրամանի կատարման արդյունքում մոդելով REST սերվերը կգործարկվի հոսթ մեքենայի 5005 պորտում (կանխադրված պորտը 5000 է):
Մոդելի սկզբնավորումից հետո Swagger-ը API փաստաթղթերով և փորձարկելու կարողությամբ կարելի է գտնել URL-ում http://127.0.0.1:5005
. Եկեք փորձարկենք մոդելը՝ ուղարկելով այն վերջնական կետ http://127.0.0.1:5005/model
POST հարցում հետևյալ JSON բովանդակությամբ.
{
"x": [
"В МФТИ можно добраться на электричке с Савёловского Вокзала.",
"В юго-западной Руси стог жита оценен в 15 гривен"
]
}
Ի պատասխան մենք պետք է ստանանք հետևյալ 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"]
]
]
Օգտագործելով այս օրինակները՝ մենք կվերլուծենք DeepPavlov REST API-ն:
API DeepPavlov
DeepPavlov-ի յուրաքանչյուր մոդել ունի առնվազն մեկ մուտքային արգումենտ: REST API-ում արգումենտներն անվանվում են, նրանց անունները մուտքային բառարանի բանալիներն են: Շատ դեպքերում փաստարկը այն տեքստն է, որը պետք է մշակվի: Մոդելների կողմից վերադարձված փաստարկների և արժեքների մասին լրացուցիչ տեղեկություններ կարելի է գտնել փաստաթղթերի ՄՈԴԵԼՆԵՐ բաժնում։
Օրինակում x արգումենտին փոխանցվել է երկու տողերի ցուցակ, որոնցից յուրաքանչյուրին տրվել է առանձին նշում: DeepPavlov-ում բոլոր մոդելները որպես մուտք են ընդունում արժեքների ցանկ (խմբաքանակ), որոնք մշակվում են ինքնուրույն:
«Խմբաքանակ» տերմինը վերաբերում է մեքենայական ուսուցման ոլորտը և վերաբերում է ալգորիթմի կամ նյարդային ցանցի կողմից միաժամանակ մշակված անկախ մուտքային արժեքների խմբաքանակին: Այս մոտեցումը թույլ է տալիս նվազեցնել (հաճախ զգալիորեն) այն ժամանակը, երբ մոդելը մշակում է խմբաքանակի մեկ տարրը՝ համեմատած առանձին մուտքագրմանը փոխանցված նույն արժեքի հետ: Բայց մշակման արդյունքը տրվում է միայն բոլոր տարրերը մշակելուց հետո: Հետևաբար, մուտքային խմբաքանակ ստեղծելիս անհրաժեշտ կլինի հաշվի առնել մոդելի արագությունը և դրա յուրաքանչյուր առանձին տարրի համար մշակման պահանջվող ժամանակը:
Եթե DeepPavlov մոդելի համար կան մի քանի փաստարկներ, ապա դրանցից յուրաքանչյուրը ստանում է արժեքների իր փաթեթը, իսկ ելքում մոդելը միշտ տալիս է պատասխանների մեկ փաթեթ: Ելքային խմբաքանակի տարրերը նույն ցուցանիշով մուտքային խմբաքանակների տարրերի մշակման արդյունքներն են։
Վերոնշյալ օրինակում մոդելի արդյունքն էր յուրաքանչյուր տողը բաժանել նշանների (բառեր և կետադրական նշաններ) և դասակարգել նշանը այն անվանված անձի (կազմակերպության անվանումը, արժույթը) հետ կապված, որը ներկայացնում է: Ներկայումս մոդելը ner_ontonotes_bert_mult ի վիճակի է ճանաչելու անվանված սուբյեկտների 18 տեսակներ, կարելի է գտնել մանրամասն նկարագրություն
Դիփ Պավլովի կողմից ներկայացված այլ մոդելներ
Բացի NER-ից, գրելու պահին DeepPavlov-ում հասանելի են հետևյալ արտապատկերված մոդելները.
Տեքստային հարցի պատասխան
Տեքստի հարցին պատասխանեք այս տեքստի հատվածով: Մոդելի կոնֆիգուրացիա. squad_ru_bert_infer
Հարցման օրինակ.
{
"context_raw": [
"DeepPavlov разрабатывается лабораторией МФТИ.",
"В юго-западной Руси стог жита оценен в 15 гривен."
],
"question_raw": [
"Кем разрабатывается DeepPavlov?",
"Сколько стоил стог жита на Руси?"
]
}
Արդյունքը:
[
["лабораторией МФТИ", 27, 31042.484375],
["15 гривен", 39, 1049.598876953125]
]
Վիրավորանքի հայտնաբերում
Հայտնաբերում է վիրավորանքի առկայությունը այն անձին, ում հասցեագրված է տեքստը (գրելու պահին՝ միայն անգլերենի համար): Մոդելի կազմաձևում՝ insults_kaggle_conv_bert
Հարցման օրինակ.
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}
Արդյունքը:
[
["Not Insult"],
["Insult"]
]
Զգայականության վերլուծություն
Տեքստի տրամադրությունների դասակարգում (դրական, չեզոք, բացասական): Մոդելի կոնֆիգուրացիա. rusentiment_elmo_twitter_cnn
Հարցման օրինակ.
{
"x": [
"Мне нравится библиотека DeepPavlov.",
"Я слышал о библиотеке DeepPavlov.",
"Меня бесят тролли и анонимусы."
]
}
Արդյունքը:
[
["positive"],
["neutral"],
["negative"]
]
Պարաֆրազի հայտնաբերում
Որոշել, թե արդյոք երկու տարբեր տեքստեր ունեն նույն իմաստը: Մոդելի կոնֆիգուրացիա. stand_paraphraser_ru
Հարցում.
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
Արդյունքը:
[
[1],
[0]
]
DeepPavlov-ի բոլոր մոդելների ընթացիկ ցանկը միշտ կարելի է գտնել
Ամփոփում
Այս հոդվածում մենք ծանոթացանք DeepPavlov API-ին և գրադարանի տեքստի մշակման որոշ հնարավորություններին, որոնք տրամադրվում են տուփից դուրս։ Պետք է նկատի ունենալ, որ NLP ցանկացած առաջադրանքի համար լավագույն արդյունքը ձեռք կբերվի, երբ մոդելը վերապատրաստվի առաջադրանքի առարկայական տարածքին (տիրույթին) համապատասխանող տվյալների հավաքածուի վրա: Բացի այդ, նույնիսկ ավելի շատ մոդելներ, սկզբունքորեն, չեն կարող վերապատրաստվել բոլոր իրավիճակների համար:
Հետևյալ հոդվածներում մենք կդիտարկենք գրադարանի լրացուցիչ կարգավորումները՝ գործարկելով DeepPavlov-ը Docker-ից, այնուհետև կանցնենք վերապատրաստման մոդելներին: Եվ մի մոռացեք, որ Դիփ Պավլովն ունի
Source: www.habr.com