استخدام تقنية LIT لتحليل نماذج جيما في Keras

1. مقدمة

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

أداة تفسير التعلّم (LIT) (الموقع الإلكتروني، GitHub) هي منصة لتصحيح أخطاء نماذج تعلُّم الآلة وتحليلها لفهم سبب سلوكها وطريقة سلوكها.

في هذا الدليل التعليمي حول رموز البرامج، ستتعرّف على كيفية استخدام LIT للاستفادة إلى أقصى حد من نموذج Gemma من Google. يوضّح هذا الدليل التعليمي كيفية استخدام ميزة "تمييز التسلسل"، وهي تقنية لتفسير البيانات، لتحليل أساليب مختلفة لتصميم الطلبات.

أهداف التعلّم:

  1. فهم مدى بروز التسلسل واستخداماته في تحليل النماذج
  2. إعداد LIT لـ Gemma لاحتساب نتائج الطلبات وتمييز التسلسل
  3. استخدام ميزة "تمييز التسلسل" من خلال وحدة تمييز النموذج اللغوي لفهم تأثير تصميمات الطلبات على نواتج النماذج
  4. اختبار التحسينات المقترَحة على الطلبات في LIT والاطّلاع على تأثيرها

ملاحظة: يستخدم هذا الدليل التعليمي تنفيذ KerasNLP لخدمة Gemma، وTensorFlow v2 للخلفية. ننصحك بشدة باستخدام نواة وحدة معالجة الرسومات لمتابعة الخطوات.

عرض توضيحي لواجهة مستخدم LIT

2. مدى بروز التسلسل واستخداماته في تحليل النماذج

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

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

ستستخدم هنا طريقة Grad L2 Norm لتمييز التسلسل، والتي تحلّل منحدرات النموذج وتوفّر مقدارًا للتأثير الذي يتركه كل رمز سابق في الإخراج. هذه الطريقة بسيطة وفعّالة، وقد تبيّن أنّها تحقّق أداءً جيدًا في التصنيف والإعدادات الأخرى. وكلما زادت نتيجة الوضوح، زاد التأثير. يتم استخدام هذه الطريقة في إطار LIT لأنّها مفهومة جيدًا ويتم استخدامها على نطاق واسع في مجتمع الأبحاث المتعلّقة بقابلية التفسير.

تشمل طرق تمييز العناصر الأكثر تقدمًا المستندة إلى التدرّج Grad ⋅ Input والتدرّجات المدمجة. تتوفّر أيضًا طرق مستندة إلى الاستبعاد، مثل LIME وSHAP، والتي يمكن أن تكون أكثر فعالية ولكنّها أكثر تكلفة من حيث الحساب. يمكنك الرجوع إلى هذه المقالة للاطّلاع على مقارنة تفصيلية بين طرق تحديد العناصر البارزة المختلفة.

يمكنك الاطّلاع على مزيد من المعلومات حول علم طرق الظهور الواضح في هذه التفاعلية التمهيدية القابلة للاستكشاف حول الظهور الواضح.

3- عمليات الاستيراد والبيئة ورمز الإعداد الآخر

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

ملاحظة: قد تظهر لك بعض التحذيرات من هذا النوع

ERROR: pip's dependency resolver does not currently take into account all the
packages that are installed. This behaviour is the source of the following
dependency conflicts. bigframes 0.21.0 requires scikit-learn>=1.2.2, but you
have scikit-learn 1.0.2 which is incompatible. google-colab 1.0.0 requires
ipython==7.34.0, but you have ipython 8.14.0 which is incompatible.

يمكنك تجاهل هذه الرسائل بأمان.

تثبيت LIT وKeras NLP

في هذا الدليل التعليمي حول رموز البرامج، ستحتاج إلى إصدار حديث من keras (3) وkeras-nlp (0.14.) وlit-nlp (1.2)، وحساب على Kaggle لتنزيل النموذج الأساسي.

pip install -q -U 'keras >= 3.0' 'keras-nlp >= 0.14' 'lit-nlp >= 1.2'

الوصول إلى Kaggle

للمصادقة باستخدام Kaggle، يمكنك اتّباع إحدى الخطوتَين التاليتَين:

  • تخزين بيانات الاعتماد في ملف، مثل ~/.kaggle/kaggle.json
  • استخدام متغيرَي البيئة KAGGLE_USERNAME وKAGGLE_KEY
  • شغِّل ما يلي في بيئة تفاعلية لبرنامج Python، مثل Google Colab.
import kagglehub

kagglehub.login()

اطّلِع على مستندات kagglehub لمعرفة المزيد من التفاصيل، واحرص على قبول اتفاقية ترخيص Gemma.

ضبط Keras

تتوافق Keras 3 مع خلفيات متعددة للتعلم العميق، بما في ذلك Tensorflow (الإعداد التلقائي) وPyTorch وJAX. يتم ضبط الخلفية باستخدام متغيّر البيئة KERAS_BACKEND، والذي يجب ضبطه قبل استيراد مكتبة Keras. يوضّح لك مقتطف الرمز البرمجي التالي كيفية ضبط هذا المتغيّر في بيئة Python تفاعلية.

import os

os.environ["KERAS_BACKEND"] = "tensorflow"  # or "jax" or "torch"

4. إعداد LIT

يمكن استخدام LIT في دفاتر ملاحظات Python أو من خلال خادم ويب. يركز هذا الدليل التعليمي على حالة استخدام "مفكرة"، وننصح بمتابعته في Google Colab.

في هذا الدليل التعليمي حول رموز البرامج، ستحمِّل Gemma v2 2B IT باستخدام الإعداد المُسبَق KerasNLP. تعمل المقتطفة التالية على إعداد Gemma وتحميل مثال على مجموعة بيانات في تطبيق LIT Notebook المصغّر.

from lit_nlp.examples.prompt_debugging import notebook as lit_pdbnb

lit_widget = lit_pdbnb.make_notebook_widget(
    ['sample_prompts'],
    ["gemma2_2b_it:gemma2_instruct_2b_en"],
)

يمكنك ضبط التطبيق المصغّر من خلال تغيير القيم التي يتم تمريرها إلى الوسيطات الثابتة المطلوبة:

  • datasets_config: قائمة بسلاسل تحتوي على أسماء مجموعات البيانات ومسارات التحميل منها، مثل "dataset:path"، حيث يمكن أن يكون المسار عنوان URL أو مسار ملف محلي. يستخدم المثال أدناه القيمة الخاصة sample_prompts لتحميل أمثلة الطلبات المقدَّمة في توزيع LIT.
  • models_config: قائمة بسلاسل تحتوي على أسماء النماذج ومسارات التحميل، مثل "model:path"، حيث يمكن أن يكون المسار عنوان URL أو مسار ملف محلي أو اسم إعداد مُسبَق لإطار عمل التعلّم العميق الذي تم ضبطه.

بعد ضبط LIT لاستخدام النموذج الذي يهمّك، شغِّل مقتطف الرمز التالي لعرض التطبيق المصغّر في "دفتر ملاحظات".

lit_widget.render(open_in_new_tab=True)

استخدام بياناتك الخاصة

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

  • prompt: إدخال النموذج الذي سيتم إنشاء النص منه
  • target: تسلسل استهداف اختياري، مثل ردّ "الحقيقة الأساسية" من المقيّمين البشريين أو ردّ تم إنشاؤه مسبقًا من نموذج آخر

يتضمّن LIT مجموعة صغيرة من sample_prompts مع أمثلة من المصادر التالية التي تتيح استخدام هذا الدليل التعليمي والدليل التعليمي الموسّع لتصحيح الأخطاء في LIT.

  • GSM8K: حلّ المسائل الحسابية في المرحلة الابتدائية باستخدام أمثلة قليلة
  • مقياس أداء Gigaword: إنشاء عناوين لمجموعة من المقالات القصيرة
  • الطلبات الأساسية: إنشاء أفكار جديدة حول كيفية استخدام العناصر مع الإرشادات/الحدود

يمكنك أيضًا تحميل بياناتك بسهولة، إما كملف .jsonl يحتوي على سجلّات تتضمّن الحقلَين prompt وtarget اختياريًا (مثال)، أو من أي تنسيق باستخدام Dataset API في LIT.

شغِّل الخلية أدناه لتحميل نماذج الطلبات.

5- تحليل طلبات Gemma في LIT التي تتضمّن لقطات قليلة

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

تحديد الأخطاء في الطلبات المعقدة

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

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

def analyze_menu_item_template(food_likes, food_dislikes, menu_item):
  return f"""Analyze a menu item in a restaurant.

## For example:

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Onion soup
Analysis: it has cooked onions in it, which you don't like.
Recommendation: You have to try it.

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Baguette maison au levain
Analysis: Home-made leaven bread in france is usually great
Recommendation: Likely good.

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Macaron in france
Analysis: Sweet with many kinds of flavours
Recommendation: You have to try it.

## Now analyze one more example:

Taste-likes: {food_likes}
Taste-dislikes: {food_dislikes}
Suggestion: {menu_item}
Analysis:"""

هل رصدت المشاكل في هذا الطلب؟ ستساعدك أداة LIT في فحص الطلب باستخدام وحدة LM Salience.

6- استخدام ميزة "تمييز التسلسل" لتصحيح الأخطاء

يتم احتساب مدى الظهور على أصغر مستوى ممكن (أي لكل رمز إدخال)، ولكن يمكن أن تُجمِّع LIT مدى ظهور الرموز إلى نطاقات أكبر يمكن تفسيرها بسهولة أكبر، مثل الأسطر أو الجمل أو الكلمات. اطّلِع على مزيد من المعلومات حول مدى الظهور وكيفية استخدامه لتحديد الانحيازات غير المقصودة في ميزة "استكشاف مدى الظهور".

لنبدأ بإضافة مثال جديد لإدخال متغيّرات نموذج الطلب:

food_likes = """Cheese"""
food_dislikes = """Can't eat eggs"""
menu_item = """Quiche Lorraine"""

prompt = analyze_menu_item_template(food_likes, food_dislikes, menu_item)
print(prompt)

fewshot_mistake_example = {'prompt': prompt}  # you'll use this below
Analyze a menu item in a restaurant.

## For example:

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Onion soup
Analysis: it has cooked onions in it, which you don't like.
Recommendation: You have to try it.

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Baguette maison au levain
Analysis: Home-made leaven bread in france is usually great
Recommendation: Likely good.

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Macaron in france
Analysis: Sweet with many kinds of flavours
Recommendation: You have to try it.

## Now analyze one more example:

Taste-likes: Cheese
Taste-dislikes: Can't eat eggs
Suggestion: Quiche Lorraine
Analysis:

إذا كانت واجهة مستخدم LIT مفتوحة في الخلية أعلاه أو في علامة تبويب منفصلة، يمكنك استخدام أداة تعديل نقاط البيانات في LIT لإضافة هذا الطلب:

محرِّر نقاط البيانات في LIT

هناك طريقة أخرى وهي إعادة عرض التطبيق المصغّر مباشرةً باستخدام الطلب المعنيّ:

lit_widget.render(data=[fewshot_mistake_example])

يُرجى ملاحظة اكتمال النموذج بشكل مفاجئ:

Taste-likes: Cheese
Taste-dislikes: Can't eat eggs
Suggestion: Quiche Lorraine
Analysis: A savoury tart with cheese and eggs
Recommendation: You might not like it, but it's worth trying.

لماذا يقترح عليك النموذج تناول طعام ذكرت بوضوح أنّه لا يمكنك تناوله؟

يمكن أن تساعد ميزة "تمييز التسلسل" في إبراز المشكلة الأساسية، والتي تظهر في أمثلة الصور القليلة. في المثال الأول، لا يتطابق منطق سلسلة التفكير في قسم التحليل it has cooked onions in it, which you don't like مع الاقتراح النهائي You have to try it.

في وحدة "أهمية نموذج اللغة"، اختَر "الجمل"، ثمّ اختَر سطر الاقتراح. من المفترض أن تظهر واجهة المستخدم الآن على النحو التالي:

تمييز الإعلانات على شبكة البحث

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

لنصحِّح الآن "الاقتراح" في المثال الأول إلى Avoid، ونحاول مرة أخرى. تم تحميل هذا المثال مسبقًا في LIT ضمن نماذج الطلبات، لذا يمكنك استخدام وظيفة الأداة الصغيرة هذه للحصول عليه:

def get_fewshot_example(source: str) -> str:
  for example in datasets['sample_prompts'].examples:
    if example['source'] == source:
      return example['prompt']
  raise ValueError(f'Source "{source}" not found in the dataset.')

lit_widget.render(data=[{'prompt': get_fewshot_example('fewshot-fixed')}])

يصبح اكتمال النموذج الآن:

Taste-likes: Cheese
Taste-dislikes: Can't eat eggs
Suggestion: Quiche Lorraine
Analysis: This dish contains eggs and cheese, which you don't like.
Recommendation: Avoid.

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

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

7- اختبار الفرضيات لتحسين سلوك النموذج

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

لنستخدم هذه الفكرة للمساعدة في تحسين الطلب بشكلٍ أكبر. أضِف قسمًا يتضمّن مبادئ إنشاء المحتوى في أعلى الطلب الذي يبدأ الآن على النحو التالي:

Analyze a menu item in a restaurant.

* The analysis should be brief and to the point.
* The analysis and recommendation should both be clear about the suitability for someone with a specified dietary restriction.

## For example:

Taste-likes: I've a sweet-tooth
Taste-dislikes: Don't like onions or garlic
Suggestion: Onion soup
Analysis: it has cooked onions in it, which you don't like.
Recommendation: Avoid.

...

lit_widget.render(data=[{'prompt': get_fewshot_example('fewshot-constitution')}])

بعد إجراء هذا التعديل، يمكن إعادة تشغيل المثال ورصد نتيجة مختلفة جدًا:

Taste-likes: Cheese
Taste-dislikes: Can't eat eggs
Suggestion: Quiche Lorraine
Analysis: This dish contains eggs, which you can't eat.
Recommendation: Not suitable for you.

يمكن بعد ذلك إعادة فحص مدى بروز الطلب للمساعدة في التعرّف على سبب حدوث هذا التغيير:

تمييز الإعلانات على شبكة البحث

يُرجى ملاحظة أنّ الاقتراح أكثر أمانًا. بالإضافة إلى ذلك، يستند التقييم "غير مناسب لك" إلى مبدأ تحديد مدى الملاءمة بوضوح وفقًا للقيود الغذائية، إلى جانب التحليل (ما يُعرف بسلسلة التفكير). يساعد ذلك في تعزيز الثقة بأنّ النتيجة تحدث للسبب الصحيح.

8. تضمين فِرق غير فنية في عملية استكشاف النماذج وفحصها

من المفترض أن يكون فهم التفسير جهدًا جماعيًا يشمل خبرة في مجال الذكاء الاصطناعي التفسيري والسياسات والشؤون القانونية وغير ذلك.

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

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

9. ملخّص

باختصار:

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

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

أخيرًا، نعمل باستمرار على تحسين تطبيق Lit. يمكنك الاطّلاع على مزيد من المعلومات حول ميزاتنا ومشاركة اقتراحاتك هنا.