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

الاطّلاع على معلومات عن الذكاء الاصطناعي التوليدي التشغيل في Google Colab الاطّلاع على المصدر على GitHub التعلّم في الدروس التطبيقية حول الترميز

مقدمة

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

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

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

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

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

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

سهولة التسلسل واستخداماتها في تحليل النموذج

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

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

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

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

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

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

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.

إعداد LIT لـ Gemma

إعداد طُرز 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 لدعم البروز على نموذج جيما. يشير إطار عمل 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)

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

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

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

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

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

يمكنك أيضًا تحميل بياناتك بسهولة، إمّا كملف .jsonl يحتوي على سجلّات تتضمّن الحقول prompt ويمكنك اختياريًا تحميل target ([example][jsonl-example])، أو من أيّ تنسيق باستخدام 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
  ),
}

إعداد واجهة مستخدم 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)
<IPython.core.display.Javascript object>

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

lit_widget.render(open_in_new_tab=True)
<IPython.core.display.Javascript object>

تحليل عدد قليل من طلبات اللقطات لـ "جيما" في LIT

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

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

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

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

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.

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

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

لنبدأ بإعطاء المطالبة مثالاً جديدًا على إدخال لمتغيرات نموذج المطالبة:

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 لإضافة هذا الطلب:

1_Datapoint_editor.png

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

lit_widget.render(data=[fewshot_mistake_example])
<IPython.core.display.Javascript object>

لاحظ اكتمال النموذج المدهش:

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، حدد "الجُمل" ثم حدِّد سطر التوصية. يُفترض أن تظهر واجهة المستخدم الآن على النحو التالي:

3_few_shots_mistake..png

لنصحح الآن "الاقتراح" في المثال الأول إلى 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')}])
<IPython.core.display.Javascript object>

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

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.

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

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

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

تتيح لك أداة 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')}])
<IPython.core.display.Javascript object>

من خلال هذا التعديل، يمكن إعادة تشغيل المثال وملاحظة نتيجة مختلفة جدًا:

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

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

3_few_shot_constitution.png

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

إشراك الفِرق غير الفنية في اختبارات النماذج واستكشافها

تهدف ميزة "الترجمة والشرح" إلى بذل الجهود من أجل بذل أي جهد جماعي، وتوسيع نطاق الخبرات في مجالَي XAI والسياسة والقانون وغيرها.

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

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

ملخّص

باختصار:

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

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

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

الملحق: كيفية استخدام LIT لإجراء عمليات حسابية بمهارة

تحسب LIT مدى بروز التسلسل في عملية متعددة الخطوات.

  1. استنادًا إلى سلسلة إدخال (طلب وإنشاء النموذج أو تسلسل هدف "المستوى الذهبي")، يمكنك إنشاء رمز مميّز لإدخال النموذج.
  2. احسب تسلسل "الهدف" من خلال لف الرموز المميزة للإدخال في موضع واحد إلى اليمين.
  3. استخرِج التضمينات لـ وحساب الخسارة حسب الرمز المميز بين الإنشاء وتسلسلات "الهدف".
  4. قم بإخفاء الخسارة لعزل الرموز المميزة التي ترغب في شرحها.
  5. استخدِم الدالة tf.GradientTape.gradient() لحساب تدرج إدخالات المدخلات مع مراعاة الخسارة المقنَّعة.
  6. معالجة التدرجات للحصول على درجة واحدة لكل رمز إدخال مميز. على سبيل المثال، من خلال أخذ معيار L2 للتدرج في كل موضع.

الملحق: احتساب المرونة بشكل آلي

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

  1. حضِّر مثالاً وشغِّل أداة إنشاء الرمز المميز للنموذج،
  2. جهز القناع الذي يحدد الرموز المميزة (المتوقعة) التي يجب شرحها،
  3. استدعِ برنامج تضمين البروز.

تقديم مثال على LIT

{'prompt': 'Keras is a',
 'target': ' deep learning library for Python that provides a wide range of tools and functionalities for building, training, and evaluating deep learning models.\n\n**'}

ملاحظة بشأن اصطلاحات طلب البيانات: يستخدم كل من برنامج الترميز المميّز وبرنامج تضمين المحتوى Model API في LIT، حيث تأخذ الدالة .predict() قائمة بالأمثلة (الإملاء) وتعرض منشئ الردود (القوانين). هذه الطريقة أكثر مرونة عند العمل على مجموعات بيانات أكبر أو نماذج أبطأ، ولكن إذا كنت تريد الاطّلاع على توقّعات على أحد الأمثلة، عليك الآن إضافة عبارات مثل: list(model.predict([example])[0]

الحصول على الرموز المميّزة لتتمكّن من اختيار أهداف الشرح

array(['<bos>', 'K', 'eras', '▁is', '▁a', '▁deep', '▁learning',
       '▁library', '▁for', '▁Python', '▁that', '▁provides', '▁a', '▁wide',
       '▁range', '▁of', '▁tools', '▁and', '▁functionalities', '▁for',
       '▁building', ',', '▁training', ',', '▁and', '▁evaluating', '▁deep',
       '▁learning', '▁models', '.', '\n\n', '**'], dtype='<U16')

لحساب التميّز، يلزمك إنشاء قناع هدف يحدد الرموز المميزة (المتوقعة) المراد شرحها. سيكون القناع المستهدف مصفوفة بنفس طول الرموز المميزة، مع وضع الرقم 1 في مواضع الرموز المميزة التي تريد شرحها. لنستخدم ▁training و▁evaluating كهدف لنا:

تحضير القناع المستهدف

{'prompt': 'Keras is a',
 'target': ' deep learning library for Python that provides a wide range of tools and functionalities for building, training, and evaluating deep learning models.\n\n**',
 'target_mask': array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0., 0., 0., 0., 1., 1., 1., 1., 0., 0., 0., 0., 0., 0.],
       dtype=float32)}

استدعاء نموذج البروز

{'grad_l2': array([45.75, 36.75, 61, 5.40625, 4.09375, 5.625, 6.46875, 7.3125, 3.375,
        5.03125, 3.23438, 4.5625, 2.375, 3.40625, 2.75, 1.97656, 3.95312,
        3.42188, 14.125, 4.53125, 11.375, 12.625, 18.5, 4.5625, 6.5, 0, 0,
        0, 0, 0, 0, 0], dtype=bfloat16),
 'grad_dot_input': array([-4.03125, 3.04688, -7.03125, -0.800781, 0.769531, -0.679688,
        -0.304688, 2.04688, 0.275391, -1.25781, -0.376953, -0.0664062,
        -0.0405273, -0.357422, 0.355469, -0.145508, -0.333984, 0.0181885,
        -5.0625, 0.235352, -0.470703, 2.25, 3.90625, -0.199219, 0.929688,
        0, 0, 0, 0, 0, 0, 0], dtype=bfloat16),
 'tokens': array(['<bos>', 'K', 'eras', '▁is', '▁a', '▁deep', '▁learning',
        '▁library', '▁for', '▁Python', '▁that', '▁provides', '▁a', '▁wide',
        '▁range', '▁of', '▁tools', '▁and', '▁functionalities', '▁for',
        '▁building', ',', '▁training', ',', '▁and', '▁evaluating', '▁deep',
        '▁learning', '▁models', '.', '\n\n', '**'], dtype='<U16')}

وهذا كل ما في الأمر! تمت محاذاة النتائج في الحقلين grad_l2 وgrad_dot_input مع tokens، وهي مماثلة للنتائج التي تظهر في واجهة مستخدم LIT.

تجدر الإشارة إلى أنّ الدرجات القليلة الأخيرة هي 0: نظرًا لأن النموذج الذي نستخدمه نموذج لغوي من اليسار إلى اليمين، فإن الرموز المميزة على يمين النطاق المستهدف لا تؤثر على التنبؤ.