DeepPavlov للمطورين: # 1 أدوات البرمجة اللغوية العصبية وإنشاء Chatbot

أهلاً بكم! نحن نفتح سلسلة من المقالات المخصصة لحل المشكلات العملية المتعلقة بمعالجة اللغة الطبيعية (معالجة اللغة الطبيعية أو معالجة اللغات الطبيعية ببساطة) وإنشاء وكلاء محادثة (روبوتات محادثة) باستخدام مكتبة مفتوحة المصدر ديب بافلوف، والتي يتم تطويرها من قبل فريقنا في مختبر MIPT للأنظمة العصبية والتعلم العميق. الهدف الرئيسي من الدورة هو تقديم مجموعة واسعة من المطورين إلى DeepPavlov وإظهار كيف يمكنك حل مشاكل البرمجة اللغوية العصبية التطبيقية دون معرفة عميقة بالتعلم الآلي والدكتوراه في الرياضيات.

تتضمن مهام البرمجة اللغوية العصبية تحديد نغمة النص ، وتحليل الكيانات المسماة ، وتحديد ما يريده المحاور من الروبوت الخاص بك: اطلب بيتزا أو احصل على معلومات أساسية ، وأكثر من ذلك بكثير. يمكنك قراءة المزيد عن مهام وطرق البرمجة اللغوية العصبية هنا.

في هذه المقالة ، سنوضح لك كيفية تشغيل خادم REST مع نماذج NLP المدربة مسبقًا والجاهزة للاستخدام دون أي تكوين أو تدريب إضافي.

DeepPavlov للمطورين: # 1 أدوات البرمجة اللغوية العصبية وإنشاء Chatbot

تثبيت DeepPavlov

سيتم تقديم تعليمات Linux هنا وأدناه. لنظام التشغيل Windows ، راجع ملف الوثائق

  • قم بإنشاء وتنشيط بيئة افتراضية باستخدام الإصدار الحالي المدعوم من Python:
    virtualelnv env -p python3.7
    source env/bin/activate
  • قم بتثبيت DeepPavlov في بيئة افتراضية:
    pip install deeppavlov
    

إطلاق خادم REST بنموذج DeepPavlov

قبل أن نبدأ الخادم بنموذج DeepPavlov لأول مرة ، سيكون من المفيد التحدث عن بعض ميزات بنية المكتبة.

يتكون أي نموذج في DP من:

  • كود بايثون
  • المكونات القابلة للتنزيل - نتائج التعلم المتسلسلة على بيانات محددة (حفلات الزفاف ، وأوزان الشبكة العصبية ، وما إلى ذلك) ؛
  • ملف التكوين (المشار إليه فيما يلي باسم config) ، والذي يحتوي على معلومات حول الفئات المستخدمة بواسطة النموذج ، وعناوين URL للمكونات التي تم تنزيلها ، وتبعيات Python ، والمزيد.

سنخبرك المزيد حول ما هو تحت غطاء DeepPavlov في المقالات التالية ، في الوقت الحالي يكفي لنا أن نعرف ذلك:

  • يتم تحديد أي نموذج في DeepPavlov باسم التكوين الخاص به ؛
  • لتشغيل النموذج ، تحتاج إلى تنزيل مكوناته من خوادم DeepPavlov ؛
  • أيضًا ، لتشغيل النموذج ، تحتاج إلى تثبيت مكتبات Python المستخدمة من قبله.

سيكون النموذج الأول الذي سنقوم بتشغيله هو التعرف على الكيان المسمى متعدد اللغات (NER). يصنف النموذج كلمات النص حسب نوع الكيانات المسماة التي تنتمي إليها (أسماء العلم والأسماء الجغرافية وأسماء العملات وغيرها). اسم التكوين لأحدث إصدار من NER:

ner_ontonotes_bert_mult

نبدأ خادم REST بالنموذج:

  1. قم بتثبيت تبعيات النموذج المحددة في التكوين الخاص به في البيئة الافتراضية النشطة:
    python -m deeppavlov install ner_ontonotes_bert_mult
    
  2. قم بتنزيل مكونات النموذج المتسلسلة من خوادم DeepPavlov:
    python -m deeppavlov download ner_ontonotes_bert_mult
    

    سيتم تنزيل المكونات المتسلسلة إلى الدليل الرئيسي DeepPavlov ، والذي يقع افتراضيًا

    ~/.deeppavlov

    عند التنزيل ، يتم فحص تجزئة المكونات التي تم تنزيلها بالفعل مقابل تجزئة المكونات الموجودة على الخادم. إذا كان هناك تطابق ، يتم تخطي التنزيل واستخدام الملفات الموجودة. يمكن أن تختلف أحجام المكونات التي تم تنزيلها في المتوسط ​​من 0.5 إلى 8 جيجا بايت ، وفي بعض الحالات تصل إلى 20 جيجا بايت بعد فك الضغط.

  3. نبدأ خادم 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 طلب نشر بمحتوى 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.

واجهة برمجة تطبيقات DeepPavlov

يحتوي كل نموذج DeepPavlov على وسيطة إدخال واحدة على الأقل. في REST API ، يتم تسمية الوسائط ، وأسمائها هي مفاتيح القاموس الوارد. في معظم الحالات ، تكون الوسيطة هي النص المراد معالجته. يمكن العثور على مزيد من المعلومات حول الوسائط والقيم التي ترجعها النماذج في قسم النماذج في الوثائق. ديب بافلوف

في المثال ، تم تمرير قائمة من سلسلتين إلى الوسيطة x ، وتم إعطاء كل منها علامة منفصلة. في DeepPavlov ، تأخذ جميع النماذج قائمة (دفعة) من القيم التي تتم معالجتها بشكل مستقل كمدخلات.

يشير مصطلح "الدُفعة" إلى مجال التعلم الآلي ويشير إلى مجموعة من قيم الإدخال المستقلة التي تتم معالجتها بواسطة خوارزمية أو شبكة عصبية في نفس الوقت. يسمح لك هذا الأسلوب بتقليل (غالبًا بشكل كبير) وقت معالجة عنصر دفعة واحد بواسطة النموذج مقارنة بنفس القيمة التي تم تمريرها إلى الإدخال بشكل منفصل. لكن نتيجة المعالجة لا تُعطى إلا بعد معالجة جميع العناصر. لذلك ، عند إنشاء دفعة واردة ، سيكون من الضروري مراعاة سرعة النموذج ووقت المعالجة المطلوب لكل عنصر من عناصره الفردية.

إذا كانت هناك عدة حجج لنموذج DeepPavlov ، فإن كل منها يتلقى مجموعة القيم الخاصة به ، وعند الإخراج ينتج النموذج دائمًا دفعة واحدة من الإجابات. عناصر الدُفعة الصادرة هي نتائج معالجة عناصر الدُفعات الواردة بنفس الفهرس.

في المثال أعلاه ، كانت نتيجة النموذج هي تقسيم كل سطر إلى رموز (كلمات وعلامات ترقيم) وتصنيف الرمز المميز بالنسبة للكيان المحدد (اسم المؤسسة والعملة) الذي يمثله. في الوقت الحالي النموذج ner_ontonotes_bert_mult قادر على التعرف على 18 نوعًا من الكيانات المسماة ، ويمكن العثور على وصف مفصل هنا.

طرز DeepPavlov الأخرى الجاهزة

بالإضافة إلى NER ، تتوفر النماذج الجاهزة التالية في DeepPavlov وقت كتابة هذا التقرير:

نص إجابة السؤال

الجواب على السؤال على النص هو جزء من هذا النص. تكوين النموذج: squad_ar_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_ar

الاستعلام:

{
  "text_a": [
    "Город погружается в сон, просыпается Мафия.",
    "Президент США пригрозил расторжением договора с Германией."
  ],
  "text_b": [
    "Наступает ночь, все жители города пошли спать, а преступники проснулись.",
    "Германия не собирается поддаваться угрозам со стороны США."
  ]
}

النتيجة:

[
  [1],
  [0]
]

يمكن دائمًا العثور على قائمة محدثة لجميع طرز DeepPavlov الجاهزة هنا.

اختتام

في هذه المقالة ، تعرفنا على DeepPavlov API وبعض ميزات معالجة النصوص للمكتبة المقدمة خارج الصندوق. في الوقت نفسه ، يجب ألا يغيب عن البال أنه بالنسبة لأي مهمة من مهام البرمجة اللغوية العصبية ، سيتم تحقيق أفضل نتيجة عندما يتم تدريب النموذج على مجموعة بيانات تتوافق مع مجال الموضوع (المجال) للمهمة. بالإضافة إلى ذلك ، لا يمكن تدريب المزيد من النماذج ، من حيث المبدأ ، لجميع المناسبات.

في المقالات التالية ، سننظر في إعدادات المكتبة الإضافية ، ونطلق DeepPavlov من Docker ، ثم ننتقل إلى نماذج التدريب. ولا تنس أن DeepPavlov لديه форум - اطرح أسئلتك عن المكتبة ونماذجها. شكرًا لكم على اهتمامكم!

المصدر: www.habr.com

إضافة تعليق