ترميز منصة بناء chatbot ، الجزء 1: كيفية إنشاء chatbot غبي

كيف تعاملت مع التحدي المتمثل في إنشاء "محادثات" برمجياً.

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

ما الذي يجعل الحد الأدنى chatbot قابلة للحياة؟

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

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

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

بناء بناء الروبوت

الأهداف البسيطة تترجم بشكل جيد إلى الميزات التقنية الإضافية الفعلية. تعتبر منصة البرمجة النصية ، التي طبقتها باستخدام React ، أساسًا ديناميكيًا ينمو ويتقلص باختيار المستخدم. لا يوجد حد لعدد المشغلات أو الردود التي يمكنك إضافتها. في مرحلة البرمجة النصية ، يمكن للمستخدمين اختبار روبوتاتهم ثم حفظها بمجرد رضاهم عن البرامج النصية الخاصة بهم. سيكون بمقدورهم تعديل الروبوت أو الدردشة معه أو مشاركة رابط لأي شخص للدردشة مع الروبوت ، حيث يتم استضافته على موقعي. يتم إرسال كل رسالة يتلقاها الروبوت ، إلى الواجهة الخلفية لـ Ruby on Rails ، حيث تحاول عملية المطابقة العثور على الاستجابة الصحيحة وإرسالها إلى الواجهة الأمامية (المستخدم).

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

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

البرامج النصية الافتراضية بسيطة

سلسلة غامض مطابقة للفوز

كانت الخطوة الأخيرة لصانع بوت بلدي البكم لتنفيذ "مطابقة سلسلة غامض". هناك جوهرة روبي مذهلة ومكتبة لذلك. بدلاً من مقارنة ما إذا كانت string1 == string2 ، تحسب مطابقة السلسلة المشوشة المسافة بين سلسلتين. يستخدم الجوهري خوارزمية مسافة Jaro-Winkler لإرجاع قيمة بين 0 و 1 لتمثيل التشابه بين السلاسل. 1 تعني أن الكلمات متشابهة ، و 0 تعني أنها غير متشابهة على الإطلاق. لقد حددت الحد الأقصى لمطابقات روبوتاتي الافتراضية بـ 0.8 ، لأن ذلك بدا وكأنه تجاوز الأخطاء المطبعية أو كلمات الملء الإضافية مع عدم فقد الاختلافات المهمة تمامًا. تهيئة مثيل المقارنة كان سهلاً (fuzzy_match = FuzzyStringMatch :: JaroWinkler.create (: الأصلي)) وهكذا كان يستخدم.

باستخدام جوهرة

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

1) يطابق نصوص المستخدم

2) مباريات النصي الافتراضية

3) العثور على أدلة من المحادثة السابقة (لم تنفذ بعد)

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