استنادًا إلى كود الريبو TC-Bot وأنظمة الحوار العصبي لإكمال المهام الورقية من طرف إلى طرف. يعد الريبو هذا نسخة مبسطة من TC-Bot، ويعمل بمستوى مماثل من الدقة، على الرغم من أنه لا يمكن مقارنته بشكل مباشر.
يوضح هذا كيفية تدريب وكيل DQN بسيط من خلال التعلم المعزز العميق باعتباره برنامج دردشة آلي موجه نحو الهدف باستخدام محاكي مستخدم بسيط. الكود عبارة عن نسخة مبسطة من TC-Bot بواسطة MiuLab مع الاختلاف الرئيسي وهو أن هذا الكود لا يتضمن مكونات NLG أو NLU ولكنه يقوم فقط بتدريب مدير الحوار. مكونات NL ليست ضرورية لفهم كيفية تدريب روبوت الدردشة GO باستخدام DRL وبالتالي لا يتم تنفيذه.
فيما يلي رسم تخطيطي من الورقة البحثية لـ TC-Bot، وهو مشابه لتدفق الحوار المستخدم في هذا المشروع بخلاف مكونات LU وNLG:
بالإضافة إلى إزالة NL، هناك تغييرات في شروط النجاح ومُحسِّن وكيل DQN وبعض التغييرات الطفيفة الأخرى. ولذلك، لا ينبغي مقارنة الدقة مباشرة بين TC-Bot وهذا الريبو.
قاعدة البيانات عبارة عن تذاكر السينما، وهي نفس قاعدة البيانات المستخدمة في TC-Bot. يمكن رؤية كل من الإصدارات المخللة والنصية للبيانات في دليل البيانات.
يمكن العثور على سلسلة تعليمية مكونة من 5 أجزاء تصف هذا الرمز وتتناوله بالتفصيل على الوسيط هنا!
يمكنك تدريب وكيل من الصفر باستخدام python train.py
.
في Constants.json، يمكنك تغيير المعلمات الفائقة بما في ذلك "save_weights_file_path" و"load_weights_file_path" (كلا المسارين النسبيين) لحفظ الأوزان وتحميلها على التوالي. على سبيل المثال، لاستخدام الأوزان المدربة مسبقًا في مجلد الأوزان، قم بتعيين قيمة "load_weights_file_path" إلى "weights/model.h5". يتم حفظ الأوزان لكل من نماذج الهدف (tar) والسلوك (beh) keras في كل مرة يصل فيها معدل النجاح الحالي إلى مستوى مرتفع جديد.
يمكنك أيضًا اختبار الوكيل باستخدام python test.py
. ولكن تأكد من تحميل الأوزان عن طريق تعيين "load_weights_file_path" في ملف Constants.json على مسار نسبي مع كل من السلوك والأوزان المستهدفة.
جميع الثوابت تشرح نفسها بنفسها بخلاف كلمة "الفانيليا" تحت الوكيل والتي تعني DQN (صحيح) أو Double DQN (خطأ). الافتراضي هو الفانيليا DQN.
ملاحظة: إذا حصلت على خطأ في إلغاء التحديد في التدريب أو الاختبار، فقم بتشغيل python pickle_converter.py
وسيؤدي ذلك إلى إصلاحه
يمكنك اختبار الوكيل عن طريق إدخال الإجراءات الخاصة بك كمستخدم (بدلاً من استخدام بطاقة sim الخاصة بالمستخدم) عن طريق تعيين "usersim" قيد التشغيل في Constants.json على false. يمكنك إدخال إجراء ومؤشر نجاح في كل خطوة من الحلقة/المحادثة في وحدة التحكم. تنسيق إدخال الإجراء هو: فتحات النية/الإبلاغ/فتحات الطلب.
أمثلة على مدخلات الإجراء:
بالإضافة إلى ذلك، ستطلب وحدة التحكم مؤشرًا حول ما إذا كان الوكيل قد نجح بعد (بخلاف ما تم بعد إدخال الإجراء الأولي للحلقة). المدخلات المسموح بها هي -1 للخسارة، و0 لعدم وجود نتيجة بعد، و1 للنجاح.
المعلمات الفائقة المستخدمة من الثوابت.json.
جدول الحلقات (كل 2000 من 40000) حسب الحد الأقصى لمعدل النجاح للفترة/تكرار القطار (كل 100 حلقة) حتى تلك الحلقة: