Использование LIT для анализа моделей Gemma в Keras

1. Введение

Продукты генеративного искусственного интеллекта относительно новы, и поведение приложения может отличаться от более ранних форм программного обеспечения. Это делает важным исследовать используемые модели машинного обучения, изучать примеры поведения моделей и исследовать сюрпризы.

Learning Interpretability Tool (LIT; веб-сайт , GitHub ) — это платформа для отладки и анализа моделей ML, чтобы понять, почему и как они ведут себя именно так.

В этой лаборатории вы узнаете, как использовать LIT, чтобы получить больше от модели Google Gemma . В этой кодовой лаборатории показано, как использовать значимость последовательностей, метод интерпретируемости, для анализа различных подходов к быстрому проектированию.

Цели обучения:

  1. Понимание значимости последовательностей и ее использования в анализе моделей.
  2. Настройка LIT для Gemma для расчета результатов подсказок и значимости последовательности.
  3. Использование значимости последовательности с помощью модуля LM Salience, чтобы понять влияние дизайна подсказок на выходные данные модели.
  4. Тестирование предполагаемых быстрых улучшений в LIT и оценка их влияния.

Обратите внимание: в этой кодовой лаборатории используется реализация Gemma KerasNLP и 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.json ;
  • Используйте переменные среды KAGGLE_USERNAME и KAGGLE_KEY ; или
  • Запустите следующее в интерактивной среде Python, например Google Colab.
import kagglehub

kagglehub.login()

Дополнительную информацию см. в документации kagglehub и обязательно примите лицензионное соглашение Gemma .

Настройка Кераса

Keras 3 поддерживает несколько серверов глубокого обучения , включая Tensorflow (по умолчанию), PyTorch и JAX. Бэкэнд настраивается с использованием переменной среды KERAS_BACKEND , которую необходимо установить перед импортом библиотеки Keras. В следующем фрагменте кода показано, как установить эту переменную в интерактивной среде Python.

import os

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

4. Настройка ЛИТ

LIT можно использовать в блокнотах Python или через веб-сервер. В этой 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 : список строк, содержащих имена моделей и пути для загрузки, например «модель:путь», где путь может быть 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 ( пример ), либо в любом формате с помощью API набора данных LIT.

Запустите ячейку ниже, чтобы загрузить примеры подсказок.

5. Анализ нескольких подсказок о съемках для Джеммы в LIT

Сегодня подсказки — это не только наука, но и искусство, и LIT может помочь вам эмпирически улучшить подсказки для больших языковых моделей, таких как Gemma. Далее вы увидите пример того, как LIT можно использовать для изучения поведения Джеммы, прогнозирования потенциальных проблем и повышения ее безопасности.

Выявляйте ошибки в сложных подсказках

Двумя наиболее важными методами подсказок для высококачественных прототипов и приложений на основе 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. Используйте значимость последовательности для отладки

Значимость вычисляется на минимально возможном уровне (т. е. для каждого входного токена), но 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 выберите «Предложения», а затем выберите строку рекомендаций. Пользовательский интерфейс теперь должен выглядеть следующим образом:

ЛИТ Значимость

Это подчеркивает человеческую ошибку: случайное копирование и вставка части рекомендаций и невозможность ее обновления!

Теперь давайте исправим «Рекомендацию» в первом примере на 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. Привлекайте нетехнические группы к исследованию и исследованию моделей.

Интерпретируемость — это коллективная работа, охватывающая опыт XAI, политики, права и т. д.

Взаимодействие с моделями на ранних стадиях разработки традиционно требовало значительных технических знаний, что затрудняло доступ к ним и их проверку некоторыми сотрудниками. Исторически не существовало инструментов, позволяющих этим командам участвовать на ранних этапах прототипирования.

Есть надежда, что благодаря LIT эта парадигма может измениться. Как вы видели из этой кодовой лаборатории, визуальная среда LIT и интерактивная способность исследовать значимость и исследовать примеры могут помочь различным заинтересованным сторонам делиться и сообщать результаты. Это позволит вам привлечь более широкий круг участников команды для исследования, проверки и отладки модели. Знакомство с этими техническими методами может улучшить их понимание того, как работают модели. Кроме того, более разнообразный опыт раннего тестирования моделей также может помочь выявить нежелательные результаты, которые можно улучшить.

9. Подведение итогов

Подведем итоги:

  • Пользовательский интерфейс LIT предоставляет интерфейс для интерактивного выполнения модели, позволяя пользователям напрямую генерировать выходные данные и тестировать сценарии «что, если». Это особенно полезно для тестирования различных вариантов приглашений.
  • Модуль LM Salience обеспечивает визуальное представление значимости и обеспечивает контролируемую детализацию данных, поэтому вы можете общаться о конструкциях, ориентированных на человека (например, предложениях и словах), а не о конструкциях, ориентированных на модели (например, токенах).

Если вы обнаружите проблемные примеры при оценке модели, перенесите их в LIT для отладки. Начните с анализа самой крупной разумной единицы контента, которую вы можете себе представить и которая логически связана с задачей моделирования, используйте визуализации, чтобы увидеть, где модель правильно или неправильно реагирует на подсказку, а затем переходите к более мелким единицам контента для дальнейшего опишите неправильное поведение, которое вы наблюдаете, чтобы определить возможные исправления.

И наконец: освещение постоянно улучшается! Узнайте больше о наших функциях и поделитесь своими предложениями здесь .