يستضيف هذا المستودع تنفيذ الورقة البحثية "تعزيز توليد الاستجابة العصبية من خلال الاهتمام الموضعي المدرك للسياق".
THRED هو نظام توليد استجابة متعدد المنعطفات يهدف إلى إنتاج استجابات سياقية وموضوعية. تم تطوير قاعدة التعليمات البرمجية من مستودع Tensorflow NMT.
TL;DR خطوات إنشاء وكيل حوار باستخدام هذا الإطار:
conda env create -f thred_env.yml
(لاستخدام pip
، راجع التبعيات)MODEL_DIR
هو الدليل الذي سيتم حفظ النموذج فيه. نوصي بالتدريب على وحدتي معالجة رسوميات على الأقل، وإلا يمكنك تقليل حجم البيانات (عن طريق حذف المحادثات من ملف التدريب) وحجم النموذج (عن طريق تعديل ملف التكوين). python -m thred --mode train --config conf/thred_medium.yml --model_dir
--train_data --dev_data --test_data
python -m thred --mode interactive --model_dir
1 الحزم المطلوبة فقط لتحليل بيانات Reddit وتنظيفها. 2 يستخدم فقط لاختبار نماذج الحوار في الوضع التفاعلي لسطر الأوامر
لتثبيت التبعيات باستخدام pip
، قم بتشغيل pip install -r requirements
. وبالنسبة لـ Anaconda، قم بتشغيل conda env create -f thred_env.yml
(مستحسن). بمجرد الانتهاء من التبعيات، قم بتشغيل pip install -e .
لتثبيت حزمة thred.
يتم جمع مجموعة بيانات Reddit الخاصة بنا، والتي نسميها Reddit Conversation Corpus (RCC)، من 95 موقعًا فرعيًا محددًا (مدرج هنا). قمنا بمعالجة Reddit لمدة 20 شهرًا تتراوح من نوفمبر 2016 حتى أغسطس 2018 (باستثناء يونيو 2017 ويوليو 2017؛ استخدمنا هذين الشهرين جنبًا إلى جنب مع بيانات أكتوبر 2016 لتدريب نموذج LDA). يرجى الاطلاع هنا للحصول على تفاصيل حول كيفية إنشاء مجموعة بيانات Reddit بما في ذلك المعالجة المسبقة وتنظيف ملفات Reddit الأولية. يلخص الجدول التالي معلومات RCC:
جسد | #يدرب | #dev | #امتحان | تحميل | تحميل مع كلمات الموضوع |
---|---|---|---|---|---|
3 دورات لكل سطر | 9.2 م | 508 ك | 406 ك | التحميل (773 ميجابايت) | تنزيل (2.5 جيجابايت) |
4 دورات لكل سطر | 4 م | 223 ألف | 178 ألف | التحميل (442 ميجابايت) | تحميل (1.2 جيجابايت) |
5 دورات لكل سطر | 1.8 م | 100 ألف | 80 ألف | التحميل (242 ميجابايت) | تحميل (594 ميجابايت) |
في ملفات البيانات، يتوافق كل سطر مع محادثة واحدة حيث يتم فصل الكلمات بمفتاح TAB. تظهر كلمات الموضوع بعد الجملة الأخيرة مفصولة أيضًا بعلامة تبويب.
لاحظ أن الملفات ذات 3 دورات/4 أدوار/5 دورات تحتوي على محتوى مماثل وإن كان بعدد مختلف من العبارات في كل سطر. وكلها مستخرجة من نفس المصدر. إذا وجدت أي خطأ أو أي كلام غير لائق في البيانات، يرجى الإبلاغ عن مخاوفك هنا.
في ملفات تكوين النموذج (على سبيل المثال، ملفات YAML في conf)، يمكن أن تكون أنواع التضمين أيًا مما يلي: glove840B
و fastText
و word2vec
و hub_word2vec
. للتعامل مع ناقلات التضمين المدربة مسبقًا، فإننا نستفيد من Pymagnitude وTensorflow-Hub. لاحظ أنه يمكنك أيضًا استخدام random300
(يشير 300 إلى بُعد تضمين المتجهات ويمكن استبداله بأي قيمة عشوائية) لتعلم المتجهات أثناء تدريب نماذج توليد الاستجابة. يتم توفير الإعدادات المتعلقة بنماذج التضمين في word_embeddings.yml.
يجب تحديد تكوين التدريب في ملف YAML مشابه لـ Tensorflow NMT. يتم توفير نماذج تكوينات لـ THRED وخطوط الأساس الأخرى هنا.
النماذج المنفذة هي Seq2Seq، وHRED، وTopic Aware-Seq2Seq، وTHRED.
لاحظ أنه على الرغم من أن معظم المعلمات مشتركة بين النماذج المختلفة، إلا أن بعض النماذج قد تحتوي على معلمات إضافية (على سبيل المثال، النماذج الموضعية لها معلمات topic_words_per_utterance
و boost_topic_gen_prob
).
لتدريب نموذج، قم بتشغيل الأمر التالي:
python main.py --mode train --config < YAML_FILE >
--train_data < TRAIN_DATA > --dev_data < DEV_DATA > --test_data < TEST_DATA >
--model_dir < MODEL_DIR >
في
، يتم تخزين ملفات المفردات وملفات نموذج Tensorflow. يمكن استئناف التدريب عن طريق تنفيذ:
python main.py --mode train --model_dir < MODEL_DIR >
باستخدام الأمر التالي، يمكن اختبار النموذج مقابل مجموعة بيانات الاختبار.
python main.py --mode test --model_dir < MODEL_DIR > --test_data < TEST_DATA >
من الممكن تجاوز معلمات الاختبار أثناء الاختبار. هذه المعلمات هي: عرض الشعاع --beam_width
، ووزن عقوبة الطول --length_penalty_weight
، ودرجة حرارة أخذ العينات --sampling_temperature
.
يتم تنفيذ واجهة سطر أوامر بسيطة تسمح لك بالتحدث مع النموذج الذي تم تعلمه (على غرار وضع الاختبار، يمكن تجاوز معلمات الاختبار أيضًا):
python main.py --mode interactive --model_dir < MODEL_DIR >
في الوضع التفاعلي، يلزم وجود نموذج LDA مدرب مسبقًا لإدخال كلمات الموضوع المستنتجة في النموذج. قمنا بتدريب نموذج LDA باستخدام Gensim على مجموعة Reddit، التي تم جمعها لهذا الغرض. ويمكن تحميله من هنا. يجب أن يكون الملف الذي تم تنزيله غير مضغوط ويتم تمريره إلى البرنامج عبر --lda_model_dir
.
يرجى الاستشهاد بالورقة التالية إذا كنت قد استخدمت عملنا في بحثك:
@article{dziri2018augmenting,
title={Augmenting Neural Response Generation with Context-Aware Topical Attention},
author={Dziri, Nouha and Kamalloo, Ehsan and Mathewson, Kory W and Zaiane, Osmar R},
journal={arXiv preprint arXiv:1811.01063},
year={2018}
}