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

1. مقدمة

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

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

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

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

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

ملاحظة: أنّ هذا الدرس التطبيقي حول الترميز يستخدم تنفيذ KerasNLP لـ Gemma والإصدار الثاني من TensorFlow للخلفية. ننصحك بشدة باستخدام نواة وحدة معالجة رسومات للمتابعة.

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

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

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

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

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

تتضمن طرق البروز الأكثر تقدمًا المستندة إلى التدرج Grad ⋅ Insert والتدرجات المدمجة. وهناك أيضًا طرق تعتمد على الاستعمال، مثل 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.8.0) وlit-nlp (1.1) وحساب Kaggle لتنزيل النموذج الأساسي.

!pip install -q -U lit-nlp
!pip uninstall -y umap-learn
!pip install -q -U keras-nlp
!pip install -q -U keras

وصول Kaggle

لتسجيل الدخول إلى Kaggle، يمكنك إما تخزين ملف بيانات اعتماد kaggle.json على ~/.kaggle/kaggle.json أو تشغيل ما يلي في بيئة Colab. راجِع مستندات حزمة kagglehub للحصول على مزيد من التفاصيل.

import kagglehub

kagglehub.login()

تأكَّد أيضًا من قبول اتفاقية ترخيص Gemma.

4. جارٍ إعداد نماذج LIT

import os

os.environ["KERAS_BACKEND"] = "tensorflow"
import keras
import keras_nlp

# Run at half precision.
keras.config.set_floatx("bfloat16")
model_name = 'gemma_instruct_2b_en'
gemma_model = keras_nlp.models.GemmaCausalLM.from_preset(model_name)

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

from lit_nlp.examples.models import instrumented_keras_lms

batch_size = 1
max_sequence_length = 512
init_models = instrumented_keras_lms.initialize_model_group_for_salience
models = init_models(model_name, gemma_model,
                     batch_size=batch_size,
                     max_length=max_sequence_length)

5- إعداد مجموعات بيانات LIT

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

  • prompt: إدخال KerasGenerationModel
  • target: تسلسل هدف اختياري، مثل "حقيقة فعلية" (المستوى الذهبي) أو إجابة تم إنشاؤها مسبقًا من النموذج.

تضم LIT مجموعة صغيرة من sample_prompts مع أمثلة من بضعة مصادر مختلفة، مثل:

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

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

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

from lit_nlp.examples.datasets import lm as lm_data

datasets = {
  'sample_prompts': lm_data.PromptExamples(
      lm_data.PromptExamples.SAMPLE_DATA_PATH
  ),
}

6- إعداد واجهة مستخدم LIT

LIT هي أداة تفاعلية لفهم النماذج التي تتيح تقييم سلوك النموذج واستقصاءه داخل كل حلقة. وتُسهّل واجهة مستخدم LIT هذا التفاعل من خلال تمكينك من:

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

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

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

from lit_nlp.api import layout
modules = layout.LitModuleName

LM_SALIENCE_LAYOUT = layout.LitCanonicalLayout(
    left={
        'Data Table': [modules.DataTableModule],
        'Datapoint Editor': [modules.DatapointEditorModule],
    },
    upper={  # if 'lower' not specified, this fills the right side
        'Salience': [modules.LMSalienceModule],
    },
    layoutSettings=layout.LayoutSettings(leftWidth=40),
    description='Custom layout for language model salience.',
)

يقوم هذا الرمز بتهيئة خادم LIT. قد تستغرق العملية بضع ثوانٍ، حيث تُشغِّل أيضًا النموذج على نماذج الطلبات وتخزِّن النتيجة مؤقتًا.

from lit_nlp import notebook as lit_notebook

lit_widget = lit_notebook.LitWidget(
    models=models,
    datasets=datasets,
    layouts={'default': LM_SALIENCE_LAYOUT},
    default_layout='default',
)

يمكنك الآن إظهار واجهة المستخدم:

lit_widget.render(height=800)

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

يمكنك أيضًا فتح LIT كصفحة كاملة في علامة تبويب جديدة. قم بتشغيل هذه التعليمة البرمجية وانقر فوق الرابط الذي يعرضه:

lit_widget.render(open_in_new_tab=True)

ملاحظة: إذا كنت تستخدم LIT في نص برمجي عادي في .py، استخدِم lit_nlp.dev_server.Server() بدلاً من LitWidget لإنشاء خادم مستقل. لمزيد من التفاصيل، يمكنك الاطّلاع على مستندات LIT.

7. تحليل بضع طلبات من Gemma في LIT

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

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

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

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

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".

8. استخدام إبراز التسلسل لتصحيح الأخطاء

يتم احتساب درجة الأهمية على أصغر مستوى ممكن (أي لكل رمز إدخال مميّز)، إلا أنّ خدمة 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.

في وحدة "LM Salience"، اختَر "الجُمل". ثم اختَر سطر التوصية. من المفترض أن تظهر واجهة المستخدم الآن على النحو التالي:

LIT برّاق

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

لنصحح الآن "التوصية" في المثال الأول على 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.

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

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

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

تتيح لك 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.

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

LIT برّاق

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

10. إشراك الفرق غير التقنية في استقصاء النماذج واستكشافها

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

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

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

11. ملخّص

باختصار:

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

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

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