يحتوي الريبو الحالي على الكود المصاحب لمنشور المدونة؟ كيفية بناء ذكاء اصطناعي حديث للمحادثة مع نقل التعلم.
هذا الكود عبارة عن قاعدة تعليمات برمجية نظيفة ومعلقة تحتوي على نصوص برمجية للتدريب والاختبار يمكن استخدامها لتدريب وكيل الحوار الذي يستفيد من نقل التعلم من نموذج لغة OpenAI GPT وGPT-2 Transformer.
يمكن استخدام قاعدة التعليمات البرمجية هذه لإعادة إنتاج نتائج مشاركة HuggingFace في مسابقة الحوار NeurIPS 2018 ConvAI2 والتي كانت أحدث ما توصلت إليه المقاييس التلقائية. تم تقطير 3k+ سطر من كود المنافسة في حوالي 250 سطرًا من كود التدريب مع خيارات موزعة وخيارات FP16 لتشكيل المستودع الحالي.
يمكن تدريب هذا النموذج خلال ساعة واحدة تقريبًا على مثيل سحابي 8 V100 (يكلف حاليًا حوالي 25 دولارًا) ويتم توفير نموذج مُدرب مسبقًا أيضًا.
لتثبيت واستخدام البرامج النصية للتدريب والاستدلال، يرجى استنساخ الريبو وتثبيت المتطلبات:
git clone https://github.com/huggingface/transfer-learning-conv-ai
cd transfer-learning-conv-ai
pip install -r requirements.txt
python -m spacy download en
للتثبيت باستخدام عامل الإرساء، يرجى إنشاء الصورة المستقلة:
docker build -t convai .
ملاحظة: تأكد من أن إعداد Docker الخاص بك يخصص ذاكرة كافية لبناء الحاوية. سوف يفشل البناء بالحجم الافتراضي 1.75 جيجابايت بسبب عجلة Pytorch الكبيرة.
يمكنك بعد ذلك إدخال الصورة
ip-192-168-22-157:transfer-learning-conv-ai loretoparisi$ docker run --rm -it convai bash
root@91e241bb823e:/ # ls
Dockerfile README.md boot dev home lib media models proc root sbin sys train.py utils.py
LICENCE bin convai_evaluation.py etc interact.py lib64 mnt opt requirements.txt run srv tmp usr var
يمكنك بعد ذلك تشغيل البرنامج النصي interact.py
على النموذج المُدرب مسبقًا:
python3 interact.py --model models/
نحن نوفر نموذجًا مدربًا مسبقًا ومضبوطًا بدقة على هاتفنا S3 هنا. أسهل طريقة لتنزيل هذا النموذج واستخدامه هي فقط تشغيل البرنامج النصي interact.py
للتحدث مع النموذج. بدون أي وسيطة، سيقوم هذا البرنامج النصي تلقائيًا بتنزيل نموذجنا وتخزينه مؤقتًا.
يمكن استخدام البرنامج النصي للتدريب في إعدادات GPU واحدة أو إعدادات GPU المتعددة:
python ./train.py # Single GPU training
python -m torch.distributed.launch --nproc_per_node=8 ./train.py # Training on 8 GPUs
يقبل البرنامج النصي للتدريب عدة وسائط لتعديل التدريب:
دعوى | يكتب | القيمة الافتراضية | وصف |
---|---|---|---|
dataset_path | str | "" | المسار أو عنوان url لمجموعة البيانات. إذا كان التنزيل فارغًا من S3. |
dataset_cache | str | './dataset_cache.bin' | المسار أو عنوان url لذاكرة التخزين المؤقت لمجموعة البيانات |
نموذج | str | "openai-gpt" | المسار أو عنوان url أو الاسم المختصر للنموذج |
num_candidates | int | 2 | عدد المرشحين للتدريب |
max_history | int | 2 | عدد التبادلات السابقة التي يجب الاحتفاظ بها في التاريخ |
Train_batch_size | int | 4 | حجم الدفعة للتدريب |
valid_batch_size | int | 4 | حجم الدفعة للتحقق من صحتها |
gradient_accumulation_steps | int | 8 | تجميع التدرجات على عدة خطوات |
lr | float | 6.25e-5 | معدل التعلم |
lm_coef | float | 1.0 | معامل الخسارة LM |
mc_coef | float | 1.0 | معامل خسارة الاختيار من متعدد |
max_norm | float | 1.0 | لقطة قاعدة التدرج |
n_epochs | int | 3 | عدد فترات التدريب |
Personal_permutations | int | 1 | عدد التباديل من الجمل الشخصية |
جهاز | str | "cuda" if torch.cuda.is_available() else "cpu" | الجهاز (كودا أو وحدة المعالجة المركزية) |
fp16 | str | "" | اضبط على O0 أو O1 أو O2 أو O3 للتدريب على fp16 (راجع وثائق القمة) |
local_rank | int | -1 | الترتيب المحلي للتدريب الموزع (-1: غير موزع) |
فيما يلي كيفية إعادة إنتاج نتائجنا على خادم مزود بـ 8 وحدات معالجة رسوميات V100 (قم بتكييف عدد العقد وأحجام الدُفعات حسب التكوين الخاص بك):
python -m torch.distributed.launch --nproc_per_node=8 ./train.py --gradient_accumulation_steps=4 --lm_coef=2.0 --max_history=2 --n_epochs=1 --num_candidates=4 --personality_permutations=2 --train_batch_size=2 --valid_batch_size=2
يجب أن يعطي هذا النموذج عدد الزيارات@1 أكثر من 79، والحيرة 20.5 وF1 16.5 باستخدام البرنامج النصي للتقييم convai2 (انظر أدناه).
هذه الأرقام أقل قليلاً من الرقم الذي حصلنا عليه في مسابقة ConvAI2. إليك ما يمكنك تعديله للوصول إلى نفس النتائج:
يحفظ البرنامج النصي للتدريب جميع التجارب ونقاط التفتيش في مجلد فرعي مسمى بالطابع الزمني للتجربة في المجلد ./runs
بالمجلد الأساسي للمستودع.
يمكنك بعد ذلك استخدام البرنامج النصي التفاعلي للتفاعل مع النموذج بمجرد الإشارة إلى هذا المجلد.
فيما يلي مثال لسطر الأوامر لتشغيل البرنامج النصي التفاعلي:
python ./interact.py --model_checkpoint ./data/Apr17_13-31-38_thunder/ # run the interactive script with a training checkpoint
python ./interact.py # run the interactive script with the finetuned model on our S3
سيعطي النموذج المضبوط بدقة النتائج النهائية @ 1: 0.715
يقبل البرنامج النصي التفاعلي بعض الوسائط لتعديل خوارزمية فك التشفير:
دعوى | يكتب | القيمة الافتراضية | وصف |
---|---|---|---|
dataset_path | str | "" | المسار أو عنوان url لمجموعة البيانات. إذا كان التنزيل فارغًا من S3. |
dataset_cache | str | './dataset_cache.bin' | المسار أو عنوان url لذاكرة التخزين المؤقت لمجموعة البيانات |
نموذج | str | "openai-gpt" | المسار أو عنوان url أو الاسم المختصر للنموذج |
max_history | int | 2 | عدد الأقوال السابقة التي يجب الاحتفاظ بها في التاريخ |
جهاز | str | cuda إذا torch.cuda.is_available() آخر cpu | الجهاز (كودا أو وحدة المعالجة المركزية) |
no_sample | store_true | اضبط لاستخدام فك التشفير الجشع بدلاً من أخذ العينات | |
max_length | int | 20 | الحد الأقصى لطول الكلام الناتج |
min_length | int | 1 | الحد الأدنى لطول عبارات الإخراج |
بذرة | int | 42 | بذرة |
درجة حرارة | int | 0.7 | أخذ عينات من درجة حرارة softmax |
top_k | int | 0 | قم بتصفية الرموز المميزة لـ top-k قبل أخذ العينات ( <=0 : لا يوجد تصفية) |
top_p | float | 0.9 | تصفية النواة (أعلى ع) قبل أخذ العينات ( <=0.0 : لا يوجد تصفية) |
لتشغيل البرامج النصية لتقييم تحدي ConvAI2، تحتاج أولاً إلى تثبيت ParlAI
في مجلد قاعدة الريبو مثل هذا:
git clone https://github.com/facebookresearch/ParlAI.git
cd ParlAI
python setup.py develop
يمكنك بعد ذلك تشغيل البرنامج النصي للتقييم من المجلد الأساسي ParlAI
:
cd ParlAI
python ../convai_evaluation.py --eval_type hits@1 # to download and evaluate our fine-tuned model on hits@1 metric
python ../convai_evaluation.py --eval_type hits@1 --model_checkpoint ./data/Apr17_13-31-38_thunder/ # to evaluate a training checkpoint on hits@1 metric
يقبل البرنامج النصي للتقييم بعض الوسائط لتحديد مقياس التقييم وتعديل خوارزمية فك التشفير:
دعوى | يكتب | القيمة الافتراضية | وصف |
---|---|---|---|
eval_type | str | "hits@1" | قم بتقييم النموذج على مقياس hits@1 أو ppl أو f1 في مجموعة بيانات التحقق من صحة ConvAI2 |
نموذج | str | "openai-gpt" | المسار أو عنوان url أو الاسم المختصر للنموذج |
max_history | int | 2 | عدد الأقوال السابقة التي يجب الاحتفاظ بها في التاريخ |
جهاز | str | cuda إذا torch.cuda.is_available() آخر cpu | الجهاز (كودا أو وحدة المعالجة المركزية) |
no_sample | store_true | اضبط لاستخدام فك التشفير الجشع بدلاً من أخذ العينات | |
max_length | int | 20 | الحد الأقصى لطول عبارات الإخراج |
min_length | int | 1 | الحد الأدنى لطول عبارات الإخراج |
بذرة | int | 42 | بذرة |
درجة حرارة | int | 0.7 | أخذ عينات من درجة حرارة softmax |
top_k | int | 0 | قم بتصفية الرموز المميزة لـ top-k قبل أخذ العينات ( <=0 : لا يوجد تصفية) |
top_p | float | 0.9 | تصفية النواة (أعلى ع) قبل أخذ العينات ( <=0.0 : لا يوجد تصفية) |
راجع example_entry.py
والتعليق في الأعلى.
إذا كنت تستخدم هذا الرمز في بحثك، فيمكنك الاستشهاد بورقة ورشة عمل NeurIPS CAI الخاصة بنا:
@article{DBLP:journals/corr/abs-1901-08149,
author = {Thomas Wolf and
Victor Sanh and
Julien Chaumond and
Clement Delangue},
title = {TransferTransfo: {A} Transfer Learning Approach for Neural Network
Based Conversational Agents},
journal = {CoRR},
volume = {abs/1901.08149},
year = {2019},
url = {http://arxiv.org/abs/1901.08149},
archivePrefix = {arXiv},
eprint = {1901.08149},
timestamp = {Sat, 02 Feb 2019 16:56:00 +0100},
biburl = {https://dblp.org/rec/bib/journals/corr/abs-1901-08149},
bibsource = {dblp computer science bibliography, https://dblp.org}
}