Hammaga salom! Biz tabiiy tillarni qayta ishlash (Natural Language Processing yoki oddiygina NLP) va ochiq manba kutubxonasidan foydalangan holda dialog agentlarini (chatbotlar) yaratish bilan bog'liq amaliy muammolarni hal qilishga bag'ishlangan qator maqolalarni ochmoqdamiz.
NLP vazifalariga matnning hissiyotini aniqlash, nomlangan ob'ektlarni tahlil qilish, suhbatdoshingiz botingizdan nimani xohlashini aniqlash kiradi: pizza buyurtma qiling yoki fon ma'lumotlarini oling va boshqalar. NLP vazifalari va usullari haqida ko'proq o'qishingiz mumkin
Ushbu maqolada biz hech qanday qo'shimcha konfiguratsiya yoki treningsiz foydalanishga tayyor, oldindan o'rgatilgan NLP modellari bilan REST serverini qanday ishga tushirishni ko'rsatamiz.
DeepPavlovni o'rnatish
Bu erda va quyida Linux uchun ko'rsatmalar beriladi. Windows uchun bizning
- Python-ning joriy qo'llab-quvvatlanadigan versiyasi bilan virtual muhit yarating va faollashtiring:
virtualelnv env -p python3.7 source env/bin/activate
- DeepPavlovni virtual muhitda o'rnating:
pip install deeppavlov
DeepPavlov modeli bilan REST serverini ishga tushirish
DeepPavlov modeli bilan serverni birinchi marta ishga tushirishdan oldin kutubxona arxitekturasining ba'zi xususiyatlari haqida gapirish foydali bo'ladi.
DP ning har qanday modeli quyidagilardan iborat:
- Python kodi;
- Yuklab olinadigan komponentlar - ma'lum ma'lumotlar bo'yicha ketma-ketlashtirilgan o'quv natijalari (o'rnatishlar, neyron tarmoqlarning og'irliklari va boshqalar);
- Model tomonidan ishlatiladigan sinflar, yuklab olingan komponentlarning URL manzillari, Python bog'liqliklari va boshqalar haqidagi ma'lumotlarni o'z ichiga olgan konfiguratsiya fayli (keyingi o'rinlarda konfiguratsiya deb yuritiladi).
Quyidagi maqolalarda DeepPavlov qalpog'i ostida nima borligi haqida ko'proq ma'lumot beramiz, hozircha buni bilish kifoya:
- DeepPavlovdagi har qanday model uning konfiguratsiyasi nomi bilan aniqlanadi;
- Modelni ishga tushirish uchun uning komponentlarini DeepPavlov serverlaridan yuklab olishingiz kerak;
- Bundan tashqari, modelni ishga tushirish uchun u foydalanadigan Python kutubxonalarini o'rnatishingiz kerak.
Biz ishga tushiradigan birinchi model ko'p tilli nomli shaxsni aniqlash (NER) bo'ladi. Model matnli so'zlarni ular tegishli bo'lgan nomli ob'ektlar turiga ko'ra tasniflaydi (to'g'ri nomlar, geografik nomlar, valyutalarning nomlari va boshqalar). NERning joriy eng oxirgi versiyasi uchun konfiguratsiya nomi:
ner_ontonotes_bert_mult
Biz REST serverini model bilan ishga tushiramiz:
- Biz uning konfiguratsiyasida ko'rsatilgan model bog'liqliklarini faol virtual muhitga o'rnatamiz:
python -m deeppavlov install ner_ontonotes_bert_mult
- DeepPavlov serverlaridan seriyali model komponentlarini yuklab oling:
python -m deeppavlov download ner_ontonotes_bert_mult
Seriyalashtirilgan komponentlar sukut bo'yicha joylashgan DeepPavlov uy katalogiga yuklab olinadi
~/.deeppavlov
Yuklab olishda allaqachon yuklab olingan komponentlar xeshi serverda joylashgan komponentlar xeshlariga nisbatan tekshiriladi. Agar mos keladigan bo'lsa, yuklab olish o'tkazib yuboriladi va mavjud fayllar ishlatiladi. Yuklab olingan komponentlarning o'lchamlari o'rtacha 0.5 dan 8 Gb gacha o'zgarishi mumkin, ba'zi hollarda ochilgandan keyin 20 Gb ga etadi.
- Biz REST serverini model bilan ishga tushiramiz:
python -m deeppavlov riseapi ner_ontonotes_bert_mult -p 5005
Ushbu buyruqni bajarish natijasida xost mashinasining 5005 portida modelga ega REST server ishga tushadi (standart port 5000).
Modelni ishga tushirgandan so'ng, API hujjatlariga ega Swagger va test qilish qobiliyatini URL manzilida topish mumkin http://127.0.0.1:5005
. Keling, modelni oxirgi nuqtaga yuborish orqali sinab ko'raylik http://127.0.0.1:5005/model
Quyidagi JSON kontenti bilan POST soʻrovi:
{
"x": [
"В МФТИ можно добраться на электричке с Савёловского Вокзала.",
"В юго-западной Руси стог жита оценен в 15 гривен"
]
}
Bunga javoban biz quyidagi JSONni olishimiz kerak:
[
[
["В", "МФТИ", "можно", "добраться", "на", "электричке", "с", "Савёловского", "Вокзала", "."],
["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"]
]
]
Ushbu misollardan foydalanib, biz DeepPavlov REST API-ni tahlil qilamiz.
API DeepPavlov
Har bir DeepPavlov modelida kamida bitta kirish argumenti mavjud. REST API-da argumentlar nomlanadi, ularning nomlari kiruvchi lug'atning kalitlari hisoblanadi. Ko'pgina hollarda, argument qayta ishlanishi kerak bo'lgan matndir. Modellar tomonidan qaytarilgan argumentlar va qiymatlar haqida qo'shimcha ma'lumotni hujjatlarning MODELLA bo'limida topishingiz mumkin.
Misolda, ikkita satr ro'yxati x argumentiga uzatildi, ularning har biriga alohida belgi qo'yildi. DeepPavlovda barcha modellar mustaqil ravishda qayta ishlangan qiymatlar ro'yxatini (to'plamini) kiritish sifatida qabul qiladi.
"To'plam" atamasi mashinani o'rganish sohasini anglatadi va bir vaqtning o'zida algoritm yoki neyron tarmoq tomonidan qayta ishlangan mustaqil kirish qiymatlari to'plamini anglatadi. Ushbu yondashuv sizga kirishga alohida o'tkazilgan bir xil qiymat bilan solishtirganda, model partiyaning bir elementini qayta ishlash vaqtini qisqartirishga (ko'pincha sezilarli darajada) imkon beradi. Ammo qayta ishlash natijasi barcha elementlar qayta ishlanganidan keyingina chiqariladi. Shuning uchun, kiruvchi partiyani yaratishda, modelning tezligini va uning har bir alohida elementi uchun zarur ishlov berish vaqtini hisobga olish kerak bo'ladi.
Agar DeepPavlov modeliga bir nechta argumentlar mavjud bo'lsa, ularning har biri o'z qiymatlari to'plamini oladi va chiqishda model har doim javoblarning bir to'plamini ishlab chiqaradi. Chiquvchi partiyaning elementlari bir xil indeksli kiruvchi partiyalarning elementlarini qayta ishlash natijalaridir.
Yuqoridagi misolda modelning natijasi har bir qatorni tokenlarga (so'zlar va tinish belgilari) bo'lish va tokenni o'zi ko'rsatadigan nomli ob'ektga (tashkilot nomi, valyuta) nisbatan tasniflash edi. Hozirda model ner_ontonotes_bert_mult nomli ob'ektlarning 18 turini tanib olishga qodir, batafsil tavsifni topish mumkin
DeepPavlov tomonidan ishlab chiqarilgan boshqa modellar
NER-ga qo'shimcha ravishda, DeepPavlov-da yozish paytida quyidagi tayyor modellar mavjud:
Matnli savolga javob
Ushbu matndan bir parcha bilan matnga berilgan savolga javob bering. Model konfiguratsiyasi: squad_ru_bert_infer
Misol so'rovi:
{
"context_raw": [
"DeepPavlov разрабатывается лабораторией МФТИ.",
"В юго-западной Руси стог жита оценен в 15 гривен."
],
"question_raw": [
"Кем разрабатывается DeepPavlov?",
"Сколько стоил стог жита на Руси?"
]
}
natija:
[
["лабораторией МФТИ", 27, 31042.484375],
["15 гривен", 39, 1049.598876953125]
]
Haqoratni aniqlash
Matn yuborilgan shaxsga nisbatan haqorat mavjudligini aniqlash (yozish vaqtida - faqat ingliz tili uchun). Model konfiguratsiyasi: insults_kaggle_conv_bert
Misol so'rovi:
{
"x": [
"Money talks, bullshit walks.",
"You are not the brightest one."
]
}
natija:
[
["Not Insult"],
["Insult"]
]
Hissiy tahlil
Matn hissiyotlarining tasnifi (ijobiy, neytral, salbiy). Model konfiguratsiyasi: rusentiment_elmo_twitter_cnn
Misol so'rovi:
{
"x": [
"Мне нравится библиотека DeepPavlov.",
"Я слышал о библиотеке DeepPavlov.",
"Меня бесят тролли и анонимусы."
]
}
natija:
[
["positive"],
["neutral"],
["negative"]
]
Parafrazani aniqlash
Ikki xil matnning bir xil ma'noga ega ekanligini aniqlash. Model konfiguratsiyasi: stand_paraphraser_en
Talab:
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
natija:
[
[1],
[0]
]
DeepPavlovning barcha ishlab chiqarilgan modellarining joriy ro'yxatini har doim topish mumkin
xulosa
Ushbu maqolada biz DeepPavlov API va kutubxonadan tashqarida taqdim etilgan matnni qayta ishlashning ba'zi imkoniyatlari bilan tanishdik. Shuni yodda tutish kerakki, har qanday NLP topshirig'i uchun modelni vazifaning mavzu sohasiga (domeniga) mos keladigan ma'lumotlar to'plamiga o'rgatishda eng yaxshi natijaga erishiladi. Bundan tashqari, bundan ham ko'proq modellar, qoida tariqasida, barcha holatlar uchun o'qitilishi mumkin emas.
Keyingi maqolalarda biz kutubxonaning qo'shimcha sozlamalarini ko'rib chiqamiz, DeepPavlovni Docker'dan ishga tushiramiz va keyin biz o'qitish modellariga o'tamiz. Va DeepPavlov borligini unutmang
Manba: www.habr.com