دليلك للاستفادة من Machine Learning لبناء Chatbot (الجزء الاول)

523

ال Chatbots ، هي موضوع ساخن والعديد من الشركات تأمل في تطوير ال bots لإجراء محادثات طبيعية لا يمكن تمييزها عن محادثات البشر، حيث يدعي الكثيرون أنهم يستخدمون تقنيات معالجة اللغة الطبيعية NLP و تقنيات التعليم العميق Deep Learning لجعل هذا ممكنا. ولكن مع كل هذه الضجة حول الذكاء الاصطناعي، يصعب أحيانًا معرفة الحقيقة من الخيال.

في هذا المقال نتناول بعض تقنيات التعلم العميق التي تُستخدم لبناء chatbots، سنبدأ من خلال شرح الوضع الحالي، وما هو ممكن، وما سيبقى مستحيلاً لبعض الوقت على الأقل.

نماذج الاسترجاع vs النماذج التوليدية

لنبدأ بالوضع الحالي: نستطيع القول انه يسيطر على الساحة نوعان من النماذج المستخدمة: نماذج الاسترجاع والنماذج التوليدية.

نموذج الاسترجاع (الاسهل) يقوم باستخدام مستودع repository من الردود المحددة مسبقا بالإضافة إلى استخدام عدة طرق للكشف عن مجريات الحوار لاختيار استجابة مناسبة على أساس المدخلات والسياق. يمكن أن يكون الكشف عن مجريات الحوار بسيطًا مثل التطابق المشروط لبعض المصطلحات، أو معقدًا. لا تُنشئ هذه الأنظمة أي نص جديد، بل تختار استجابة من مجموعة ثابتة.

النموذج التوليدي(الأصعب) لا يعتمد على الردود المحددة مسبقًا. بل يقوم بتوليد استجابات جديدة من البداية. تعتمد النماذج التوليدية عادةً على تقنيات الترجمة الالية “أي تتمكن الالة من ترجمة النصوص وفهمها”، ولكن بدلاً من الترجمة من لغة إلى أخرى، فإننا “نترجم” المدخلات إلى مخرجات (استجابة).

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

يمكن استخدام تقنيات التعلم العميق لكل من النماذج المستندة إلى الاسترجاع أو المولدات، ولكن يبدو أن الأبحاث تنتقل إلى اتجاه المولدات.

إن معماريات التعلم العميق مثل معمارية التسلسل Sequence to Sequence مناسبة بشكل فريد لتوليد النص، ويأمل الباحثون في إحراز تقدم سريع في هذا المجال. ومع ذلك، ما زلنا في المراحل المبكرة من بناء النماذج التوليدية التي تعمل بشكل جيد. من الأرجح أن تكون أنظمة الإنتاج المستندة إلى الاسترجاع هي السائدة في الوقت الحالي.

 

الجمل القصيرة vs الجمل الطويلة

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

 

المجال المفتوح VS المجال المغلق

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

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

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

المجال مغلق: يمكنك طرح مجموعة محدودة من الأسئلة حول موضوعات محددة. (أسهل). ما هو الطقس في ميامي؟

بالنسبة للمجال المغلق:

المربع الأول “النظام المشروط”: هي خطوة أولى رائعة ل chatbot لأنها في المتناول، لا تتطلب تعقيد الأجهزة الذكية ويمكن أن تقدم فائدة كبيرة للمستخدمين.

المربع الثاني “النماذج التوليدية” عندما يتم طرح الأسئلة تمكن تقنية الماكينة الذكية chatbot من توليد الردود. ويستطيع chatbot معالجة الأسئلة الشائعة وبعض الحالات غير المتوقعة التي لا توجد لها استجابات محددة مسبقًا. يمكن للآلة الذكية التعامل مع المحادثات الطويلة ويبدو أنها أكثر تشبهًا للإنسان. لكن جعل الاستجابة مولده أمر معقد حقا.

بالنسبة للمجال المفتوح:

المربع الثالث “النظام المشروط” من المستحيل أن تستطيع وضع نظام مشروط للمجال المفتوح

المربع الرابع “النماذج التوليدية” لا يوجد شيء قد يقوم بهذه المهمة غير الذكاء الاصطناعي العام، وهذا يعتبر واحد من أعظم التحديات امام الباحثين في هذا المجال.

 

التحديات المشتركة

هناك بعض التحديات الواضحة وغير الواضحة عند بناء chatbot معظمها ضمن مجالات بحث نشطة جدا.

  • السياق الداخلي

لإنتاج استجابات عقلانية قد تحتاج الأنظمة لدمج كل من السياق اللغوي والسياق المادي. في الحوارات الطويلة يتتبع البشر ما قيل وما هي المعلومات التي تم تبادلها في المحادثة. هذا مثال للسياق اللغوي. الطريقة الأكثر شيوعًا لجعل chatbot متابعا جيدا هي ربط المحادثة بالموضوع، لكن القيام بذلك من خلال المحادثات الطويلة أمر صعب. التجارب لبناء أنظمة حوار متكاملة باستخدام نماذج الشبكات العصبية الهرمية التوليدية والاهتمام بالنية والسياق في محادثة من خلال نماذج الشبكات العصبية يسيران في هذا الاتجاه. قد يحتاج المرء أيضًا إلى تضمين أنواع أخرى من البيانات السياقية مثل التاريخ / الوقت أو الموقع أو المعلومات الخاصة بالمستخدم.

  •  الشخصية الكامنة

عند توليد ردود، يجب على chatbot أن يقدم بشكل مثالي إجابات متناسقة لمدخلات. على سبيل المثال، من المنطقي الحصول على الرد نفسه لكل من “كم عمرك؟” و “ما هو عمرك؟”. قد يبدو ذلك سهلاً، لكن دمج مثل هذه المعرفة الثابتة أو “الشخصية” في النماذج يعد مشكلة بحثية. تتعلم العديد من الأنظمة توليد استجابات لغوية معقولة، ولكنها غير مدربة على توليد استجابات متناسقة لغوياً. عادةً ما يكون ذلك بسبب تدريبهم على الكثير من البيانات من مستخدمين متعددين ومختلفين بطبيعة الحال. نماذج من هذا القبيل مثل نموذج المحادثة العصبية القائم على أن الأشخاص يتخذون الخطوات الأولى في اتجاه الصياغة الشخصية.

  •  تقييم النماذج

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

  •  النية والتنوع

تتمثل المشكلة الشائعة في الأنظمة المولدة في أنها تميل إلى تقديم استجابات عامة مثل “هذا رائع” أو “لا أعرف” لأنها تعمل مع الكثير من الحالات. وقد كانت الإصدارات المبكرة من الرد الذكي من Google إلى الرد بـ “أنا أحبك” على أي شيء تقريبًا. ويعود ذلك جزئياً إلى كيفية تدريب هذه الأنظمة، من حيث البيانات المستخدمة ومن حيث هدف التدريب الفعلي. حاول بعض الباحثين تعزيز التنوع بشكل مصطنع من خلال وضع وظائف موضوعية مختلفة. ومع ذلك، فإن البشر ينتجون عادة ردودًا محددة للمدخلات وتحمل نية. نظرًا لأن الأنظمة المولدة (وخصوصًا أنظمة النطاق المفتوح) لا يتم تدريبها على وجود اي نوايا محددة، فإنها تفتقر إلى هذا النوع من التنوع.

 

ما مدى كفاءة عمل chatbot حقاً؟

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

هذا يتركنا مع مشاكل في المجالات المغلقة حيث تكون كل من أساليب التوليد والمشروطة مناسبة. ولكن كلما طالت المحادثات وكلما كان متابعة السياق أكثر أهمية، كلما أصبحت المشكلة أكثر صعوبة.

في مقابلة أجريت معه مؤخراً، يضع أندرو ننغ، وهو الآن عالم كبير في بايدو، صاغ الأمر جيداً:

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

الأخطاء النحوية في الأنظمة مكلفة للغاية وقد تزعج المستخدمين. هذا هو السبب في أن معظم الأنظمة ربما تكون أفضل حالًا باستخدام أساليب الاسترجاع التي تكون خالية من الأخطاء النحوية والاستجابات البذيئة. إذا تمكنت الشركات من الحصول على كميات هائلة من البيانات بطريقة ما، فإن النماذج المولدة تصبح مجدية – ولكن يجب أن تكون مدعومة بتقنيات أخرى لمنعها من الخروج عن السيطرة كما حصل مع شركة مايكروسوفت في chatbot Tay.

تنفيذ نموذج قائم على استرجاع باستخدام TENSORFLOW

الغالبية العظمى من chatbots اليوم تعتمد على الاسترجاع، أو مزيج من الاسترجاع والتوليد. يعد الرد الذكي من Google مثالًا جيدًا. تمثل النماذج التوليدية مجالًا نشطًا للأبحاث، لكننا لم نصل إلى هذا الحد بعد. إذا كنت ترغب في بناء chatbot اليوم، فأن أفضل رهان هو على الأرجح نموذج قائم على الاسترجاع.

THE UBUNTU DIALOG CORPUS

في هذا المقال، سنعمل مع Ubuntu Dialog Corpus (الورقة البحثية، GitHub). تعتبر Ubuntu Dialog Corpus) UDC) واحدة من أكبر مجموعات قواعد البيانات العامة للحوار المتاحة. إنها تستند إلى سجلات الدردشة من قنوات Ubuntu على شبكة IRC العامة. تتناول الورقة بالتفصيل كيفية إنشاء الحوار، لذا لن أكرر ذلك هنا. ومع ذلك، من المهم أن تفهم نوع البيانات التي نتعامل معها، لذا دعنا نقوم ببعض الاستكشاف أولاً.

تتكون بيانات التدريب من 1،000،000 مثال، و50 ٪ إيجابية (التسمية 1) و50 ٪ سلبية (التسمية 0). يتألف كل مثال من سياق، والمحادثة حتى هذه النقطة، كلمة، ورد على السياق. تعني العلامة الإيجابية أن التعبير كان استجابة فعلية لسياق ما، وأن العلامة السلبية تعني أن الكلمة لم تكن – فقد تم اختيارها عشوائيًا من مكان ما في الحوار. هنا بعض بيانات العينة.

لاحظ أن البرنامج المسؤول عن انشاء مجموعة البيانات قد أجرى بالفعل مجموعة من عمليات المعالجة المسبقة لنا – حيث قام بتقسيم الجمل الى كلمات منفصلة “tokenize” وقام أيضا بالبحث عن الجمل التعبيرية واستبدالها برموز “stemmed” وأخيرا يقوم بالبحث عن الكلمات في القاموس الخاص به وإعطاء تنبيه للكلمات الي لم يستطيع التعرف عليها. كل هذا باستخدام أداة NLTK. استبدل البرنامج أيضًا الكيانات مثل الأسماء والمواقع والمؤسسات وعناوين URL ومسارات النظام برموز مميزة خاصة. هذه المعالجة المسبقة ليست ضرورية تمامًا، ولكن من المرجح أن تؤدي إلى تحسين الأداء بنسبة قليلة. يبلغ متوسط السياق 86 كلمة وطول الكلام 17 كلمة. تحقق من Jupyter لرؤية تحليل البيانات.

تأتي مجموعة البيانات مع مجموعات اختبار والتحقق من الصحة. يختلف تنسيقها عن تنسيق بيانات التدريب. يتكون كل سجل في مجموعة الاختبار / التحقق من سياق، ومعنى الكلمة الحقيقة (الاستجابة الحقيقية) و9 كلمات غير صحيحة يطلق عليها مشتتات distractors. الهدف من هذا النموذج هو تعيين أعلى درجة على الكلام الصحيح، وانخفاض الدرجات إلى الألفاظ الخاطئة.

هناك طرق مختلفة لتقييم مدى نجاح نموذجنا. هناك مقياس شائع الاستخدام هو recall@k. يعني استدعاء عند المتغير k وذلك بافتراض أننا سمحنا للنموذج باختيار أفضل الردود من بين الردود العشرة المحتملة (1 صحيح و9 مشتتات). إذا كان الرمز الصحيح من بين الأشياء المختارة، سوف نضع مثال الاختبار هذا على أنه صحيح. لذا، فإن k أكبر يعني أن المهمة تصبح أسهل. إذا تم تعيين k=10، فسنحصل على استدعاء بنسبة 100٪ لأن لدينا 10 ردود فقط للاختيار من بينها. إذا قمنا بتعيين k=1، فإن النموذج له فرصة واحدة فقط لاختيار الاستجابة الصحيحة.

في هذه المرحلة، قد تتساءل كيف تم اختيار التسع مشتتات. في مجموعة البيانات هذه، تم اختيار 9 مشتتات عشوائيا. ومع ذلك، في العالم الحقيقي قد يكون لديك الملايين من الردود المحتملة ولا تعرف أي منها صحيح. لا يمكنك تقييم مليون رد محتمل لاختيار واحدة بأعلى الدرجات – ستكون مكلفة للغاية. يستخدم Google’s Smart Reply أساليب التجميع للتوصل إلى مجموعة من الردود المحتملة للاختيار من بينها أولاً. أو، إذا كان لديك فقط بضع مئات من الردود المحتملة في المجموع، فيمكنك تقييمها جميعًا.

وبذلك ينتهي الجزء الأول, لنكمل التطبيق العملي لبناء chatbot في الجزء الثاني إن شاء الله.

لمصدر:(Ultimate Guide to Leveraging NLP & Machine Learning for your Chatbot)

 

تعليقات