اعتدنا التضخيم الإعلامي (hype) للشركات التقنية، وبالذات شركات الذكاء الاصطناعي، ولكنه من شركة OpenAI فاق الكثير من أقرانها، فكل منتج يخرج منها يصاحبه صخب إعلامي قد يصل إلى الإزعاج لمن يتابع المجال، ويتبعها في ذلك شركات مثل جووجل وفيسبوك (الآن ميتا). قد تكون هذه الهبّات التسويقية مفيدة لتحسين صورة تلك الشركات، ولكنها قد تسبب لبس للمتلقي غير المختص في فهم التقنيات التي تُروَّج وقد يعتقد -بالإيحاء- أنها أكثر تقدماً مما هي فعلاً عليه. وآخر هذه الضجات الإعلامية إطلاق المنتج ChatGPT، الذي لم تخبت أخباره والمواضيع عنه حتى الآن.

حقيقة لا أحب أن أكتب في المواضيع التي يتم تضخيمها إعلامياً، ولكن ما صاحب الإعلان عن نموذج ChatGPT من شركة OpenAI فاق الحد، لأنه طغى على أخبار مجال الذكاء الاصطناعي لفترة طويلة. ومع كثرة الادعاءات والتوقعات الخاطئة النابعة عن عدم فهم كيف يعمل النموذج رأيت أن أكتب هذا الموضوع لتوضيح ذلك. ولا أنفي أن الكثير من نتائج النموذج مبهرة، ولكن المبالغة قد تفسد حقيقة الإنجاز. وأود التنبيه أنه بالرغم من عملي المحدود مع النماذج اللغوية إلا أن اختصاصي في تعلم الآلة ليس في النماذج اللغوية الضخمة مثل التي بني عليها هذا النموذج، لهذا أخذ مني كتابة هذا الموضوع وقتاً لقراءة الأبحاث المتعلقة بالموضوع تحرياً للدقة ولأخذ المعلومات من مصدرها مباشرة تلافياً لأي تحريف نابع عن عدم فهم كتّاب المقالات عن الموضوع، وسأضع رابط كل بحث وشرح في موضعه لمن أراد الاستزادة والدخول في التفاصيل التقنية.

الهدف من هذا الموضوع أن يكون سهل الفهم لغير المختص في المجال، وأن يوضح كيف تعمل هذه التقنية بالفعل بدون أي تضخيم إعلامي يشوه الفهم لحقيقتها كي يستطيع القارئ الحكم بنفسه على بعض المزاعم والادعاءات ولو لدرجة معينة، وكما قيل: الحكم على الشيء فرع من تصوره. وسيتكون من جزئين، الجزء الأول تقني موضوعي ويتناول شرح التقنيات، والثاني لنقاش بعض المواضيع والأسئلة المثارة حول التقنية وتداعياتها.

سيكون هذا الجزء بالتدرج من العام إلى الخاص، حيث سنبدأ بفهم النماذج اللغوية ونبني عليها خطوة خطوة إلى أن نصل إلى الخورزميات التي بُني عليها النموذج ChatGPT، ثم ملخص سريع لفهم الصورة كاملة ووضع كل لبنة في مكانها.

ما هي النماذج اللغوية؟

إذا أردنا أن نفهم ظاهرة ما في العلوم مثل الطقس نحتاج أن نعرف كل التفاصيل المتعلقة بها، وغالباً ما يكون هذا الأمر متعذر لشدة تعقيد النظام والظاهرة تحت الدراسة. لهذا يتم عادة عمل نموذج مقارب لها يختزل بعض الأمور ولكن يمثل الظاهرة في جوهرها. غالباً قد سمعت عن نماذج إحصائية أو اقتصادية، وهي بنفس المعنى تحاول أن تلتقط صلب الموضوع الجاري تحليله.

نفس الشيء ينطبق على نماذج تعلم الآلة التي تحاول التقاط جوهر المجال الذي دُرِّبت عليه من خلال بيانات التدريب. فمثلاً إذا دربنا نموذج لتوقع أسعار المنازل من عدة مدخلات كالموقع والمساحة وعدد الغرف وغيرها، نحاول عن طريق هذا النموذج التوصل إلى معادلة تحاكي الواقع في تقييم أسعار المنازل، والمحاكاة هنا تقريب وليست طبق الواقع. وكذلك إذا أردنا أن ندرب نموذج ليتعرف على وجود طائر في صورة يكون الهدف الوصول إلى نموذج يستخلص جوهر الخصائص المميزة للطائر في الصورة. وعلى نفس المنوال النماذج اللغوية (Language Models). النموذج اللغوي هو توزيع احتمالي لسلسلة من الكلمات. يستخدم النموذج اللغوي تعلم الآلة لحساب توزيع احتمالي للكلمات، وذلك للتنبؤ بالكلمة التالية الأكثر احتمالاً في الجملة بناءً على المدخل السابق. يمكن استخدام النموذج اللغوي أساساً لعدد من المهام المختلفة القائمة على اللغة، كالتعرف على الكلام المنطوق وتوليد النصوص والترجمة الآلية واسترجاع المعلومات والتلخيص الآلي للنصوص والإجابة على الأسئلة.

لتدريب نموذج لغوي نحتاج إلى وضع مهام تجعله يتعلم1 تمثيلًا لمجال معين. أحد المهام الشائعة في النمذجة اللغوية هي إكمال كلمة مفقودة في الجملة، قد تكون في بدايتها أو وسطها أو آخرها (وهو ما يستخدم في نموذج GPT-3). من خلال هذه المهام التدريبية وغيرها يتعلم نموذج اللغة كيفية ترميز الكلمات والفقرات ومعانيها.

تنقسم خوارزميات تدريب نماذج اللغة إلى مجموعتين أساسيتين:

  1. نماذج اللغة الإحصائية
  2. نماذج اللغة العصبية

ما يهمنا في هذا الموضوع هي نماذج اللغة العصبية المبنية باستخدام الشبكات العصبية ومعماريات التعلم العميق (من خوارزميات مجال تعلم الآلة). هذه الشبكات تتيح تدريب نماذج لغوية ضخمة وفائقة التعقيد، خاصةً بعد ظهور المعماريات الحديثة، أهمها معمارية المحولات (Transformers) التي بُني نموذج GPT-3 باستخدامها، وهي موضوعنا التالي.

نموذج المحولات Transformer

نشر فريق من أبحاث جووجل بحث المحولات نهاية عام 2017م، وقد أحدث أثراً كبيراً في أبحاث معالجة اللغات الطبيعية وبُنِي عليه نماذج كثيرة، منها نماذج GPT.

تمتاز معمارية المحولات بقدرتها على استخلاص الأنماط والتعرف عليها في السلاسل الطويلة من البيانات والتعامل مع مجموعات بيانات ضخمة. وقد أدخلت المحولات تحسينات مهمة على خوارزميات سابقة كانت تُستَخدم لمثل هذه المهام، من أهم التحسينات استخدام الانتباه الذاتي (self-attention) -وسنأتي لها قريباً- وتمكين التدريب الموزع، وهذا أتاح إمكانية تدريب النماذج على بيانات ضخمة بوقت أقل بكثير من السابق.

القدرة على تدريب النماذج على بيانات هائلة خرج لنا بنماذج فائقة الضخامة مدربة على مواضيع كثيرة، نطلق على مثل هذه النماذج: النماذج اللغوية الضخمة (Large Language Models) وتختصر بـ LLM. أكبر قيمة للنماذج اللغوية الضخمة المدربة على مواضيع عامة هي أنها يمكن أن تكون الأساس لمهام أخرى تعتمد على اللغة مثل الإجابة على الأسئلة أو تحليل المشاعر أو تلخيص النصوص أو الترجمة الآلية. نسطيع بتكييف نموذج لغوي ضخم من خلال استخدام مجموعات بيانات مختلفة وتعديل هدف التدريب أن ندرب نماذج مخصصة بكلفة أقل بكثير مما لو بدأنا بتدريبها من الصفر وببيانات أقل. يُعرف تكييف نموذج لغوي ضخم لمهمة محددة باسم إعادة التدريب (fine tuning).

يتطلب إعادة التدريب بيانات خاصة بالمهمة التي نريد أن يتكيف معها النموذج. على سبيل المثال، لإعادة تدريب النموذج لمهمة الإجابة على الأسئلة سنحتاج إلى مجموعة بيانات من أزواج أسئلة وأجوبتها. غالبًا ما يكون إنشاء هذه البيانات وترتيبها يدويًا، وهي عملية مكلفة للغاية. ولكن إعادة تدريب نموذج لغوي عام يتطلب بيانات أقل بكثير مما لو دُرِّب نموذج الإجابة على الأسئلة من الصفر.

تستخدم نماذج المحولات آلية الانتباه الذاتي (self-attention) لحساب علاقة الكلمات مع بعضها في السلسلة (هنا الجملة) الواحدة، وهذا يفيد في حل إشكالية معرفة إحالة الضمائر على سبيل المثال، أو معرفة معنى كلمة تحتمل عدة معان من خلال السياق الذي وردت فيه، كما هو موضح في الشكل التالي الذي يعرض مدى ارتباط كل كلمة بالكلمات الأخرى في نفس الجملة. هذه الآلية مهمة جداً، وهي سبب في مقدرة النموذج على الخروج بجمل مترابطة إلى حد كبير.

في بحث المحولات الأساسي استُخدمت معمارية تتكون من مُرَمِز-مفكك ترميز (Encoder-Decoder)، وبعدها اقتُرحت الكثير من التحسينات أو التعديلات على نفس المعمارية مثل النماذج T5 و BART و BigBird أو باستخدام المُرَمِز فقط مثل النماذج BERT و RoBERTa و ALBERT أو مفكك الترميز فقط مثل النماذج GPT و GPT-2 و GPT-3، وهي موضوعنا التالي.

المعمارية الأساسية للمحولات. المصدر: Attention Is All You Need

لقراءة المزيد عن المحولات:

نموذج GPT-3

يأتي اسم معمارية GPT-3 من Generative Pre-trained Transformer، وتعني المحولات التوليدية المدربة مسبقاً، ومعمارية النموذج هي نفس معمارية النموذج السابق له GPT-2 باستثناء تعديل مستوحى من النموذج Sparse Transformer. وتستخدم المعمارية فقط جزء مفكك الترميز (decoder) في المحولات، ويُطلق على طبيعة عمل النموذج Autoregressive لأن آلية عمله تعتمد على استخدام آخر مخرج مدخلاً للخطوة التي بعده، وحيث أن النموذج مولِّد لغوي فهو يستخدم آخر كلمة تم توليدها كمدخل للنموذج -مع سابقتها من الكلمات- لتوقع الكلمة التالية الأكثر ملائمة حسب السياق.

كما شرحت في الفصل السابق نستطيع أن نستفيد من النماذج اللغوية الضخمة عن طريق إعادة تدريبها على مهام محددة. لكن عملية إعادة التدريب قد تكون مكلفة، خاصة إذا تطلبت جمع بيانات كثيرة وذلك يحتاج لوقت وجهد كبيرين. أحد الطرق الممكنة لمعالجة هذه المشكلة هو تعلم عملية التعلم (meta-learning) والذي يعني في سياق نماذج اللغة أن النموذج يطور مجموعة واسعة من المهارات وقدرات التعرف على الأنماط في وقت التدريب (training) ثم يستخدم تلك القدرات في وقت الاستدلال (inference) ليتعرف بسرعة على المهمة المطلوبة ويتكيف معها. وقد سبق أن نُشِر بحث لعمل ذلك من خلال ما يطلق عليه التعلم في السياق (in-context learning)، عن طريق إدخال أمر يحتوي على مواصفات المهمة المطلوبة لنموذج اللغة الضخم. يستشف النموذج المهمة المطلوبة من خلال التعليمات المدخلة و/أو عرض عدد قليل من النماذج التوضيحية للمهمة، ويتوقع منه بعد ذلك إكمال المزيد من المهام المماثلة للمدخلات التوضيحية. ولأن التعلم في السياق يحتاج لاستيعاب العديد من المهارات والمهام، فالنموذج الذي يتمكن من ذلك يفترض أن يكون ضخماً جداً. فالفرضية هنا أنه كلما زاد حجم النموذج زادت قدرته على التعلم في السياق، وهي الفرضية الأساسية التي قام عليها النموذج GPT-3.

الطريقة المعتادة في النماذج اللغوية الضخمة أن يتم تدريب نموذج لغوي ضخم ثم إعادة تدريبه (fine tuning) لكل مهمة من خلال مجموعة بيانات محددة. فلتدريب نموذج لمهمات مثل التلخيص الآلي أو الترجمة الآلية أو الإجابة على الأسئلة نحتاج أن نعيد تدريب النموذج اللغوي الضخم عن طريق مجموعات بيانات أعدت خصيصاً لكل مهمة. الهدف من مشروع GPT-3 هو تدريب نموذج لغوي ضخم (أكبر بعشر مرات من أي نموذج لغوي سابق في حينه) ويكون محايداً من ناحية المهام (Task Agnostic) وقابلاً للتعلم من خلال أمثلة قليلة (Few-shot Learning). يعني هذا أننا لا نحتاج لإعادة تدريب النموذج لكل مهمة لغوية، ولكن نستطيع أن نعطيه عدة أمثلة للمهمة المطلوبة ثم طلب مهمة مشابهة، ويكون ذلك عن طريق إرسال نص يحتوي على الأمثلة والطلب كمدخل واحد. وقد اختُبِر النموذج على العديد من المهام وتبين تفوق هذه الطريقة في بعض المهام أو تساويها مع الأسلوب السابق والمكلف من إعادة التدريب لكل مهمة، كما تبين صعوبة تنفيذ بعض المهام. وكان اختبار النموذج بثلاث طرق: عن طريق إرسال الأمر لأداء المهمة بدون أي مثال ويطلق على ذلك (zero-shot)، وعن طريق إرسال الأمر مع مثال واحد (one-shot)، وعن طريق إرسال الأمر مع عدة أمثلة (few-shot).

يحتوي النموذج GPT-3 على 175 مليار مُعامل (parameters)، وهي الأوزان في الشبكات العصبية. هذا العدد في حينه -وحتى الآن- يعتبر ضخماً للغاية. ودُرِّب النموذج باستخدام حاسب خارق بنته مايكروسوفت يحتوي على أكثر من 285000 وحدة معالجة مركزية CPU و 10000 وحدة معالجة رسومية GPU. وبلغت الكلفة التقديرية لتدريب النموذج نحو 4.6 مليون دولار. واستُخدِمَت بيانات ضخمة لتدريب النموذج مسحوبة من مواقع الإنترنت وبعض مواقع الكتب.

أُصدِرت عدة تحسينات على النموذج GPT-3 بعد إطلاقه، وكذلك أُنتجت نماذج مختلفة عن طريق إعادة تدريب النموذج باستخدام مجموعات بيانات محددة، وتجدر هنا الإشارة إلى النموذج Codex الخاص بالأكواد البرمجية، وهو الموضوع التالي.

لقراءة المزيد عن نموذج GPT-3:

نموذج Codex

بُني النموذج Codex عن طريق إعادة تدريب نموذج GPT-3 باستخدام البيانات المتاحة على موقع GitHub، وتحديداً أكواد لغة بايثون. وأُتيح منتج مشتق منه للمطورين باشتراك شهري على موقع GitHub وهو GitHub Copilot.

المهمة الأساسية للنموذج إنشاء دوال (functions) للغة بايثون من خلال النص المكتوب في الملاحظات البرمجية التي تصف الدالة (docstring)، وتُقَيَّم صحة الأكواد المنشأة تلقائياً من خلال اختبارات الوحدة (unit tests). وقد أُعيد تدريب نموذج GPT-3 مكون من 12 مليار معامل (parameter) باستخدام بيانات الأكواد البرمجية المأخوذة من موقع GitHub لإنتاج النموذج Codex.

جُمِعَت مجموعة بيانات التدريب في شهر مايو 2020 من 54 مليون مستودع برامج مستضافة على GitHub تحتوي على 179 جيجابايت من ملفات Python الفريدة التي يقل حجمها عن 1 ميجابايت. بعد التصفية من خلال عدة معايير بلغ حجم مجموعة البيانات النهائية 159 غيغابايت.

كانت النتائج المنشورة في البحث مشجعة، وقد طُور إلى عدة لغات برمجية في المنتج Copilot، وكثير من المبرمجين يستخدمونه حالياً لتوفير وقت كتابة الدوال البرمجية، خاصة شائعة الاستخدام.

من الاختبارات التي أجريب في البحث تبين أن النموذج Codex قد يوصي بكود غير صحيح أو غير مُعرّف من الناحية التركيبية، ويمكن أن يستدعي دوال ومتغيرات وسمات غير معرّفة أو خارج نطاق قاعدة الكود. إضافة إلى ذلك، يواجه النموذج صعوبة عند تحليل مواصفات طويلة أو عالية المستوى. ويمكن أن يخطئ في ربط العمليات بالمتغيرات، خاصة عندما يكون عدد العمليات والمتغيرات في سلسلة docstring كبيراً.

عرض لعمل النموذج Codex، المصدر

لقراءة المزيد عن نموذج Codex:

نموذج InstructGPT

سأشرح هنا النموذج InstructGPT، فهم هذا النموذج مهم لمعرفة كيف يعمل نموذج ChatGPT لهذا سأفصل في شرحه.

الهدف من النموذج وطريقة عمله

الهدف للعديد من النماذج اللغوية الضخمة -ومنها GPT-3- هو توقع الكلمة التالية من نص غالباً ما يكون من الإنترنت، وهذا يختلف عن هدف “اتباع تعليمات المستخدم بشكل مفيد وآمن”. وغالبًا ما تحتوي مخرجات هذه النماذج على محتوى غير ملائم كاختلاق الحقائق أو إنشاء نص متحيز أو ضار أو عدم اتباع تعليمات المستخدم، وبالتالي نقول إن هدف النمذجة اللغوية هنا غير متوائم (misaligned).

يهدف بحث InstructGPT إلى إيجاد وسيلة لمواءمة نماذج اللغة مع نية المستخدم (user intent) لمجموعة واسعة من المهام من خلال إعادة تدريب تلك النماذج باستخدام أمثلة مكونة من ردود فعل بشرية. وقد استُخدِمَت طريقة تسمى بـ التعلم المعزز من ردود الفعل البشرية (Reinforcement Learning from Human Feedback) أو اختصاراً RLHF لإعادة تدريب GPT-3 للإجابة على فئة واسعة من الأوامر المكتوبة. تستخدم هذه الطريقة التفضيلات البشرية كإشارة مكافأة لإعادة تدريب النموذج. يعمل هذا الإجراء على موائمة سلوك GPT-3 مع التفضيلات المحددة من قِبَل مجموعة معينة من الأشخاص (معظمهم من المُصنِّفين والباحثين لدى شركة OpenAI) بدلاً من “القيم الإنسانية” بمعناها الواسع.

ولتطوير نماذج لغوية متوائمة مع حاجة المستخدم ينبغي أن تستجيب للأوامر وفقًا لنواياه. لهذا الصدد وُضِعَ إطار عمل يُعرِّف النماذج بأنها متوائمة إذا كانت مفيدة (helpful) وصادقة (honest) وغير ضارة (harmless):

  • مفيدة (helpful): المقصود بمفيد، أن المخرجات يجب أن تتبع نية المستخدم وتساعده في حل مهمته أو الإجابة عن أسئلته أو أوامره، وذلك بأن يستنتج النية من الأمر والأمثلة الإيضاحية أو أي نمط آخر يمكن تفسيره مثل “س: {سؤال}.
  • صادقة (honest): المقصود بالصدق أن المخرجات تحتوي على معلومات دقيقة ولا تضلل المستخدم. من غير الواضح كيفية قياس الصدق في النماذج التوليدية البحتة لأنه يتطلب مقارنة المُخرج الفعلي للنموذج بـ “اعتقاده” بشأن المُخرج الصحيح، وبما أن النموذج عبارة عن صندوق أسود كبير، فلا يمكن استنتاج معتقداته. بدلاً من ذلك، تم قياس المصداقية (truthfulness) -بصرف النظر عما إذا كانت عبارات النموذج حول العالم صحيحة- باستخدام مقياسين: (1) تقييم مدى ميل النموذج لاختلاق معلومات عن مهام مجال مغلق ويطلق عليه الهلوسة (hallucinations) و (2) استخدام مجموعة البيانات TruthfulQA. وغني عن القول أن هذا لا يلتقط سوى جزء صغير مما هو المقصود في الواقع بالصدق.
  • غير ضارة (harmless): والمقصود بغير ضارة أنها يجب ألا تسبب ضررًا جسديًا أو نفسيًا أو اجتماعيًا للناس أو ضرراً على البيئة. في معظم الحالات تعتمد الأضرار من نماذج اللغة على كيفية استخدام مخرجاتها في العالم الحقيقي. لذلك استُخدِمَت مجموعة من المعايير الوكيلة (proxy criteria) أكثر تحديداً تهدف إلى التقاط جوانب السلوك في النموذج التي من خلالها قد يكون ضارًا.

لتحسين جودة المخرجات دُرِّب النموذج ليرد بعبارة “ليس لدي تعليق” إذا لم يكن متأكداً من الإجابة. في هذه الحالة ينحو إلى أن يكون صادقاً وغير مفيد بدلاً من يقول الخطأ بثقة.

تدريب النموذج

لتدريب النسخة الأولية من النموذج InstructGPT طُلِب من فريق تجهيز البيانات أن يكتبوا الأوامر بأنفسهم. وذلك بسبب الحاجة إلى مصدر أولي للأوامر ذات طبيعة تعليمات لبدء العملية، ولم يكن من المعتاد إرسال مثل هذه الأوامر إلى نموذج GPT-3 من خلال الواجهة البرمجية.

تتكون مجموعة البيانات بشكل أساسي من أوامر نصية أُرسِلت من المستخدمين إلى واجهة التطبيقات البرمجية لـ OpenAI، خصوصاً من استخدم النسخة المبكرة للنموذج InstructGPT (مُدرب بشكل مُوَجّه على مجموعة جزئية من الأوامر) في واجهة البيئة التجريبية، إضافة إلى الأوامر التي كتبها فريق تجهيز البيانات.

صُنِّفت الحالات الأكثر استخداماً من خلال البيانات المأخوذة من تفاعل المستخدمين مع واجهة التطبيقات البرمجية، وهي (من الورقة البحثية):

  • التوليد (Generation) 45.6٪
  • الأسئلة والأجوبة المفتوحة (Open QA) 12.4٪
  • العصف الذهني (Brainstorming) 11.2٪
  • المحادثة (Chat) 8.4٪
  • إعادة الكتابة (Rewrite) 6.6٪
  • التلخيص (Summarization) 4.2٪
  • التصنيف (Classification) 3.5٪
  • أخرى 3.5٪
  • الأسئلة والأجوبة المغلقة (Closed QA) 2.6٪
  • الاستخراج (Extract) 1.9٪

هذه الحالات شكلت طبيعة بيانات التدريب للموائمة مع نية المستخدم.

البداية كانت بنموذج اللغة GPT-3 المدرب مسبقاً، ومجموعة بيانات التدريب المكونة من الأوامر التي يُراد من النموذج أن ينتج لها مخرجات متوائمة مع المستخدمين وفريق تجهيز البيانات. عملية تدريب النموذج InstructGPT تتكون من ثلاث خطوات أساسية:

الخطوة الأولى: إعادة تدريب مُوَجّه (SFT)
وفيها يتم إعادة تدريب النموذج GPT-3 من خلال بيانات الأوامر والشرح المعدة من فريق تجهيز البيانات باستخدام التعليم المُوَجّه (supervised learning).

الخطوة الثانية: تدريب نموذج المكافأة (Reward Model) (RM)
يتم إعداد مجموعة بيانات من المقارنات بين مخرجات النموذج SFT (المدرب في الخطوة السابقة) بأن ينتج النموذج عدة مخرجات لكل أمر ثم يختار فريق تجهيز البيانات المُخرج الذي يفضلونه. ثم يتم تدريب نموذج المكافأة للتنبؤ بالمخرجات المفضلة للبشر (مُمَثلين بفريق تجهيز البيانات)، ويكون ذلك بالتدريب على استقبال أمر ومُخرج للنموذج SFT ثم إخراج عدد يدل على المكافأة لاستخدامه في التعليم المعزز. هذه الخطوة تقيس جودة المُخرج لهذا الأمر.

الخطوة الثالثة: التعلم المعزز
وفيها يتم تحديث النموذج من خلال خوارزمية Proximal Policy Optimization (PPO) ومُخرَج نموذج المكافأة، وذلك بالطريقة التالية: (1) يُرسل أمر إلى النموذج SFT الذي سيُخرج نتيجة، (2) يُرسل الأمر والنتيجة السابقة إلى النموذج RM ليُخرج المكافأة التي تدل على جودة المخرج (موائمته مع نية المستخدم حسب بيانات التدريب)، (3) يُحدَّث النموذج باستخدام الخوارزمية PPO.

ويمكن تكرار الخطوتين 2 و 3 بشكل مستمر.

توضيح الثلاث خطوات لتدريب النموذج InstructGPT، المصدر

اختبار وتقييم النموذج والنتائج

يُظهر InstructGPT تعميماً واعداً لأداء مهام لم يتم تدريبها عليها فقد وُجِد أنه قادر على اتباع أوامر لمهام تلخيص الأكواد والإجابة على الأسئلة حول الأكواد وفي بعض الأحيان الاستجابة لأوامر بلغات مختلفة على الرغم من أن هذه الأوامر نادرة الوجود في مجموعة بيانات التدريب. في المقابل، يمكن لـ GPT-3 أداء هذه المهام ولكنه يتطلب صياغة الأوامر والتعليمات بطريقة أكثر دقة، ولا يستجيب عادةً لأوامر في المجالات آنفة الذكر. هذه النتيجة مثيرة لأنها تشير إلى أن هذا النموذج قادر على تعميم فكرة اتباع التعليمات، حيث أنه يحتفظ ببعض الموائمة حتى في المهام التي لم يتم تدريبه عليها.

بإمكان InstructGPT تلخيص الأسئلة المتعلقة بالأكواد البرمجية والإجابة عليها بشكل أكثر دقة من GPT-3 على الرغم من أن إجابته ليست دائماً صحيحة تمامًا.

لا يزال InstructGPT يرتكب أخطاء. لإعطاء بعض الأمثلة (من الورقة البحثية):

  1. عند إعطاء تعليمات مع فرضية خاطئة يفترض النموذج أحيانًا بشكل غير صحيح أن الفرضية صحيحة.
  2. قد يتحوط النموذج بشكل مفرط. فقد يرد أحياناً عند توجيه سؤال بسيط أنه لا توجد إجابة واحدة للسؤال ويعطي إجابات متعددة محتملة، حتى عندما تكون هناك إجابة واحدة واضحة من السياق.
  3. يتدهور أداء النموذج عندما تحتوي التعليمات على عدة قيود صريحة (على سبيل المثال “عَدِّد 10 أفلام تم إنتاجها في ثلاثينيات القرن العشرين في فرنسا”) أو عندما تكون القيود صعبة بالنسبة للنماذج اللغوية (على سبيل المثال كتابة ملخص في عدد محدد من الجمل).

لقراءة المزيد عن النموذج InstructGPT:

نموذج ChatGPT

نموذج ChatGPT هو الأخ الشقيق للنموذج InstructGPT كما ذكرت OpenAI في موقعهم، ولم تُنشر أي ورقة بحثية عنه تشرح بالتفصيل كيف تم تدريبه. يعمل النموذج باسلوب المحادثة والحوار، يمكن في هذا الأسلوب الإجابة على أسئلة متتابعة واعتراف النموذج بأخطاءه وتحدي المقدمات والافتراضات غير الصحيحة ورفض الأوامر غير الملائمة.

دُرِّب النموذج باستخدام التعلم المعزز من ردود الفعل البشرية، نفس الطريقة التي دُرِّب فيها النموذج InstructGPT، ولكن بطريقة مختلفة في إعداد بيانات التدريب. قَدّم فريق تجهيز البيانات محادثات لعبوا فيها كلا الجانبين -المستخدم وبرنامج الذكاء الاصطناعي. ثُم مُزِجت مجموعة بيانات الحوار الجديدة هذه مع مجموعة بيانات InstructGPT وحُوِّلت إلى تنسيق حوار.

آلية التدريب لنموذج ChatGPT تشابه آلية النموذج InstructGPT بشكل كبير، والاختلاف الأساسي في بيانات التدريب التي جُمِعَت لتناسب أسلوب الحوار. المصدر

أُعيد تدريب النموذج ChatGPT من نموذج في سلسلة GPT-3.5 التي أنتهى تدريبها أوائل عام 2022م. لم توضح OpenAI أي النماذج من السلسلة استُخدم لتدريب ChatGPT، الصورة التالية توضح النماذج في سلسلة GPT-3.5. يتضح هنا أن النماذج مُدربة على النصوص والأكواد، لهذا تكون إجاباتها جيدة في شرح الأكواد البرمجية.

نماذج GPT-3.5. المصدر

حدود النموذج (من صفحة النموذج):

  • يكتب ChatGPT أحيانًا إجابات تبدو في ظاهرها أنها معقولة ولكنها غير صحيحة أو لا معنى لها.
  • النموذج ChatGPT حساس للتعديلات على صياغة الأوامر أو محاولة نفس الأمر عدة مرات. على سبيل المثال، بالنظر إلى أحد صياغات الأمر يمكن للنموذج أن يدّعي أنه لا يعرف الإجابة، ولكن مع إعادة صياغة بسيطة يمكنه الإجابة بشكل صحيح.
  • غالبًا ما يكون النموذج مسهباً بشكل مفرط ويكثر من استخدام عبارات معينة، مثل إعادة التأكيد على أنه نموذج لغوي تم تدريبه بواسطة OpenAI.
  • من الناحية المثالية قد يطرح النموذج أسئلة توضيحية عندما يقدم المستخدم أمراً غامضًا. بدلاً من ذلك عادةً ما يُخمن النموذج ما يقصده المستخدم.
  • سوف يستجيب النموذج أحيانًا لأوامر ضارة أو يُظهر سلوكًا متحيزًا. تستخدم OpenAI واجهة تطبيقات برمجية لمراقبة الأومر والتحذير من أو حظر أنواع معينة من المحتوى غير الآمن.

تتبع OpenAI طريقة نشر تكرارية (Iterative deployment) لنماذجها، ومن ضمنها هذا النموذج، تعرف فيها المشكلات المتعلقة بالأمان والمحتوى الضار وغير الصحيح وتُحدَّث النماذج بناء عليها بطريقة تكرارية. ويتم معرفة المشكلات المحتملة عن طريق النسخة التجريبية المجانية المفتوحة للجميع، وترحب OpenAI بالملاحظات لتحسين النموذج.

لقراءة المزيد عن النموذج ChatGPT:

كامل الصورة

من المذهل أن يكون الأساس الذي قام عليه نموذج لغوي بهذا الأداء هو هدف توقع الكلمة التالية لسلسلة من الكلمات! هذه هي الحقيقة أسفل غطاء النموذج ChatGPT كما شرحت ذلك في الفصول السابقة.

من خلال ما سبق اتضح أن هذا النموذج عبارة عن نموذج لغوي ضخم أُنشئ عن طريق إعادة تدريب نموذج لغوي ضخم آخر هو GPT-3 المبني باستخدام معمارية المحولات. واستُخدمت خوارزمية مهمتها موائمة مخرجات النموذج لنية المستخدم وحاجته وهي InstructGPT. ومن القدرات المميزة للنموذج ChatGPT تحليله للأكواد، وهي أحد قدرات نماذج GPT-3.5 التي دُرب عليها النموذج، وشرحت كيفية تدريب نماذج اللغة لمهام الأكواد من خلال النموذج Codex.

يكمن سبب الأداء المبهر للنموذج وقوته في ثلاثة أمور أساسية:

  • استخدام بيانات ضخمة جداً: تخيل الكم الهائل من المعلومات المتضمنة في البيانات التي دُرب باستخدامها النموذج، وتتكون من مواقع إنترنت وكتب تغطي كل ما يخطر على بالك من معلومات وأخبار ووصفات طبخ وخطوات أداء أعمال وكتابة وتحليل الأكواد البرمجية… وغيرها.
  • تعلم السياق من خلال آلية الانتباه في معمارية المحولات: تعلم السياق مع بيانات هائلة تعطي إمكانية فائقة لتوليد النصوص لأوامر تغطي مجالات واسعة، ويُتعرف على السياق من خلال الكلمات التي يتضمنها الأمر المرسل.
  • وصول OpenAI إلى تفاعل المستخدمين: فهم المستخدمين ومعرفة المهام التي يستخدمون فيها نماذج OpenAI المنشورة مثل CoPilot للأكواد و GPT-3 بإصداراتها المختلفة والنسخة المبكرة من InstructGPT. هذا الوصول أتاح لهم معرفة الحالات الأكثر استخداماً كما وضحت ذلك في فصل InstructGPT. ويعني هذا أن أغلب أنماط الأوامر التي ترسل إلى ChatGPT مُتوقعة وأُخذت في الحسبان أثناء إعداد بيانات التدريب وتدريب واختبار النموذج. إضافة إلى التحسين المستمر للنموذج من النسخة المجانية المتاحة للجميع.

فهمك لآلية عمل النموذج يجعلك تستوعب قدراته وحدوده بشكل أفضل ويتيح لك الحكم على العديد من الادعاءات التي تسمعها في القنوات الإخبارية ووسائل التواصل الاجتماعي.

لا تزال هناك عدة مواضيع وأسئلة لم أتحدث عنها، وحيث أن في طبيعة الإجابة عنها شيء من الرأي آثرت أن أجعلها في جزء آخر وأن أُبقي هذا الجزء موضوعياً قدر الإمكان، وسأنشر الجزء الثاني لاحقاً إن شاء الله.


ملاحظات

  1. التعلم هنا مجازي، التعلم يهدف إلى الخروج بنموذج كما سبق شرحه وليس تعلم مثل البشر.