ملاحظات للزوار:
python3 manage.py runserver
. إذا لم تكن معتادًا على تشغيل القارورة بهذه الطريقة، فراجع المستندات الخاصة بـ Flask-Script. نأسف على أي إزعاج!اعتبارًا من 9 مايو 2017، كانت الحزم الرئيسية للمشروع هي كما يلي:
python3 manage.py runserver
من وجهة نظر المستخدم/المطور، يقدم هذا المشروع واجهة أنظف لإصلاح نماذج التسلسل إلى التسلسل. والنتيجة المثالية هي واجهة برمجة تطبيقات chatbot تتمتع بسهولة قراءة Keras، ولكن مع درجة من المرونة أقرب إلى TensorFlow.
من ناحية "العميل"، يعد اللعب بمعلمات النموذج وتشغيلها أمرًا سهلاً مثل إنشاء ملف تكوين (yaml)، وفتح مترجم بايثون، وإصدار عدد قليل من الأوامر. المقتطف التالي، على سبيل المثال، هو كل ما هو مطلوب لبدء التدريب على مجموعة بيانات كورنيل (بعد تنزيلها بالطبع) مع التكوين الخاص بك:
import data
import chatbot
from utils import io_utils
# Load config dictionary with the flexible parse_config() function,
# which can handle various inputs for building your config dictionary.
config = io_utils . parse_config ( config_path = 'path_to/my_config.yml' )
dataset = getattr ( data , config [ 'dataset' ])( config [ 'dataset_params' ])
bot = getattr ( chatbot , config [ 'model' ])( dataset , config )
bot . train ()
هذه مجرد طريقة واحدة للتفاعل مع المشروع. على سبيل المثال، يمكن للمستخدم أيضًا تمرير المعلمات عبر وسيطات سطر الأوامر، والتي سيتم دمجها مع أي ملفات تكوين يحددها أيضًا (تعطى الأولوية لوسيطات سطر الأوامر في حالة التعارض). يمكنك أيضًا المرور بموقع برنامج الدردشة المحفوظ مسبقًا لاستئناف التدريب عليه أو بدء محادثة. راجع main.py
لمزيد من التفاصيل.
Ubuntu Dialogue Corpus: يمكن رؤية أسلوب المعالجة المسبقة في ubuntu_reformat.ipynb في مجلد دفاتر الملاحظات. الاستخدام المقصود لمجموعة البيانات هو ترتيب الاستجابة للحوارات متعددة المنعطفات، لكنني اتبعت نهجًا بسيطًا إلى حد ما يتمثل في استخراج أزواج الكلام وتفسيرها على أنها جملة واحدة إلى استجابة فردية، والتي تتوافق مع مدخلات برنامج التشفير ووحدة فك التشفير على التوالي في النماذج.
حوارات فيلم كورنيل: لقد بدأت مع هذه النسخة المعالجة مسبقًا من مجموعة كورنيل، وقمت بإجراء تعديلات طفيفة لتقليل الضوضاء.
تعليقات رديت: تقريبا. 1.7 مليار تعليق على موقع Reddit. نعمل حاليًا على المعالجة المسبقة وتقليل مجموعة البيانات الضخمة هذه إلى تنسيق مناسب لنماذج المحادثة التدريبية. سيتم نشر روابط تنزيل مجموعة البيانات المعالجة عند اكتمالها!
DynamicBot: يستخدم أسلوبًا أكثر توجهاً للكائنات تقدمه الفئات المخصصة في model_components.py. والنتيجة هي تضمين أسرع ومتسلسل عبر الإنترنت وأسلوب أكثر طبيعية للدردشة. إنه يستخدم واجهة برمجة تطبيقات python الجديدة (الرائعة) في إصدار TensorFlow 1.0، ولا سيما Dynamic_rnn. كما أنه يلتزم أيضًا بممارسات تحديد النطاق المتغيرة الجيدة واتفاقيات Tensorflow الشائعة التي لاحظتها في الوثائق وكود المصدر، والتي لها آثار جانبية لطيفة مثل تصورات الرسم البياني النظيفة في TensorBoard.
SimpleBot: نموذج مبسط يعتمد على نموذج "ChatBot" الأكثر تعقيدًا أدناه. على الرغم من أنها أقل مرونة في تخصيص أقسام الجرافة وتستخدم softmax متفرقة على المفردات الكاملة بدلاً من أخذ العينات، إلا أنها أكثر شفافية في تنفيذها. إنه يستخدم الحد الأدنى من tf.contrib، على عكس ChatBot، ويتم تنفيذه بشكل أو بآخر من "الصفر"، بمعنى الاعتماد بشكل أساسي على أساليب Tensorflow الأساسية. إذا كنت جديدًا في TensorFlow، فقد يكون من المفيد قراءة كيفية تنفيذه للتعرف على الاصطلاحات الشائعة في برمجة Tensorflow، حيث كان ذلك نتيجة لقراءتي للكود المصدري لجميع الأساليب في ChatBot وكتابة تعليماتي الخاصة الأكثر إحكاما تفسير.
ChatBot: نسخة موسعة من النموذج الموصوف في هذا البرنامج التعليمي TensorFlow. خصائص البنية: مدخلات مجمعة، يستخدم جهاز فك التشفير آلية الانتباه (انظر الصفحة 69 من ملاحظاتي، ويتم تضمين المدخلات مع الوظائف البسيطة المتوفرة في مكتبة tf.contrib. كما يستخدم أيضًا وظيفة خسارة softmax التي تم أخذ عينات منها للسماح بأحجام أكبر من المفردات (صفحة 67 من الملاحظات) تعليقات إضافية: نظرًا لطبيعة النماذج المجمعة، يستغرق إنشاء النموذج وقتًا أطول مقارنةً بالنماذج الأخرى، ويبدو أن عنق الزجاجة الرئيسي هو حجم المجموعة الأكبر وكيفية إنشاء عمليات التدرج على أحجام دلو.
يعرض دليل صفحة الويب طريقة بسيطة وموفرة للمساحة لنشر نماذج TensorFlow في تطبيق Flask. تم "تجميد" النماذج - تتم إزالة جميع المكونات غير المطلوبة للدردشة (مثل أدوات التحسين) ويتم تحويل كافة المتغيرات المتبقية إلى ثوابت. عندما ينقر المستخدم على اسم النموذج، يتم إنشاء REST API لهذا النموذج. عندما يقوم المستخدم بإدخال جملة في النموذج، يتم إصدار طلب (AJAX) POST، حيث تكون الاستجابة هي جملة استجابة chatbot. لمزيد من التفاصيل حول REST API، راجع view.py.
يتبع تطبيق Flask أفضل الممارسات، مثل استخدام المخططات لإنشاء مثيلات للتطبيقات، وقواعد البيانات المختلفة اعتمادًا على بيئة التطبيق (مثل التطوير أو الإنتاج)، والمزيد.
سأتناول هنا مزيدًا من التفاصيل حول كيفية إنشاء النماذج وكيف يمكن تصورها. هذا القسم قيد التنفيذ ولم يكتمل بعد.
بدلاً من استخدام وسيطة feed_dict
لإدخال دفعات البيانات إلى النموذج، يكون تشفير معلومات الإدخال وتقنيات المعالجة المسبقة في بنية الرسم البياني نفسه أسرع بشكل كبير . وهذا يعني أننا لا نطعم النموذج أي شيء في وقت التدريب. بدلاً من ذلك، يستخدم النموذج سلسلة من قوائم الانتظار للوصول إلى البيانات من الملفات بتنسيق protobuf الخاص بـ google، وفك تشفير الملفات إلى تسلسلات موتر، وتجميع التسلسلات ديناميكيًا وتعبئتها، ثم تغذية هذه الدُفعات إلى وحدة فك ترميز التضمين. كل ذلك داخل هيكل الرسم البياني. علاوة على ذلك، يتم تنسيق معالجة البيانات هذه بواسطة خيوط متعددة بالتوازي. يمكننا استخدام Tensorboard (وأفضل الممارسات لتحديد النطاق المتغير) لتصور هذا النوع من خطوط الأنابيب على مستوى عالٍ.
(المزيد من الأوصاف قريبا!)
لقد أجريت الكثير من الأبحاث حول هذه النماذج، وقمت بتوثيق ملاحظاتي حول الأوراق الأكثر "أهمية" هنا في القسم الأخير من ملاحظات التعلم العميق الخاصة بي هنا. تتضمن الملاحظات أيضًا كيف حاولت ترجمة المواد من الأوراق إلى كود TensorFlow. سأقوم بتحديث ذلك مع وصول الأفكار من المزيد من الأوراق إلى هذا المشروع.
الأوراق:
الموارد عبر الإنترنت: