استفاده از LIT برای تجزیه و تحلیل مدل های Gemma در Keras

1. مقدمه

محصولات هوش مصنوعی مولد نسبتا جدید هستند و رفتارهای یک برنامه کاربردی می تواند بیشتر از نرم افزارهای قبلی متفاوت باشد. این امر بررسی مدل‌های یادگیری ماشینی مورد استفاده، بررسی نمونه‌هایی از رفتار مدل و بررسی شگفتی‌ها را مهم می‌سازد.

ابزار تفسیرپذیری یادگیری (LIT؛ وب‌سایت ، GitHub ) بستری برای اشکال‌زدایی و تجزیه و تحلیل مدل‌های ML است تا بفهمیم چرا و چگونه آن‌ها به روشی که انجام می‌دهند رفتار می‌کنند.

در این لبه کد، یاد خواهید گرفت که چگونه از LIT برای استفاده بیشتر از مدل Gemma گوگل استفاده کنید. این آزمایشگاه کد نحوه استفاده از برجستگی توالی، یک تکنیک تفسیرپذیر، برای تجزیه و تحلیل رویکردهای مختلف مهندسی سریع را نشان می دهد.

اهداف آموزشی:

  1. درک برجستگی توالی و کاربردهای آن در تحلیل مدل
  2. راه اندازی LIT برای Gemma برای محاسبه خروجی های سریع و برجستگی توالی.
  3. استفاده از برجستگی توالی از طریق ماژول LM Salience برای درک تأثیر طراحی های سریع بر خروجی های مدل.
  4. آزمایش پیشرفت های فرضی در LIT و مشاهده تأثیر آنها.

توجه: که این کد لبه از پیاده‌سازی KerasNLP Gemma و TensorFlow v2 برای backend استفاده می‌کند. به شدت توصیه می شود از هسته GPU برای پیگیری استفاده کنید.

نسخه ی نمایشی رابط کاربری LIT

2. Sequence Salience و کاربردهای آن در تحلیل مدل

مدل‌های تولیدی متن به متن، مانند جما، دنباله‌ای ورودی را به شکل متن نشانه‌گذاری می‌کنند و توکن‌های جدیدی تولید می‌کنند که دنباله‌ها یا تکمیل‌های معمولی برای آن ورودی هستند. این نسل در یک زمان یک توکن اتفاق می‌افتد و هر توکن جدید تولید شده را (در یک حلقه) به ورودی به اضافه هر نسل قبلی اضافه می‌کند تا زمانی که مدل به وضعیت توقف برسد. مثال‌ها عبارتند از زمانی که مدل یک نشانه پایان دنباله (EOS) تولید می‌کند یا به حداکثر طول از پیش تعریف‌شده می‌رسد.

روش‌های برجسته دسته‌ای از تکنیک‌های هوش مصنوعی (XAI) قابل توضیح هستند که می‌توانند به شما بگویند کدام بخش‌های ورودی برای بخش‌های مختلف خروجی آن برای مدل مهم هستند. LIT از روش‌های برجسته برای انواع وظایف طبقه‌بندی پشتیبانی می‌کند، که تأثیر دنباله‌ای از نشانه‌های ورودی را بر روی برچسب پیش‌بینی‌شده توضیح می‌دهد. Sequence Salience این روش ها را به مدل های تولیدی متن به متن تعمیم می دهد و تأثیر توکن های قبلی را بر توکن های تولید شده توضیح می دهد.

در اینجا از روش Grad L2 Norm برای برجسته‌سازی دنباله استفاده می‌کنید، که گرادیان‌های مدل را تجزیه و تحلیل می‌کند و میزان تأثیری را که هر نشانه قبلی روی خروجی می‌گذارد ارائه می‌کند. این روش ساده و کارآمد است و نشان داده شده است که در طبقه بندی و سایر تنظیمات عملکرد خوبی دارد. هر چه امتیاز برجسته بیشتر باشد، تأثیر آن بیشتر است. این روش در LIT استفاده می شود زیرا به خوبی درک شده و به طور گسترده در جامعه تحقیقاتی تفسیرپذیری مورد استفاده قرار می گیرد.

روش‌های برجستگی مبتنی بر گرادیان پیشرفته‌تر شامل Grad ⋅ Input و گرادیان‌های یکپارچه است. روش‌های مبتنی بر فرسایش نیز در دسترس هستند، مانند LIME و SHAP ، که می‌توانند قوی‌تر باشند، اما محاسبه آنها بسیار گران‌تر است. برای مقایسه دقیق روش های مختلف برجستگی به این مقاله مراجعه کنید.

شما می توانید در این مقدماتی تعاملی قابل کاوش برای برجستگی در مورد علم روش های برجسته بیشتر بیاموزید.

3. واردات، محیط زیست، و کد راه اندازی دیگر

بهتر است با این کد لبه در کولب جدید همراه باشید. توصیه می‌کنیم از زمان اجرا شتاب‌دهنده استفاده کنید، زیرا شما یک مدل را در حافظه بارگذاری می‌کنید، هرچند توجه داشته باشید که گزینه‌های شتاب‌دهنده در طول زمان متفاوت هستند و دارای محدودیت‌هایی هستند. اگر می‌خواهید به شتاب‌دهنده‌های قدرتمندتری دسترسی داشته باشید، Colab اشتراک‌های پولی را ارائه می‌دهد. متناوباً، اگر دستگاه شما دارای GPU مناسب باشد، می توانید از زمان اجرا محلی استفاده کنید.

توجه: ممکن است برخی از هشدارهای فرم را مشاهده کنید

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 استفاده کنید. یا
  • موارد زیر را در یک محیط تعاملی پایتون مانند Google Colab اجرا کنید.
import kagglehub

kagglehub.login()

برای جزئیات بیشتر به مستندات kagglehub مراجعه کنید و حتماً موافقت نامه مجوز Gemma را بپذیرید.

پیکربندی Keras

Keras 3 از چندین پشتیبان یادگیری عمیق ، از جمله Tensorflow (پیش‌فرض)، PyTorch و JAX پشتیبانی می‌کند. پشتیبان با استفاده از متغیر محیطی KERAS_BACKEND پیکربندی شده است، که باید قبل از وارد کردن کتابخانه Keras تنظیم شود. قطعه کد زیر به شما نشان می دهد که چگونه این متغیر را در یک محیط تعاملی پایتون تنظیم کنید.

import os

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

4. راه اندازی LIT

LIT را می توان در نوت بوک های پایتون یا از طریق وب سرور استفاده کرد. این Codelab روی مورد استفاده از Notebook تمرکز دارد، آیا می‌توانیم آن را در Google Colab دنبال کنید.

در این Codelab، 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 : فهرستی از رشته‌ها حاوی نام‌های مجموعه داده و مسیرهایی که می‌توان از آن‌ها بارگیری کرد، به‌عنوان «مجموعه داده: مسیر»، که در آن مسیر می‌تواند یک URL یا یک مسیر فایل محلی باشد. مثال زیر از مقدار ویژه، sample_prompts ، برای بارگیری دستورهای مثال ارائه شده در توزیع LIT استفاده می کند.
  • models_config : فهرستی از رشته‌ها حاوی نام‌های مدل و مسیرهایی که باید از آن‌ها بارگیری شوند، به‌عنوان «model:path»، که در آن مسیر می‌تواند یک URL، یک مسیر فایل محلی، یا نام یک پیش‌تنظیم برای چارچوب یادگیری عمیق پیکربندی‌شده باشد.

هنگامی که LIT را برای استفاده از مدل مورد نظر خود پیکربندی کردید، قطعه کد زیر را اجرا کنید تا ویجت را در نوت بوک خود ارائه دهید.

lit_widget.render(open_in_new_tab=True)

استفاده از داده های خود

Gemma به عنوان یک مدل تولید متن به متن، ورودی متن را می گیرد و خروجی متن را تولید می کند. LIT از یک API نظری برای ارتباط ساختار مجموعه داده های بارگذاری شده به مدل های مدل استفاده می کند. LLM ها در LIT برای کار با مجموعه داده هایی طراحی شده اند که دو فیلد را ارائه می دهند:

  • prompt : ورودی مدلی که متن از آن تولید خواهد شد. و
  • target : یک دنباله هدف اختیاری، مانند پاسخ "حقیقت زمینی" از ارزیاب های انسانی یا پاسخ از پیش تولید شده از مدل دیگر.

LIT شامل مجموعه کوچکی از sample_prompts با مثال‌هایی از منابع زیر است که از این Codelab پشتیبانی می‌کنند و آموزش اشکال‌زدایی سریع LIT.

  • GSM8K : حل مسائل ریاضی دبستان با مثال های چندتایی.
  • Gigaword Benchmark : ایجاد سرفصل برای مجموعه ای از مقالات کوتاه.
  • تشویق قانون اساسی : ایجاد ایده های جدید در مورد نحوه استفاده از اشیاء با دستورالعمل ها / مرزها.

همچنین می‌توانید داده‌های خود را به‌آسانی بارگیری کنید، یا به‌عنوان یک فایل .jsonl حاوی سوابق با فیلدهای prompt و به‌صورت اختیاری target ( مثلا )، یا از هر قالبی با استفاده از LIT's Dataset API .

سلول زیر را اجرا کنید تا اعلان های نمونه بارگیری شوند.

5. تجزیه و تحلیل چند دستور شات برای Gemma در LIT

امروزه، اعلان به همان اندازه که علم است هنر است، و LIT می‌تواند به شما کمک کند تا درخواست‌های مدل‌های زبان بزرگ مانند Gemma را به‌طور تجربی بهبود بخشید. در ادامه، نمونه ای از نحوه استفاده از LIT برای کشف رفتارهای Gemma، پیش بینی مشکلات احتمالی و بهبود ایمنی آن را مشاهده خواهید کرد.

خطاها را در دستورهای پیچیده شناسایی کنید

دو تا از مهم‌ترین تکنیک‌های تحریک برای نمونه‌های اولیه و برنامه‌های مبتنی بر LLM با کیفیت بالا عبارتند از: چند شات (شامل نمونه‌هایی از رفتار مورد نظر در اعلان) و زنجیره‌ای از فکر (شامل شکلی از توضیح یا استدلال قبل از خروجی نهایی). از 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 بررسی کنید.

6. از Sequence Salience برای اشکال زدایی استفاده کنید

برجستگی در کوچکترین سطح ممکن محاسبه می شود (یعنی برای هر نشانه ورودی)، اما LIT می تواند نشانه-برجستگی را در گستره های بزرگتر قابل تفسیرتر، مانند خطوط، جملات، یا کلمات جمع کند. درباره برجستگی و نحوه استفاده از آن برای شناسایی سوگیری های ناخواسته در Saliency Explorable ما بیشتر بیاموزید.

بیایید با دادن یک ورودی نمونه جدید به prompt برای متغیرهای prompt-template شروع کنیم:

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، "Sentences" را انتخاب کنید و سپس خط توصیه را انتخاب کنید. اکنون رابط کاربری باید به شکل زیر باشد:

LIT Salience

این یک خطای انسانی را برجسته می کند: کپی و پیست تصادفی قسمت توصیه و عدم به روز رسانی آن!

اکنون اجازه دهید "توصیه" را در مثال اول برای 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.

درس مهمی که باید از این موضوع گرفت این است: نمونه‌سازی اولیه کمک می‌کند خطراتی را که ممکن است از قبل به آنها فکر نکنید آشکار شود ، و ماهیت مستعد خطا در مدل‌های زبان به این معنی است که فرد باید به طور فعال برای خطاها طراحی کند. بحث بیشتر در این مورد را می توان در کتاب راهنمای People + AI برای طراحی با هوش مصنوعی یافت.

در حالی که دستور چند شات اصلاح شده بهتر است، اما هنوز کاملاً درست نیست: به درستی به کاربر می‌گوید از تخم‌مرغ اجتناب کند، اما استدلال درست نیست، می‌گوید آنها تخم‌مرغ را دوست ندارند، در حالی که در واقع کاربر اعلام کرده است که می‌تواند تخم مرغ نخور در بخش بعدی، خواهید دید که چگونه می توانید بهتر عمل کنید.

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.

برجستگی سریع می‌تواند دوباره مورد بررسی قرار گیرد تا به درک دلیل وقوع این تغییر کمک کند:

LIT Salience

توجه داشته باشید که توصیه بسیار ایمن تر است. علاوه بر این، "برای شما مناسب نیست" تحت تأثیر اصل بیان صریح مناسب بودن با توجه به محدودیت رژیم غذایی، همراه با تجزیه و تحلیل (به اصطلاح زنجیره فکری) است. این کمک می کند تا اطمینان بیشتری حاصل شود که خروجی به دلیل درستی اتفاق می افتد.

8. شامل تیم های غیر فنی در کاوش و اکتشاف مدل

تفسیرپذیری به معنای تلاش گروهی است که شامل تخصص در سراسر XAI، سیاست، حقوقی و غیره است.

تعامل با مدل ها در مراحل اولیه توسعه به طور سنتی به تخصص فنی قابل توجهی نیاز دارد، که دسترسی و بررسی آنها را برای برخی از همکاران دشوارتر می کرد. ابزارسازی از لحاظ تاریخی وجود نداشته است که این تیم ها را قادر سازد در مراحل اولیه نمونه سازی شرکت کنند.

از طریق LIT، امید این است که این پارادایم بتواند تغییر کند. همانطور که از طریق این آزمایشگاه مشاهده کردید، رسانه بصری و توانایی تعاملی LIT برای بررسی برجستگی و کاوش نمونه ها می تواند به سهامداران مختلف کمک کند تا یافته ها را به اشتراک بگذارند و ارتباط برقرار کنند. این می تواند شما را قادر سازد تا تنوع گسترده تری از هم تیمی ها را برای کاوش مدل، بررسی و اشکال زدایی به ارمغان بیاورید. قرار دادن آنها در معرض این روش های فنی می تواند درک آنها را از نحوه کار مدل ها افزایش دهد. علاوه بر این، مجموعه‌ای از تخصص‌های متنوع‌تر در آزمایش‌های اولیه مدل نیز می‌تواند به کشف نتایج نامطلوب که قابل بهبود هستند کمک کند.

9. خلاصه کنید

برای جمع بندی:

  • رابط کاربری LIT یک رابط برای اجرای مدل تعاملی فراهم می‌کند و کاربران را قادر می‌سازد تا خروجی‌ها را مستقیماً تولید کنند و سناریوهای "چه می‌شد اگر" را آزمایش کنند. این به ویژه برای آزمایش تغییرات سریع مختلف مفید است.
  • ماژول LM Salience یک نمایش بصری از برجستگی ارائه می‌کند و جزئیات قابل کنترل داده را فراهم می‌کند تا بتوانید در مورد ساختارهای انسان محور (مانند جملات و کلمات) به جای ساختارهای مدل محور (مانند نشانه‌ها) ارتباط برقرار کنید.

هنگامی که نمونه های مشکل زا در ارزیابی مدل خود پیدا کردید، آنها را برای اشکال زدایی در LIT بیاورید. با تجزیه و تحلیل بزرگترین واحد معقول محتوایی که می‌توانید فکر کنید که به طور منطقی به کار مدل‌سازی مربوط می‌شود، شروع کنید، از تجسم‌ها استفاده کنید تا ببینید مدل به درستی یا نادرست به محتوای فوری توجه می‌کند، و سپس به واحدهای کوچک‌تر محتوا برای ادامه‌ی بیشتر توجه کنید. رفتار نادرستی را که می‌بینید توصیف کنید تا راه‌حل‌های احتمالی را شناسایی کنید.

در نهایت: Lit دائما در حال بهبود است! درباره ویژگی های ما بیشتر بدانید و پیشنهادات خود را در اینجا به اشتراک بگذارید.