ناقشنا العديد من مهام معالجة اللغة الطبيعية في هذه السلسلة، مثل التصنيف واكتشاف الكيان . و في المقال السابق أخذنا نظرة عامة على روبوتات المحادثة والآن ، سنستخدم بعضها لوصف مثال على خط إنتاج بناء أنظمة الحوار. يصور الشكل أدناه خط إنتاج كامل لنظام حوار بمكونات مختلفة. سنناقش فائدة كل مكون وتدفق البيانات عبر خط الإنتاج.
- التعرف على الكلام
عادة ، يعمل نظام الحوار كواجهة بين الإنسان والآلة ، وبالتالي فإن الإدخال في نظام الحوار هو كلام بشري. تقوم خوارزميات التعرف على الكلام بنسخ الكلام إلى نص طبيعي. في أنظمة الحوار الصناعية ، يتم استخدام أحدث نماذج تحويل الكلام إلى نص منها wav2letter.
- فهم اللغة الطبيعية (Natural Language Understanding)
بعد النسخ ، يحاول النظام تحليل و “فهم” النص المكتوب. تشمل هذه الوحدة العديد من مهام فهم اللغة الطبيعية. ومن الأمثلة على هذه المهام اكتشاف المشاعر ، واستخراج الكيانات المسماة ، ودقة المرجع ، وما إلى ذلك. هذه الوحدة مسؤولة بشكل أساسي عن جمع كل المعلومات الممكنة التي تكون ضمنيًا (المشاعر) أو صراحة (الكيانات المسماة) موجودة في نص الإدخال.
- مدير الحوار ومدير المهام
بمجرد أن نحصل على معلومات من المدخلات ، يقوم مدير الحوار ، كما هو موضح أعلاه، بجمع وتحديد أجزاء المعلومات المهمة أم لا. مدير الحوار هو وحدة تحكم وتوجه تدفق المحادثة. تخيل هذا كجدول يحتوي على معلومات مستخرجة في خطوة فهم اللغة الطبيعية ومخزنة بشكل متزامن لجميع الأقوال في المحادثة الجارية.
يطور مدير الحوار إستراتيجية عبر قواعد أو آليات معقدة أخرى ، مثل التعلم المعزز ، للاستفادة الفعالة من المعلومات التي تم الحصول عليها من المدخلات. ينتشر مديرو الحوار في الغالب في الحوارات الموجهة نحو الهدف نظرًا لوجود هدف محدد للوصول إليه عبر المحادثة.
- توليد اللغة الطبيعية
أخيرًا ، بينما يقرر مدير الحوار استراتيجية للاستجابة ، فإن وحدة توليد اللغة الطبيعية تولد استجابة في شكل يمكن قراءته من قبل الإنسان وفقًا للاستراتيجية التي وضعها مدير الحوار. يمكن أن يكون منشئ الاستجاب مبني على قالب أو نموذج توليدي تم تعلمه من البيانات. بعد ذلك ، تقوم وحدة تركيب الكلام بتحويل النص إلى كلام إلى المستخدم النهائي. لمزيد من المعلومات حول مهام تركيب الكلام ، ألق نظرة على waveNet و خدمة النص إلى محادثة من Google.
على الرغم من أن خط الإنتاج في الشكل السابق يفترض أن روبوت المحادثة يعتمد على الصوت ، إلا أن مسارًا مشابهًا بدون وحدات معالجة الكلام سيعمل مع برامج المحادثة النصية. لكن في جميع التطبيقات الصناعية ، نتجه نحو امتلاك المزيد والمزيد من الأنظمة القائمة على الصوت في النهاية ، وبالتالي فإن خط الإنتاج الذي تمت مناقشته هنا يكون أكثر عمومية ، وينطبق على مجموعة متنوعة من التطبيقات . الآن بعد أن ناقشنا بإيجاز المكونات المختلفة لروبوت المحادثة وكيفية حدوث تدفق المحادثة ، دعنا نتعمق في فهم هذه المكونات بالتفصيل.
نظم الحوار بالتفصيل
الفكرة الرئيسية لنظام الحوار أو روبوت المحادثة هي فهم استعلام المستخدم أو إدخاله وتقديم استجابة مناسبة. هذا يختلف عن أنظمة الإجابة على الأسئلة النموذجية حيث يجب أن تكون هناك إجابة عند تقديم سؤال. في إعداد الحوار ، قد يسأل المستخدمون استفساراتهم “بالتناوب”. في كل منعطف ، يكشف المستخدم عن اهتمامه بالموضوع بناءً على ما قد يكون استجاب له الروبوت. لذلك ، في نظام الحوار ، فإن أهم شيء هو فهم الفروق الدقيقة من مدخلات المستخدم بطريقة خطوة بخطوة وتخزينها في سياق لتوليد الردود.
قبل أن ندخل في تفاصيل برامج الروبوت وأنظمة الحوار ، سنغطي المصطلحات المستخدمة في أنظمة الحوار وتطوير روبوتات المحادثة على نطاق أوسع.
ألية حوار أو المقصد (Dialog act or intent)
هذا هو الهدف من أمر المستخدم. في الأنظمة التقليدية ، المقصد هو واصف أساسي. في كثير من الأحيان ، يمكن ربط العديد من الأشياء الأخرى ، مثل المشاعر ، بالمقصد . يُطلق على المقصد أيضًا “ألية حوار (Dialog act) في بعض الأدبيات. في المثال الأول في الشكل أدناه ، يكون orderPizza هو الغرض من أمر المستخدم. وبالمثل ، في المثال الثاني ، يريد المستخدم معرفة الأسهم ، لذا فإن القصد هو getStockQuote. عادةً ما يتم تحديد هذه النوايا مسبقًا بناءً على مجال عمل روبوت المحادثة.
الشكل 6-4. مثال على المصطلحات المختلفة المستخدمة في روبوتات المحادثة
- فتحة أو كيان (Slot or entity)
يحتوي على معلومات تتعلق بالكيانات المحددة المتعلقة بالقصد. المعلومات المتعلقة بكل خانة التي تظهر في الكلام الأصلي هي “القيمة”. يُشار أحيانًا إلى الفتحات والقيمة معًا على أنها “كيان”. يوضح الشكل أعلاه مثالين للكيانات. يبحث المثال الأول عن سمات معينة للبيتزا المطلوب طلبها: ” متوسط” و “جبن إضافي”. من ناحية أخرى ، يبحث المثال الثاني عن الكيانات ذات الصلة بـ getStockQuote: اسم السهم والفترة الزمنية التي يُطلب فيها روبوت المحادثة.
- حالة أو سياق الحوار
حالة الحوار هييحتوي على كل من المعلومات حول إجراء الحوار بالإضافة إلى أزواج الحالة والقيمة. وبالمثل ، يمكن عرض السياق على أنه مجموعة من حالات الحوار التي تلتقط أيضًا حالات الحوار السابقة على أنها محفوظات.
الآن ، دعنا نأخذ مثال باستخدام واجهة برمجة تطبيقات سحابية تسمى Dialogflow لمتجر بيتزا خيالي لتمكين المستخدمين من التحدث مع روبوت محادثة لطلب البيتزا. هذا نظام موجه نحو الهدف حيث يكون الهدف هو تلبية طلب المستخدم وطلب البيتزا.
روبوت محادثة لمتجر بيتزا
Dialogflow هو منصة بناء وكيل محادثة من قبل Google. من خلال توفير الأدوات اللازمة لفهم اللغة الطبيعية وتوليدها وإدارة المحادثة ، يتيح لنا Dialogflow إنشاء تجارب محادثة بسهولة. في حين أن هناك العديد من الأدوات الأخرى المتاحة ، اخترنا هذه الأداة لأنها سهلة الاستخدام وناضجة ويتم تحسينها باستمرار.
تخيل أن هناك متجرًا خياليًا للبيتزا يسمى بيتزا ستوب ، وعلينا إنشاء روبوت محادثة يمكنه تلقي طلب من أحد العملاء. يمكن أن تحتوي البيتزا على طبقات متعددة (مثل البصل والطماطم والفلفل) ، ويمكن أن تأتي بأحجام مختلفة. يمكن أن يحتوي الطلب أيضًا على عنصر واحد أو أكثر من الجوانب و / أو المقبلات و / أو قسم المشروبات في القائمة. الآن بعد أن فهمنا المتطلبات ، فلنبدأ في بناء الروبوت الخاص بنا باستخدام إطار عمل Dialogflow.
بناء وكيل الحوار الخاص بنا
قبل أن نبدأ في إنشاء وكيلنا ، نحتاج إلى إنشاء حساب وإعداد بعض الأشياء. لهذا ، افتح موقع Dialogflow الرسمي، وقم بتسجيل الدخول باستخدام حساب Google الخاص بك ، وقم بتوفير الأذونات المطلوبة. انتقل إلى الإصدار 2 من واجهة برمجة التطبيقات . انقر على “جربها مجانًا” وسيتم توجيهك إلى المستوى المجاني من Google Cloud Services ، ثم يمكنك متابعة عملية التسجيل.
1. أولاً ، نحتاج إلى إنشاء وكيل. انقر على زر تكوين وكيل ، ثم أدخل اسم الوكيل. يمكنك تقديم أي اسم ، ولكن من الممارسات الجيدة تقديم اسم يعطي فكرة عما يتم استخدام الوكيل. بالنسبة لمشروعنا بيتزا ستوب ، سنطلق على وكيلنا اسم “بيتزا”. الآن ، قم بتعيين المنطقة الزمنية وانقر فوق الزر إنشاء.
2. ستتم إعادة توجيهك بعد ذلك إلى صفحة أخرى بها خيارات تتيح لك إنشاء الروبوت. يوضح الشكل أدناه واجهة المستخدم الخاصة بـ Dialogflow ، والتي سنستخدمها عدة مرات أثناء إنشاء وكيلنا. بشكل افتراضي ، سيكون لدينا بالفعل غايتان: المقصد الاحتياطي الافتراضية و مقصد الترحيب الافتراضي.
المقصد الاحتياطي الافتراضية هي الاستجابة الافتراضية إذا فشلت بعض واجهات برمجة التطبيقات الداخلية وستقوممقصد الترحيب الافتراضي بإنشاء رسالة ترحيب.
3. الآن ، نحتاج إلى إضافة المقاصد والكيانات التي نهتم بها إلى وكيلنا. لإضافة مقصد ، مرر مؤشر الماوس فوق مربع Intents وانقر فوق الزر +. سترى شيئًا مشابهًا للشكل أدناه . هذه المقاصد والكيانات هي ما حددناه سابقًا في القسم.
4. الآن ، سننشئ المقصد الأول: اطلب البيتزا. أثناء إنشاء مقصد جديد ، يتعين علينا تقديم أمثلة تدريبية ، تسمى “عبارات التدريب” ، لتمكين الروبوت من اكتشاف الاختلافات في الاستجابات التي تنتمي إلى الهدف. نحتاج أيضًا إلى توفير “السياق”: جزء من المعلومات التي يمكن تذكرها على مدى فترة المحادثة والتي سيتم استخدامها لاكتشاف النية اللاحقة.
من أمثلة العبارات التدريبية “I want to order a pizzaا” أو “medium with cheese please.” يشير الأول إلى مقصد بسيط لطلب البيتزا ، بينما يتكون الثاني من كيانات مفيدة للتذكر ، مثل medium size و إضافة الجبن.
يوضح الشكل أدناه عينة من عبارات التدريب المضافة إلى الوكيل.
الشكل 6-8. إضافة عبارات تدريبية للنوايا
5. نظرًا لأننا أدرجنا المقصد ، نحتاج إلى إضافة الكيانات (entity) المعنية لتذكر المعلومات المهمة التي قدمها المستخدم. أنشئ كيانًا باسم pizzaSize ، وقم بتمكين “fuzzy matching” (الذي يطابق الكيانات حتى لو كانت متشابهة تقريبًا) ، وقدم القيم الضرورية. وبالمثل ، قم بإنشاء كيان pizzaTopping ، ولكن هذه المرة ، قم أيضًا بتمكين “Define synonyms” (يتيح لنا ذلك تحديد المرادفات مع السماح لنا بمطابقة عدة كلمات ، مُعرَّفة كمرادفات ، مع نفس الكيان).
سيساعدنا هذان الاثنان معًا في اكتشاف “الطبقة المتوسطة” و “طبقة الجبن” ، كما هو موضح في الأشكال أدناه.
6. الآن ، دعنا نعود إلى المقاصد (intents) لإضافة معلومات إضافية إلى قسم الإجراءات و المعايير (Action and parameters) . نحتاج إلى كل من الإضافة والحجم لإكمال الطلب ، لذلك نحتاج إلى التحقق من المربع المطلوب في ذلك. بيتزا واحدة لا يمكن أن تكون متعددة الأحجام ، لكن بيتزا واحدة يمكن أن تحتوي على إضافات متعددة. لذلك ، قم بتمكين خيار isList للإضافات للسماح لها بالحصول على قيم متعددة.
قد يذكر المستخدم الحجم أو الإضافة فقط. لجمع المعلومات الكاملة ، نحتاج إلى إضافة مطالبة تطرح أسئلة متابعة ، مثل ، “ما حجم البيتزا الذي تريده؟” كموجه لبيتزا الحجم. هذا موضح في الشكل أدناه.
7.نحتاج أيضًا إلى تقديم استجابات نموذجية ، كما هو موضح في الشكل أدناه ، التي سيقدمها الوكيل للمستخدم. يمكننا أن نسأل المستخدم إذا كان يحتاج إلى مشروبات أو مقبلات أو جوانب. إذا كنا ننشئ شيئًا مثل مقصد الفوترة ، فيمكننا إنهاء المحادثة بعدها عن طريق تمكين شريط التمرير “Set this intent as end of conversation” في كتلة الردود.
8. حتى الآن ، أضفنا مقصد وكيانات بسيطة. الآن يمكننا أن ننظر إلى كيان معقد مع سياق. ضع في اعتبارك العبارة ، “I want to order 2 L of juice and 3 wings .” يحتاج وكيلنا إلى التعرف على الكمية والعنصر المطلوب. يتم ذلك عن طريق إضافة كيان مخصص في Dialogflow. لقد أنشأنا كيانًا يسمى compositeSide ، ويمكنه التعامل مع كل هذه المجموعات.
على سبيل المثال ، في “@sys.number-integer:number-integer @appetizer:appetizer” ، يتعامل الكيان الأول مع التعرف على عدد المقبلات المطلوبة ، ويتعامل الكيان التالي مع نوع فاتح الشهية ، كما هو موضح في الأشكال أدناه كما ترى ، يتم إعطاء توقيعات هذه الكيانات كتعبيرات عادية.
9.يمكننا إضافة العديد من النوايا والكيانات لجعل وكيلنا قويًا. في الشكل أدناه، ألق نظرة على أمثلة للنوايا والكيانات الأخرى التي أضفناها لإثراء تجربة شراء البيتزا للمستخدم وتحسينها.
الآن بعد أن انتهينا من خطوات إنشاء روبوت لـ PizzaStop ، سنختبر الروبوت الخاص بنا لمعرفة كيفية عمله في سيناريوهات مختلفة.
اختبار وكيلنا
الآن ، دعونا نختبر وكيلنا في إعداد موقع الويب. لهذا ، نحتاج إلى فتحه في وضع “web demo”. انقر فوق مربع عمليات الدمج (Integrations ) وانتقل لأسفل حتى تصل إلى Web Demo. انقر فوق الرابط في النافذة المنبثقة ، وهذا كل شيء! لا تتردد في اختبار وكيلك.. يوضح الشكل أدناه مقتطفات من تلك التي بنيناها. يعد اختبار الروبوت الخاص بنا أمرًا مهمًا للتحقق من صحة ذلك انها تعمل. سنحلل بعض الحالات ذات الصعوبة المتفاوتة.
يمكننا أن نرى في الشكل أعلاه أن الروبوت الخاص بنا قادر على التعامل مع الاستعلامات البسيطة لطلب بيتزا. نظرًا لأننا اختبرنا الروبوت من البداية إلى النهاية ، يمكننا أيضًا اختبار مكونات مختلفة منه بشكل فردي. يساعد اختبار المكونات الفردية في عمل نموذج أولي سريعًا والتقاط حالات الحواف قبل الاختبار الشامل.
يوضح الشكلان أدناه كيفية عمل الحالة الداخلية والكيانات المستخرجة في محادثة أخرى.
ختاماً
تعرفنا في هذا المقال على خط إنتاج روبوتات المحادثة و أوضحنا كيفية إنشاء روبوت محادثة يعمل بكامل طاقته باستخدام واجهة برمجة تطبيقات Dialogflow. تعلمنا عن المقاصد والكيانات – اللبنات الأساسية لفهم الحوار.
إضافة تعليق