تنفيذ نموذج مولد الحوار العصبي باستخدام XLNet
Yang et al الذي تم تدريبه مسبقًا. (2019) والهندسة المعمارية GPT2
رادفورد وآخرون. (2019) على ثلاث مجموعات بيانات حاليًا: DailyDialog
Li et al. (2017) ، PersonaChat
تشانغ وآخرون. (2018) و TopicalChat
Gopalakrishnan et al الجديد. (2019) من جائزة Alexa Socialbot Grand Challenge 3. Top-k sampling Fan et al. (2018) وفك تشفير النواة هولتزمان وآخرون. (2019) متاحة كتقنيات فك التشفير. الهدف التدريبي هو النمذجة اللغوية الانحدارية على الكلام وتاريخ الحوار.
يمكن للنموذج الاستفادة من التدريب الدقيق المختلط من nvidia/apex. لاحظ أن القمة غير مطلوبة ولا تُستخدم إلا إذا كانت متوفرة. للحصول على دليل التثبيت، راجع التعليمات الرسمية. لا يعد استخدام هذه الوحدة مفيدًا لجميع وحدات معالجة الرسومات (فقط Volta وTuring) ويجب عليك التحقق مسبقًا مما إذا كان المثيل الخاص بك يدعم التدريب الدقيق المختلط.
لتدريب النموذج، قم باستنساخ هذا المستودع وتثبيت التبعيات. يستخدم المشروع cython لتجميع الدفعات لخط أنابيب إدخال أسرع. ويفضل أيضًا استخدام python virtualenv.
git clone https://github.com/bme-chatbots/dialogue-generation.git
cd dialogue-generation
pip install -r requirements.txt
python setup.py build_ext --inplace
سيبدأ الأمر التالي في التدريب على وحدة معالجة رسومات/وحدة معالجة مركزية واحدة بنموذج gpt2-medium
على PersonaChat
. --name
هو اسم الدليل الفرعي الموجود في المجلد النموذجي، حيث يتم حفظ السجلات ونقاط التفتيش.
python -m src.train --model gpt2-medium --data personachat --name my_test_run
بالنسبة للتدريب الموزع على وحدات معالجة الرسومات المتعددة، يجب استدعاء البرنامج النصي Train على هذا النحو.
python -m torch.distributed.launch --nproc_per_node=NUM_GPUS src/train.py --model gpt2
يمكنك أيضًا استخدام التكوينات المحددة مسبقًا عن طريق تمرير مسار ملف config json كوسيطة --config
. هذه متوفرة في مجلد src/configs
ويمكن رؤية نتائج التدريب الخاصة بها أسفل قسم النتائج.
python -m src.train --config src/configs/xlnet-dailydialog.json
يتم تدريب النموذج بسرعة وسهولة على Google Colaboratory أو Kaggle kernel . من المهم ضبط نوع وقت التشغيل على وحدة معالجة الرسومات باستخدام وحدة Tesla P100 أو Tesla T4 الجديدة حيث يمكنها الاستفادة بشكل كامل من التدريب المختلط الدقة وهي أسرع بكثير من إصدار Tesla K80 الأقدم. يمكنك التحقق من النوع الحالي عن طريق تشغيل !nvidia-smi
في إحدى خلايا colab الخاصة بك.
كاختصار، يوجد هنا مثال كامل، والذي يمكنك ببساطة استيراده إلى Google Drive كملف تعاوني.
انسخ التعليمات البرمجية التالية وقم بتشغيلها في خلية من ملف colab (أو Kaggle kernel) لتثبيت النموذج. إذا كنت تستخدم Kaggle kernel، فيجب عليك أيضًا تمكين الوصول إلى الإنترنت.
! git clone https://github.com/bme-chatbots/dialogue-generation.git
! python -m pip install --upgrade pip
# installing apex is optional and is only useful if Colab's Tesla P100 or T4 is used
# !git clone https://github.com/NVIDIA/apex
# !cd apex; pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" .
# building the cython code and installing the required packages
! cd dialogue-generation ; pip install -r requirements.txt ; python setup.py build_ext --inplace
يتم تسجيل مقاييس التدريب والتحقق من الصحة في Tensorboard، والتي يمكن أيضًا تتبعها في ملف colab إذا تم تشغيل الكود أدناه قبل خلية التدريب.
%load_ext tensorboard
%tensorboard --logdir " dialogue-generation/model "
يمكن تدريب النموذج بعد ذلك ببساطة عن طريق تشغيل البرنامج النصي train
باستخدام العلامات الافتراضية. يمكنك رؤية جميع العلامات المقبولة بواسطة البرنامج النصي train.py
من خلال توفير علامة -h
.
! cd dialogue-generation ; python -m src.train
بعد التدريب، يمكن تنزيل النموذج عن طريق تعيين رابط التنزيل في المقتطف التالي إلى الرابط الذي تم تسجيله بواسطة البرنامج النصي بعد التقييم. ( Saving model to dialogue-generation/src/../model/gpt2/19.11.03-12:59:47/model.pt
)
from IPython . display import FileLink
# note that in case of kaggle kernel you have to give path
# relative to your working directory
FileLink ( r'dialogue-generation/src/../model/gpt2/19.11.03-12:59:47/model.pt' )
يتوفر وضع التقييم التفاعلي في النموذج المُدرب عن طريق تشغيل البرنامج النصي interact
وتوفير مسار النموذج المُدرب باستخدام --model_file
. يمكنك أيضًا توفير ملف --config
أو ببساطة تقديم نفس الوسيطة --model
و --name
، التي تم استخدامها أثناء التدريب.
python -m src.interact --model gpt2-medium --name my_test_run
python -m src.interact --config src/configs/xlnet-dailydialog.json
لتدريب أي نموذج على مجموعة البيانات الخاصة بك، عليك ببساطة إنشاء فئة فرعية من DialogDataset
وتنفيذ إنشاء البيانات من الملفات الأولية. بالنظر إلى train.txt
و valid.txt
و test.txt
الموضوعة في data<name of your data>
، حيث يكون كل دور في مربع الحوار في سطر جديد ويتم تقسيم مربعات الحوار المنفصلة بسطر إضافي فارغ.
├── data
| ├── dailydialog
| └── custom_dataset # name of your data ( custom_dataset by default )
| ├── train.txt # the correctly formated train, valid and test files
| ├── valid.txt
| └── test.txt
├── src
Hello how are you?
Hi I'm fine thanks. And you?
Me too thanks for asking.
Hi my name Peter.
Nice to meet you I am Eric.
يتم تنفيذ مثال لفئة مجموعة بيانات مخصصة تسمى CustomDataset
في data.py
الذي يقرأ مجموعة بيانات بهذه الخصائص.
تم أخذ عينة من مربع الحوار أدناه من gpt2
الذي تم تدريبه باستخدام المعلمات الافتراضية لمدة 7 فترات (149051 خطوة) و-- --max_hist 3
في مجموعة بيانات PersonaChat
.
User: hi
Bot: greetings, i'm gerald.
User: how are you ?
Bot: good, thanks. getting ready for another hike, i love hiking!
User: oh realy? where are you going?
Bot: pikes peak. i am curently exploring famous mountains when i have time.
User: that is cool are you going alone?
Bot: my brother is in the us, we go hiking with him every month.
User: how old are you by the way?
Bot: a little under 46 years old
User: are you in a relationship?
Bot: yes i am married, 3 boys, i am pregnant again. i am too busy to focus
تم أخذ عينة من مربع الحوار أدناه من gpt2
الذي تم تدريبه باستخدام المعلمات الافتراضية لمدة 8 فترات (48824 خطوة) و-- --max_hist 3
في مجموعة بيانات DailyDialog
.
User: hi how are you ?
Bot: fine. i got a promotion at work earlier this week.
User: where do you work ?
Bot: I work at the polling place.
User: where is that ?
Bot: I live in the dorms across the street.
User: do you like it ?
Bot: it's great. I heard it is far from here.
User: are you a student ?
Bot: yes. I am a student too.