
لم يكد ضجيجًا حول شبكة BERT العصبية من Google ، والتي أظهرت أحدث النتائج في عدد من المهام التحادثية (NLP) في التعلم الآلي ، لأن OpenAI طرح تطوراً جديداً: GPT-2. هذه الشبكة العصبية مع عدد قياسي من المعلمات في الوقت الحالي (1.5 مليار ، مقابل 100-300 مليون مستخدم عادة في مثل هذه الحالات) كانت قادرة على توليد صفحات كاملة من النص المتصل.
من الجيد إنشاء هذا حتى أن OpenAI رفض نشر النسخة الكاملة ، خشية أن يستخدموا هذه الشبكة العصبية لإنشاء أخبار وتعليقات ومراجعات مزيفة لا يمكن تمييزها عن الأخبار الحقيقية.
ومع ذلك ، في OpenAI ، تمت مشاركة نسخة مخفضة من الشبكة العصبية GPT-2 مع 117 مليون معلمة. سنطلقها من خلال خدمة Google Colab ونجربها.
خلفية صغيرة
بالنسبة لأولئك الذين لم يتبعوا تطور التقدم في معالجة الكلام الطبيعي (NLP).
في صيف عام 2018 ، تم تدريب OpenAI مسبقًا على حجم كبير من النص ، شبكة عصبية GPT مبنية على بنية المحولات. اتضح أنه إذا قمت باستبدال اثنين من الطبقات الأخيرة وإعادة تدريبه لمهمة محددة (يطلق على هذا الأسلوب Fine Tuning ويستخدم على نطاق واسع في التعلم الآلي) ، فإنه يحطم السجلات السابقة فورًا في مجموعة واسعة من مهام المحادثة.
استنادًا إلى هذا التطور ، في نهاية عام 2018 ، أنشأت Google شبكتها العصبية BERT . لقد قاموا بتحسين النتيجة بجدية عن طريق جعل الشبكة العصبية ثنائية الاتجاه ، على عكس GPT.
لعدم الرغبة في الاستسلام ، في فبراير 2019 ، قامت OpenAI على الفور بزيادة GPT بمقدار 10 مرات وتدريبها على كمية أكبر من النص - على 8 ملايين صفحة ويب (ما مجموعه 40 جيجابايت من النص). تعد شبكة GPT-2 الناتجة أكبر شبكة عصبية حاليًا ، مع وجود عدد غير مسبوق من المعلمات تبلغ 1.5 مليار (كان لدى BERT 340 مليون في أكبر نموذج و 110 مليون في BERT القياسي).
ونتيجة لذلك ، تمكنت GPT-2 من إنشاء صفحات كاملة للنص المتماسك. مع المراجع المتكررة لأسماء الشخصيات في سياق السرد ، ونقلت ، والإشارات إلى الأحداث ذات الصلة ، وهلم جرا. لن أقدم هنا أمثلة ، لكن أحيل أولئك الذين يرغبون في المقالة الأصلية على مدونة OpenAI: نماذج لغة أفضل وتداعياتها أو الروابط الموجودة في نهاية المقال.
توليد نص متماسك من هذه الجودة أمر مثير للإعجاب في حد ذاته ، ولكن الشيء الأكثر إثارة للاهتمام هو مختلف. وأظهرت GPT-2 دون أي تدريب إضافي على الفور النتائج قريبة من للدولة من بين الفن على عدد من المهام التحادثية. أكرر ، الذي غاب عن أهمية اللحظة - دون أي تدريب إضافي لمهمة محددة!
كيف حققوا هذا؟ فقط أسأل الشبكات العصبية الأسئلة الصحيحة.
GPT-2 العمارة
تم تدريب GPT-2 على التنبؤ بالكلمة التالية في الجملة. هذا هو النهج الكلاسيكي لتوليد النص. في البداية ، احتلت شبكات التكرار (RNN) ، على وجه الخصوص ، LSTM ، الأولوية في هذا المجال. ولكن بعد اختراع هندسة Transformer في صيف عام 2017 ، بدأت تسود تدريجيا في مهام المحادثة. على الرغم من أن Transformer الأصلي لديه مشكلة في تخزين تسلسلات طويلة (تذكر LSTMs أطول منها) ، فإن سرعة التدريب وعمق الشبكة أكثر من التعويض عن هذا. بالمناسبة ، ظهر بالفعل عدد من التعديلات على المحول - مع إدخال التكرار ( المحولات العالمية ) ، وتعديل التسلسلات الأطول ( Transformer-XL ) وغيرها ، ولكن حتى الآن يتم استخدام محول أصلي تم ضبطه قليلاً في Google و OpenAI.
أتذكر أن BERT من Google تعلمت بشكل مختلف بعض الشيء: ألا تتنبأ بالكلمة التالية في الجملة ، ولكن بالكلمات المفقودة (المقنعة) في الجملة. وأيضًا لتحديد ما إذا كانت الجملتان المتتابعتان تمثل استمرارًا منطقيًا لبعضهما البعض ، أو ما إذا كانت لا ترتبط بأي حال بالمعنى. سمح هذا ليكون BERT نموذج اللغة الذي يفهم معنى الكلمات اعتمادا على بيئتها (السياق). التي تحدد نجاح بيرت في مهام NPL. ولكن فقط بعد إعادة التدريب (الضبط الدقيق) لمهمة محددة. مجرد التنبؤ بالكلمات في النموذج الأساسي لا يعمل جيدًا فيه. يمكنك اللعب مع BERT في متصفحك (عبر Google Colab): https://habr.com/en/post/436878 .
GPT-2 ليست ضرورية لإعادة التدريب. هذا ليس مجرد نموذج لغة مثل بيرت ، بل هو مولد نص. فقط أعطها بداية العبارة ، ثم ستكمل كلمتها بكلمة.
تفصيل مثير للاهتمام: أظهرت أبحاث OpenAI أن صفيف نصوص ويكيبيديا والكتب الأدبية (التي درسها بيرت بشكل خاص) لها أسلوب متحيز. لذلك ، المدربين فقط عليها الشبكات العصبية لا تولد النص بشكل جيد للغاية. لتنويع بيانات وأنماط الإدخال ، استخدم OpenAI GPT-2 للتدريب على صفحات الويب العادية التي تم جمعها من 8 ملايين موقع (أي ما مجموعه 40 جيجابايت من النص). ومن أجل تجاهل مواقع الإعلان ومرسلي البريد العشوائي ، تم تضمينها في نماذج المواقع التي تتمتع روابطها في reddit بتصنيف جيد. أي المواقع التي وجد المستخدمون المباشرون أنها تحتوي على بعض المعلومات المفيدة.
السؤال الصحيح يحتوي على نصف الجواب.
لذلك ، تمكنت GPT-2 ، بفضل حجمها غير المسبوق ، من إنشاء صفحات من النص المتماسك. لكن الأمر الأكثر إثارة للدهشة هو أنها بسؤالها السؤال الصحيح (أي بداية العبارة الصحيحة) ، كانت قادرة على الإجابة على أسئلة مختلفة! فقط لأن استمرار هذه البداية هو الأكثر طبيعية.
على سبيل المثال ، للحصول على إجابة على السؤال "ما هي الأرض؟" ، يمكنك تطبيق إدخال هذه الشبكة العصبية على بداية العبارة: "الأرض هي ...". وستكمل هذه العبارة حتى النهاية. لأن الجواب سيكون استمرار طبيعي لهذه البداية.
علاوة على ذلك ، من خلال تشكيل بداية العبارة بالطريقة الصحيحة ، يمكنك الحصول على تفسيرات للجماهير المستهدفة المختلفة ، مع مراعاة ذكائهم وعمرهم وتعليمهم. تخيل العبارات المستمرة: "أنا ، كعالم ، أعتقد أن الأرض ...". أو ، "أنا ، كحراثة أرض ، ادعي أن الأرض ...". أو: "كمدرس في رياض الأطفال ، سأشرح لك الآن ، يا أطفال ، أن الأرض ...".
كما ترون ، من خلال تشكيل الأسئلة الصحيحة (البداية الصحيحة للعبارة) ، يمكنك الحصول على إجابات بمستويات مختلفة تمامًا وتفاصيل مختلفة. بطريقة ما ، يحدث شيء مشابه في الناس. يجب أن يشرح الطبيب للمريض مسار المرض حتى يفهمه. على مستوى المريض. إذا سألت طفلاً في الخامسة من عمره عن سبب قيامه بذلك ، فعندئذ لا يستطيع الإجابة على الفور (وهو ، بطبيعة الحال ، يعيش الأطفال بمشاعر وعواطف). ولكن من أجل إعطاء الإجابة المتوقعة منه ، يبدأ الطفل في ابتكارها - لإنشاء نص. بناءً على حقيقة أن الجواب يناسب الوالد وأنه على الأقل بطريقة ما يتوافق مع ما حدث. في البداية ، كما يعلم الكثير من الآباء ، ستكون هذه إجابات سخيفة. ولكن من خلال تشجيع ومعاقبة ("أخبرني أكثر" ، "لا تأتي مع الأعذار") ، سيتعلم الطفل إعطاء إجابات مفصلة وكاملة.
هذا التطور لـ OpenAI وقدرة شبكة GPT-2 على تقديم إجابات لمهام المحادثة دون تدريب إضافي خاص لمهمة محددة ، افتح سؤالين مهمين:
1) يمكن أن يتحقق التفسير من الشبكات العصبية من قبل هذا مولد النص الأولي والبداية الصحيحة لهذه العبارة. حيث سيكون الجواب امتدادا طبيعيا. لنفترض ، على سبيل المثال ، أن الشبكة العصبية لا تشير إلى الأختام الموجودة في الصورة بأرقام الإحداثيات س ص ، لكنها تشرح موضعها في نص عادي. ثم ، أثناء التوضيح ، أسألها السؤال الصحيح ، على سبيل المثال: "لقد توصلت إلى هذا الاستنتاج لأن ..." ، يمكنك من الناحية النظرية الحصول على شرح لكيفية عثورها على القطة في الصورة. وهذا التفسير في الحالة القصوى لا يمكن أن يكون أسوأ من الإنسان. مما يحل المشكلة العالمية المتمثلة في تفسير الشبكات العصبية.
2) هل يمكن أن تكون الشبكة العصبية المدربة مسبقًا على كميات كبيرة من النص عالمية ، ولديها الحس السليم ولا تتطلب تدريبًا إضافيًا لمهام محددة. هذا يعني أنه عند محاولة تقليد الكلام البشري (الإجابات البشرية على الأسئلة) ، يجب أن تتعلم الشبكة العصبية حتماً الفطرة السليمة لإعطاءها نفس الإجابات الإنسانية. إن إعطاء إجابات وهمية أحادية الاتجاه ، بشكل عام ، ليس شيئًا عاديًا بالنسبة للناس. بالنسبة للجزء الأكبر ، يعطي الناس إجابات كافية مفصلة ، مما يعني أن الشبكة يجب أن تعلم أن تفعل الشيء نفسه.
يظل كلا هذين السؤالين مفتوحين ، لكن الخطوة الأولى في موافقتهما قد اتخذت بالتأكيد.
أو بالأحرى؟
إذا كنت تقف الآن ، فمن الأفضل أن تجلس. لأن هذه هي الطريقة التي حصل بها OpenAI باستخدام الشبكة العصبية GPT-2 على نتائج محادثة للمجالات المختلفة:
إجابات على الأسئلة في النص
حسنًا ، هذا سهل. أو قم بتغذية الشبكة ببضع فقرات مع وصف تم تضمينه في مكان ما في الوسط ، على سبيل المثال ، "التفاحة مطروحة على الطاولة" ، وفي النهاية تم نسبتها: "التفاحة قيد التشغيل ..." وتمت إضافة الشبكة إلى "الجدول". لأنه قادر على تذكر سياق عدة فقرات.
أو قم بتغذية الشبكة ككلمة أولية بعض الأمثلة من النوع "سؤال: سؤال ، جواب: إجابة" ، وفي النهاية بعد السؤال الحقيقي أضافوا: "إجابة:". وألقت الشبكة العصبية الجواب! لأنه كشف عن بنية المستند على السؤال السابق - الإجابة. هذا مذهل
نسخة قصيرة (تلخيص) النص
المدخلات عبارة عن نص طويل من عدة فقرات أو حتى صفحات ، ويجب على الشبكة العصبية كتابة محتوى قصير. كيف حصلت على هذا السلوك من GPT-2؟ بعد النص مباشرة أضافوا "TL ؛ DR". وهذا كل شيء! اتضح أن هذا يكفي ل GPT-2 لإضافة ملخص للمقال بعد هذه الشخصيات! لأن مثل هذه الرموز على الإنترنت غالبا ما تشير إلى ملخص المنشور.
ترجمة النص
تلقى إدخال GPT-2 النص في النموذج: "hello = hello، dog = dog، wind = wind، cat = ...". وأضافت الشبكة العصبية ترجمة الكلمة الأخيرة: "قطة" (بالأصل بالفرنسية). لأنها كشفت بنية المستند واستكملت ببساطة مع استمرار الأكثر منطقية. إذا لم يزل فكك من كل هذا ، عندها لدي خبران لك ، وكلاهما سيئ =).
إطلاق GPT-2 عبر Google Colab
لسوء الحظ ، تم رفض مشاركة الإصدار الكامل من GPT-2 في OpenAI. تحفيز هذا من خلال حقيقة أن استخدام هذه الشبكة العصبية سيكون من السهل للغاية توليد أخبار وهمية ومراجعات في المتاجر. واستنادا إلى بيانهم ، فإن مناقشة مدى ملاءمة وضع هذا النموذج سوف تستمر لمدة 6 أشهر المقبلة ، في أعقاب OpenAI سوف يقررون ما إذا كان سيتم رفعه أم لا. ومع ذلك ، بالنسبة لمؤسسة كبيرة ، ليس من الصعب تكرار النموذج (يبدو أنهم قاموا بتدريبه على 256 TPU لعدة أيام ، ووفقًا للتقديرات الأولية ، كلفتهم حوالي 45 ألف دولار)
ومع ذلك ، فقد نشروا نسخة مخفضة من GPT-2 مع 117 مليون معلمة (بدلاً من 1.5 مليار ، كما في النموذج الكامل): https://github.com/openai/gpt-2 . دعونا نحاول تشغيله واللعب مع هذا النموذج.
تحديث 9 تشرين الثاني (نوفمبر) 2019: أخيرًا ، تم وضع مجموعة النماذج بالكامل ، بما في ذلك 1.5 مليار. تم تحديث الملفات والتعليمات الخاصة بالإطلاق.
أسهل طريقة للقيام بذلك هي عبر Google Colab:
- افتح الرابط
http://colab.research.google.com/github/blade1780/bert/blob/master/Gpt-2.ipynb
- من قائمة " وقت التشغيل " ، حدد " تشغيل الكل" ، بحيث يتم توصيل التنزيلات النموذجية والمكتبات الضرورية للمرة الأولى لأول مرة بدء تشغيل جميع الخلايا. توافق على إعادة تعيين جميع وقت التشغيل إذا لزم الأمر. أدخل النص بعد ظهور "نموذج المطالبة >>>" واضغط على Enter.
انتبه إلى الخط في البداية:
model_name = '117M'
يمكنك هنا تحديد حجم طراز GPT-2 الذي يجب استخدامه. النماذج التالية متوفرة (قابلة للتحديث):
117M
124M
355 م
774 م
1558 م
هنا ، 117M هو أصغر نموذج كان الوحيد المتاح في وقت كتابة هذا التقرير. وضعت OpenAI في وقت لاحق نماذج متزايدة باستمرار ، حتى 5 نوفمبر 2019 ، وضعت أقصى 1558M (مع 1.5 مليار المعلمات).
إذا حدث خطأ ما ...تأكد من تحديد GPU و Python 3 في قائمة وقت التشغيل -> تغيير نوع وقت التشغيل
إذا لم يكن زر الاتصال نشطًا ، فانقر فوقه ليصبح متصلًا.
أو قم بإنشاء كل الشفرة يدويًا:
- انتقل إلى https://colab.research.google.com
- اضغط على الزر NEW PYTHON 3 NOTEBOOK
- من قائمة وقت التشغيل -> تغيير نوع وقت التشغيل ، حدد Python 3 و GPU (الأخير لتشغيل الشبكة العصبية على GPU)
- في الخلية الأولى ، اكتب:
model_name = '117M' !git clone https://github.com/openai/gpt-2 %cd gpt-2 !pip3 install -r requirements.txt !python3 download_model.py $model_name
بدلاً من 117M (الأصغر) ، يمكنك تحديد أي طراز وسيط أو أكبر: 1558M.
وانقر على أيقونة Play السوداء على يسار الخلية. سيؤدي ذلك إلى تنزيل الشبكة العصبية GPT-2 المحددة وتثبيت التبعيات اللازمة.
في الخلية الثانية (يمكنك إضافتها من خلال القائمة إدراج -> رمز الخلية أو عن طريق تمرير الماوس أسفل مركز الخلية الحالية ، ستظهر أزرار الإضافة):
!python3 src/interactive_conditional_samples.py --model_name=$model_name
سيطلق هذا الوضع التفاعلي. انتظر حتى ترتفع الشبكة العصبية وتظهر نافذة لإدخال النص مع الكتابة "" موجه النموذج >>> ". أدخل بداية العبارة واضغط على إدخال. بعد فترة ، يظهر النص الذي تم إنشاؤه تحت عنوان SAMPLE.
يمكنك أيضًا بدء وضع توليد نص عشوائي تمامًا. سيتم إنشاء النص إلى ما لا نهاية في أجزاء صغيرة من SAMPLE 1 و SAMPLE 2 وما إلى ذلك ، حتى تقوم بالنقر فوق الزر "إيقاف" في الخلية. للقيام بذلك ، قم بإنشاء خلية جديدة بالكود:
!python3 src/generate_unconditional_samples.py --model_name=$model_name | tee samples.txt
سيتم حفظ النتيجة في ملف samples.txt. يمكن تنزيله باستخدام الأوامر التالية (إنشاء خلية جديدة مرة أخرى وتشغيلها بعد إنشاء النص):
from google.colab import files files.download('samples.txt')
يمكنك تغيير المعلمات لإنشاء نص (معامل العشوائية ، وما إلى ذلك ، راجع الوصف في العمل الأصلي ):
!python3 src/generate_unconditional_samples.py --model_name=$model_name --top_k 40 --temperature 0.7 | tee samples.txt
نظرًا لأن طراز 117M هو نموذج تم تقليله بدرجة كبيرة ، فلا تتوقع حدوث معجزات منه (التحديث: في وقت كتابة هذا التقرير ، كان متاحًا فقط ، والآن أصبح كل شيء متاحًا ، بما في ذلك أكبر 1558 مليون نسخة أصلية ، انظر أعلاه). معظم العينات التي تم إنشاؤها ستكون هراء. ولكن هناك أيضا أقسام ذات مغزى. يجب أن يكون النص باللغة الإنجليزية ، بينما بلغات GPT-2 غير قادرة على العمل بلغات أخرى.
أمثلة للنص الناتج
أمثلة للنص الذي تم إنشاؤه بواسطة النموذج الكامل : https://blog.openai.com/better-language-models/#sample1 (في الجزء العلوي من الشريط لـ 8 قصص).
هناك أيضًا ملف نصي ضخم بحجم 2.4 ميجا بايت مع نماذج تم إنشاؤها عشوائيًا: https://raw.githubusercontent.com/openai/gpt-2/master/gpt2-samples.txt
وآخر ، 2.27 ميغابايت ، مع إعدادات عشوائية أخرى: https://raw.githubusercontent.com/openai/gpt-2/master/gpt2-topk40-samples.txt
المراجع