هذا هو برنامج chatbot تم تدريبه بواسطة seq2seq والتعلم المعزز .
seq2seq
يعد Seq2seq نموذجًا كلاسيكيًا للتعلم المنظم، حيث تكون مدخلاته ومخرجاته متسلسلة
تم وصف نموذج Vanilla seq2seq في ورقة NIPS '14 حول التسلسل إلى التعلم التسلسلي باستخدام الشبكات العصبية، ويتم فصل المشفر ووحدة فك التشفير
تم إنشاء نموذج seq2seq الموجود في هذا المستودع باستخدام وحدتي LSTM، على غرار النموذج الموضح في ورقة ICCV '15 "التسلسل إلى التسلسل - تحويل الفيديو إلى نص"، ويشترك جهاز التشفير وجهاز فك التشفير في نفس الأوزان
رل
بعد تدريب برنامج chatbot بعدد كافٍ من العصور، أستخدم تقنية RL تسمى تدرج السياسة لتحسين برنامج chatbot بشكل أكبر
من خلال القيام بذلك، يمكن لروبوت الدردشة توليد استجابة أكثر إثارة للاهتمام فيما يتعلق بوظيفة المكافأة
تشبه وظيفة المكافأة الخاصة بي تلك الموضحة في ورقة EMNLP '16 حول التعلم المعزز العميق لتوليد الحوار
اسمح لي أن أعرض لك بعض نتائج برنامج chatbot:
النتيجة 1 (أ و ب كلاهما روبوت دردشة مدرب)
ج: هل يمكنك أن تفعل لي معروفا؟
ب: أي شيء.
ج: أريدك أن تنحني أباً.
ب: بالطبع.
ج: أنا آسف جدًا لم أقصد أن أكون وقحًا ولكن.
ب: لا تفهم الأمر، على الأقل يتعلق الأمر بقدر ما أستطيع.
النتيجة 2 (أ و ب كلاهما روبوت دردشة مدرب)
ج: لم أفعل ذلك! ليس لدي سلاح!
ب: أنت كاذب. ما زلت تريد استرداد أموالك.
ج: شيء خاطئ مع الحقيقة.
ب: لا أريد أي أموال، فقط القليل لا أستطيع الحصول عليه من هذا.
ج: ما المشكلة.
ب: استمع لي. أنا خائف الآن.
ج: آه، ستحتاج إلى كل الأموال التي أحتاج إلى مساعدتك.
النتيجة 3 (أ و ب كلاهما روبوت دردشة مدرب)
ج: لقد نسيت أن أحصل على كوكا كولا.
ب: حصلت على شيء عالق في الرأس.
ج: لا بأس، أعتقد أنه أمر شائع جدًا في الكثير من الهراء.
ب: أعني أننا كنا كل هذا معًا منذ أن كنا طفلين.
ج: هذا سبب إضافي.
ب: ليس هو، بل هو خطأه، وهو أعمى بسبب الله.
ج: وهي قصة غريبة.
يمكنك العثور على المزيد من النتائج من chatbot في هذا الدليل
يتم وصف تكوينات الشبكات العصبية لتلك النتائج في اسم الملف
هل اندهشت من نتيجة الشات بوت؟ :د
يمكنك إنشاء تلك الحوارات المذهلة بنفسك!
فقط اتبع التعليمات أدناه:
تثبيت النقطة -r متطلبات.txt
./script/download.sh
./script/simulate.sh <المسار إلى النموذج> <نوع المحاكاة> <ملف الإدخال> <ملف الإخراج>
<المسار إلى النموذج>
لإنشاء مربع حوار seq2seq، اكتب " model/Seq2Seq/model-77 "
لإنشاء مربع حوار RL، اكتب " model/RL/model-56-3000 "
<نوع المحاكاة>
يمكن أن يكون 1 أو 2
يمثل الرقم # من الجملة (الجمل) السابقة التي يأخذها برنامج chatbot في الاعتبار
إذا اخترت 1، فإن برنامج chatbot يأخذ في الاعتبار الجملة الأخيرة فقط
إذا اخترت 2، فسيأخذ الشات بوت في الاعتبار الجملتين الأخيرتين (واحدة من المستخدم، وواحدة من الشات بوت نفسه)
<ملف الإدخال>
ألقِ نظرة على النتيجة/sample_input_new.txt
هذا هو تنسيق الإدخال الخاص ببرنامج الدردشة الآلي، وكل سطر هو الجملة الأولى في مربع الحوار.
يمكنك فقط استخدام ملف المثال للراحة.
<ملف الإخراج>
ملف الإخراج، اكتب أي اسم الملف الذي تريده
إذا كنت تريد أن يقوم برنامج chatbot بإنشاء إجابة واحدة فقط لكل سؤال
اتبع التعليمات أدناه:
تثبيت النقطة -r متطلبات.txt
./script/download.sh
./script/run.sh <TYPE> <ملف الإدخال> <ملف الإخراج>
<النوع>
لتوليد استجابة seq2seq، اكتب " S2S "
لتوليد استجابة التعلم المعزز، اكتب " RL "
<ملف الإدخال>
ألقِ نظرة على النتيجة/sample_input_new.txt
هذا هو تنسيق الإدخال الخاص ببرنامج الدردشة الآلي، وكل سطر هو الجملة الأولى في مربع الحوار.
يمكنك فقط استخدام ملف المثال للراحة.
<ملف الإخراج>
ملف الإخراج، اكتب أي اسم الملف الذي تريده
لقد قمت بتدريب برنامج الدردشة الآلي الخاص بي باستخدام python2.7.
إذا كنت ترغب في تدريب chatbot من الصفر
يمكنك اتباع هذه التعليمات أدناه:
ألق نظرة على python/config.py، حيث يتم وصف جميع التكوينات الخاصة بالتدريب هنا.
يمكنك تغيير بعض معلمات التدريب الفائقة، أو الاحتفاظ بالمعلمات الأصلية فقط.
أستخدم Cornell Movie-Dialogs Corpus
تحتاج إلى تنزيله وفك ضغطه ونقل جميع ملفات *.txt إلى دليل البيانات/
ثم قم بتنزيل بعض المكتبات باستخدام النقطة:
تثبيت النقطة -r متطلبات.txt
./script/parse.sh
./script/train.sh
دعونا نعرض بعض نتائج نموذج seq2seq :)
./script/test.sh <المسار إلى النموذج> <ملف الإدخال> <ملف الإخراج>
وإظهار بعض نتائج الحوار من نموذج seq2seq!
./script/simulate.sh <المسار إلى النموذج> <نوع المحاكاة> <ملف الإدخال> <ملف الإخراج>
<نوع المحاكاة>
يمكن أن يكون 1 أو 2
يمثل الرقم # من الجملة (الجمل) السابقة التي يأخذها برنامج chatbot في الاعتبار
إذا اخترت 1، فإن برنامج chatbot سوف يأخذ في الاعتبار كلام المستخدم فقط
إذا اخترت 2، فإن chatbot سوف يأخذ في الاعتبار كلام المستخدم وآخر كلام لـ chatbot
تحتاج إلى تغيير معلمة Training_type في python/config.py
"عادي" للتدريب seq2seq، "pg" لتدرج السياسة
تحتاج أولاً إلى التدريب على المستوى "العادي" لبعض العصور حتى تستقر (ينصح بشدة بـ 30 حقبة على الأقل)
ثم قم بتغيير الطريقة إلى "pg" لتحسين وظيفة المكافأة
./script/train_RL.sh
عند التدريب مع تدرج السياسة (ص)
قد تحتاج إلى نموذج معكوس
يتم تدريب النموذج المعكوس أيضًا بواسطة مجموعة بيانات Cornell Movie-dialogs، ولكن مع عكس المصدر والهدف.
يمكنك تنزيل النموذج المعكوس الذي تم تدريبه مسبقًا من خلال
./script/download_reversed.sh
أو يمكنك تدريبه بنفسك
لا تحتاج إلى تغيير أي إعداد حول النموذج المعكوس إذا كنت تستخدم النموذج المعكوس الذي تم تدريبه مسبقًا
لنقم بإنشاء بعض نتائج نموذج RL، والعثور على الاختلاف عن نموذج seq2seq :)
./script/test_RL.sh <PATH TO MODEL> <INPUT FILE> <OUTPUT FILE>
وإظهار بعض نتائج الحوار من نموذج RL!
./script/simulate.sh <المسار إلى النموذج> <نوع المحاكاة> <ملف الإدخال> <ملف الإخراج>
<نوع المحاكاة>
يمكن أن يكون 1 أو 2
يمثل الرقم # من الجملة (الجمل) السابقة التي يأخذها برنامج chatbot في الاعتبار
إذا اخترت 1، فإن برنامج chatbot يأخذ في الاعتبار الجملة الأخيرة فقط
إذا اخترت 2، فسيأخذ الشات بوت في الاعتبار الجملتين الأخيرتين (واحدة من المستخدم، وواحدة من الشات بوت نفسه)
نظام التشغيل: إصدار CentOS Linux 7.3.1611 (الأساسي)
وحدة المعالجة المركزية: Intel(R) Xeon(R) CPU E3-1230 v3 @ 3.30 جيجا هرتز
وحدة معالجة الرسومات: GeForce GTX 1070 8 جيجابايت
الذاكرة: 16 جيجابايت DDR3
Python3 (لـ data_parser.py) وPython2.7 (للآخرين)
بو تشيه هوانغ / @pochih