في "المرآة السوداء" ، كانت هناك سلسلة (S2E1) ، صنعوا فيها روبوتات شبيهة بالأشخاص الموتى ، مستخدمين تاريخ المراسلات على الشبكات الاجتماعية للتدريب. أريد أن أخبركم كيف حاولت أن أفعل شيئًا مماثلاً وما الذي حدث. لن تكون هناك نظرية ، الممارسة فقط.

كانت الفكرة بسيطة - أخذ تاريخ محادثاتهم من Telegram ، وبناءً على ذلك ، لتدريب شبكة seq2seq ، القادرة على التنبؤ باستكمالها في بداية الحوار. يمكن أن تعمل هذه الشبكة في ثلاثة أوضاع:
- توقع اكتمال عبارة المستخدم بناءً على سجل المحادثة
- العمل في وضع chatbot
- توليف سجلات المحادثة بأكملها
هذا ما حصلت عليه
يقدم بوت إكمال العبارة

بوت يقدم الانتهاء من الحوار

بوت يتواصل مع شخص حي
User: Bot: User: ? Bot: User: ? Bot: User: ? Bot: User: ? Bot: User: ? Bot:
بعد ذلك ، سوف أخبرك بكيفية إعداد البيانات وتدريب هذا الروبوت بنفسك.
كيف تعلم نفسك
إعداد البيانات
بادئ ذي بدء ، تحتاج إلى الحصول على الكثير من الدردشات في مكان ما. أخذت جميع مراسلاتي في Telegram ، لأن عميل سطح المكتب يسمح بتنزيل الأرشيف الكامل بتنسيق JSON. بعد ذلك ألقيت جميع الرسائل التي تحتوي على علامات اقتباس وروابط وملفات ، ونقلت النصوص المتبقية إلى أحرف صغيرة ورميت جميع الأحرف النادرة من هناك ، ولم أترك سوى مجموعة بسيطة من الحروف والأرقام وعلامات الترقيم - من الأسهل تعلم الشبكة.
ثم أحضرت الدردشات إلى هذا النموذج:
=== > < > < ! === > ? <
هنا ، الرسائل التي تبدأ بالرمز ">" هي سؤال بالنسبة لي ، والرمز "<" يمثل إجابتي وفقًا لذلك ، ويعمل السطر "===" على فصل مربعات الحوار فيما بينها. حقيقة أن أحد الحوار قد انتهى وبدأ الآخر ، حددت حسب الوقت (إذا مرت أكثر من 15 دقيقة بين الرسائل ، فإننا نعتقد أن هذه محادثة جديدة. يمكنك رؤية البرنامج النصي لتحويل القصة على جيثب .
منذ أن كنت أستعمل البرقيات بنشاط منذ فترة طويلة ، كان هناك الكثير من الرسائل في النهاية - كان هناك 443 ألف سطر في الملف النهائي.
اختيار النموذج
لقد وعدت بأنه لن تكون هناك نظرية اليوم ، لذلك سأحاول أن أوضح بإيجاز قدر الإمكان على أصابعي.
اخترت seq2seq الكلاسيكية على أساس GRU. يتلقى نموذج الإدخال هذا رسالة نصية بحرف ويخرج أيضًا حرفًا واحدًا في كل مرة. تعتمد عملية التعلم على حقيقة أننا نقوم بتعليم الشبكة للتنبؤ بالحرف الأخير من النص ، على سبيل المثال ، نعطي "الرصاص" إلى المدخلات وننتظر أن يتم إخراج "برشام" .
لإنشاء نصوص طويلة ، يتم استخدام خدعة بسيطة - يتم إرسال نتيجة التنبؤ السابق إلى الشبكة وما إلى ذلك حتى يتم إنشاء الطول اللازم للنص.
يمكن أن تكون وحدات GRU مبسطة للغاية باعتبارها "مدهشًا للذكاء مع الذاكرة والانتباه" ، ويمكن العثور على مزيد من التفاصيل عنها ، على سبيل المثال ، هنا .
تم اختيار مثال معروف لمهمة إنشاء نصوص شكسبير كأساس للنموذج.
تدريب
ربما يعرف أي شخص قام عبر الشبكات العصبية أن تعلمها على وحدة المعالجة المركزية ممل للغاية. لحسن الحظ ، تأتي خدمة google إلى الإنقاذ من خلال خدمة Colab الخاصة بها - حيث يمكنك تشغيل التعليمات البرمجية الخاصة بك في دفتر jupyter مجانًا باستخدام وحدة المعالجة المركزية ، GPU وحتى TPU . في حالتي ، يتناسب التدريب على بطاقة الفيديو في 30 دقيقة ، على الرغم من أن النتائج المعقولة متوفرة بعد 10. والشيء الرئيسي هو تذكر تبديل نوع الجهاز (في قائمة وقت التشغيل -> تغيير نوع وقت التشغيل).
تجريب
بعد التدريب ، يمكنك المتابعة إلى التحقق من النموذج - كتبت عدة أمثلة تتيح لك الوصول إلى النموذج في أوضاع مختلفة - من إنشاء النص إلى الدردشة المباشرة. كلهم على جيثب .
تحتوي طريقة إنشاء النص على معلمة درجة الحرارة - فكلما ارتفعت ، زاد إنتاج النص (بلا معنى) بوت. هذه المعلمة منطقية لتكوين الأيدي لمهمة محددة.
مزيد من الاستخدام
لماذا يمكن استخدام هذه الشبكة؟ الشيء الأكثر وضوحًا هو تطوير روبوت (أو لوحة مفاتيح ذكية) يمكنها أن تقدم للمستخدم إجابات جاهزة حتى قبل أن يكتبها. هناك ميزة مماثلة موجودة منذ فترة طويلة في Gmail ومعظم لوحات المفاتيح ، لكنها لا تأخذ في الاعتبار سياق المحادثة والطريقة التي يدير بها مستخدم معين المراسلات. قل ، توفر لوحة المفاتيح G-Stable لي خيارات لا معنى لها تمامًا ، على سبيل المثال ، "أنا ذاهب ... احترامي" في المكان الذي أرغب في الحصول على خيار "أنا ذاهب إليه من دارشا" ، والذي استخدمه بالتأكيد عدة مرات.
هل لديك بوت الدردشة مستقبل؟ في شكله النقي ، إنه بالتأكيد ليس موجودًا ، فهو يحتوي على الكثير من البيانات الشخصية ، ولا أحد يعرف في أي وقت ستعطي للمحاور رقم بطاقة الائتمان التي ألقيتها ذات مرة على صديق. علاوة على ذلك ، لا يتم ضبط هذا الروبوت على الإطلاق ، فمن الصعب للغاية القيام به لأداء أي مهام محددة أو الإجابة بشكل صحيح على سؤال محدد. بدلاً من ذلك ، يمكن لمثل هذه الدردشة أن تعمل مع أنواع أخرى من برامج الروبوت ، مما يوفر حوارًا أكثر ارتباطًا "حول لا شيء" - يتكيف بشكل جيد مع هذا. (ومع ذلك ، قال خبير خارجي في شخص زوجته إن أسلوب التواصل للبوت يشبهني كثيرًا. والموضوعات التي يهتم بها هي نفسها بشكل واضح - الأخطاء ، والإصلاحات ، والتعهدات ، وغيرها من أفراح المطور وأحزانه تظهر باستمرار في النصوص).
ما الذي ينصحك بتجربته إذا كان هذا الموضوع مثيرًا لك؟
- نقل التعلم (للتدريب على مجموعة كبيرة من حوارات الآخرين ، ثم الانتهاء من تلقاء أنفسهم)
- تغيير النموذج - الزيادة ، نوع التغيير (على سبيل المثال ، على LSTM).
- حاول العمل مع TPU. لن يعمل هذا النموذج بشكله النقي ، ولكن يمكن تكييفه. يجب أن يكون التسارع النظري للتعلم عشر مرات.
- منفذ إلى منصة متنقلة ، على سبيل المثال باستخدام Tensorflow mobile.
PS رابط إلى جيثب