سلام به همه! ما در حال باز کردن یک سری مقاله هستیم که به حل مشکلات عملی مربوط به پردازش زبان طبیعی (پردازش زبان طبیعی یا به سادگی NLP) و ایجاد عوامل گفتگو (رباتهای گفتگو) با استفاده از یک کتابخانه منبع باز اختصاص دارد.
وظایف NLP شامل تعیین احساس متن، تجزیه موجودیتهای نامگذاریشده، تعیین آنچه که طرف مقابل از ربات شما میخواهد: سفارش پیتزا یا دریافت اطلاعات پسزمینه، و موارد دیگر است. می توانید در مورد وظایف و روش های NLP بیشتر بخوانید
در این مقاله، ما به شما نشان خواهیم داد که چگونه یک سرور REST را با مدل های NLP از پیش آموزش دیده، آماده استفاده بدون هیچ گونه تنظیمات یا آموزش اضافی اجرا کنید.
نصب DeepPavlov
در اینجا و در زیر، دستورالعمل هایی برای لینوکس ارائه خواهد شد. برای ویندوز، ما را ببینید
- ایجاد و فعال کردن یک محیط مجازی با نسخه فعلی پشتیبانی شده پایتون:
virtualelnv env -p python3.7 source env/bin/activate
- DeepPavlov را در یک محیط مجازی نصب کنید:
pip install deeppavlov
راه اندازی سرور REST با مدل DeepPavlov
قبل از اینکه برای اولین بار سروری با مدل DeepPavlov راه اندازی کنیم، صحبت در مورد برخی از ویژگی های معماری کتابخانه مفید خواهد بود.
هر مدل در DP شامل موارد زیر است:
- کد پایتون؛
- اجزای قابل دانلود - نتایج آموزش سریالی بر روی داده های خاص (جاسازی ها، وزن شبکه های عصبی و غیره)؛
- یک فایل پیکربندی (که از این پس پیکربندی نامیده می شود)، که حاوی اطلاعاتی در مورد کلاس های استفاده شده توسط مدل، آدرس های اینترنتی اجزای دانلود شده، وابستگی های پایتون و غیره است.
در مقالات زیر در مورد آنچه در زیر کاپوت دیپ پاولوف وجود دارد به شما خواهیم گفت، فعلاً کافی است بدانیم:
- هر مدلی در DeepPavlov با نام پیکربندی آن مشخص می شود.
- برای اجرای مدل، باید اجزای آن را از سرورهای DeepPavlov دانلود کنید.
- همچنین برای اجرای مدل، باید کتابخانه های پایتون مورد استفاده آن را نصب کنید.
اولین مدلی که ما راه اندازی خواهیم کرد، تشخیص نهاد نامگذاری شده چند زبانه (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
هر مدل دیپ پاولوف حداقل یک آرگومان ورودی دارد. در REST API، آرگومان ها نامگذاری می شوند، نام آنها کلیدهای فرهنگ لغت ورودی است. در بیشتر موارد، استدلال متنی است که باید پردازش شود. اطلاعات بیشتر در مورد آرگومان ها و مقادیر برگردانده شده توسط مدل ها را می توانید در بخش MODELS مستندات بیابید.
در مثال، لیستی از دو رشته به آرگومان 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_en
درخواست:
{
"text_a": [
"Город погружается в сон, просыпается Мафия.",
"Президент США пригрозил расторжением договора с Германией."
],
"text_b": [
"Наступает ночь, все жители города пошли спать, а преступники проснулись.",
"Германия не собирается поддаваться угрозам со стороны США."
]
}
یافته ها:
[
[1],
[0]
]
لیست کنونی تمام مدل های خارج از جعبه DeepPavlov را همیشه می توان یافت
نتیجه
در این مقاله با API DeepPavlov و برخی از قابلیت های پردازش متن کتابخانه ارائه شده خارج از جعبه آشنا شدیم. باید در نظر داشت که برای هر کار NLP، بهترین نتیجه هنگام آموزش مدل بر روی مجموعه داده مربوط به حوزه موضوعی (دامنه) کار به دست می آید. علاوه بر این، در اصل، مدل های بیشتری را نمی توان برای همه موقعیت ها آموزش داد.
در مقالات بعدی به تنظیمات اضافی کتابخانه، راه اندازی DeepPavlov از Docker نگاه می کنیم و سپس به سراغ مدل های آموزشی می رویم. و فراموش نکنید که دیپ پاولوف دارد
منبع: www.habr.com