Gemma-Modelle in Keras mit LIT analysieren

1. Einführung

Produkte mit generativer KI sind relativ neu und das Verhalten einer Anwendung kann stärker variieren als bei früheren Softwareformen. Daher ist es wichtig, die verwendeten Modelle für maschinelles Lernen zu prüfen, Beispiele für das Verhalten des Modells zu untersuchen und unerwartete Ergebnisse zu untersuchen.

Das Learning Interpretability Tool (LIT; Website, GitHub) ist eine Plattform zum Debuggen und Analysieren von ML-Modellen, um zu verstehen, warum und wie sie sich so verhalten, wie sie es tun.

In diesem Codelab erfahren Sie, wie Sie mit LIT das Gemma-Modell von Google optimal nutzen. In diesem Codelab wird gezeigt, wie Sie mithilfe der Sequenzsalenz, einer Methode zur Interpretierbarkeit, verschiedene Ansätze zur Prompt-Erstellung analysieren.

Lernziele:

  1. Sequenzsalzenz und ihre Verwendung bei der Modellanalyse
  2. LIT für Gemma einrichten, um Prompt-Ausgaben und Sequenzsalenz zu berechnen
  3. Mithilfe der Sequenzsalenz über das Modul LM Salience die Auswirkungen von Prompt-Designs auf die Modellausgaben nachvollziehen.
  4. Hypothesen zu möglichen sofortigen Verbesserungen in LIT testen und ihre Auswirkungen beobachten

Hinweis: In diesem Codelab wird die KerasNLP-Implementierung von Gemma und TensorFlow v2 für das Backend verwendet. Wir empfehlen dringend, einen GPU-Kernel zu verwenden.

LIT-UI-Demo

2. Sequenzsalzenz und ihre Verwendung in der Modellanalyse

Generative Text-zu-Text-Modelle wie Gemma nehmen eine Eingabesequenz in Form von tokenisiertem Text an und generieren neue Tokens, die typische Weiterführungen oder Ergänzungen dieser Eingabe sind. Diese Generierung erfolgt nach und nach. Dabei wird jedes neu generierte Token in einer Schleife an die Eingabe und alle vorherigen Generationen angehängt, bis das Modell eine Endbedingung erreicht. Beispiele hierfür sind, wenn das Modell ein EOS-Token (Ende der Sequenz) generiert oder die vordefinierte maximale Länge erreicht.

Methoden zur Auffälligkeitserkennung sind eine Klasse von Explainable-AI-Techniken (XAI), mit denen Sie feststellen können, welche Teile einer Eingabe für verschiedene Teile der Ausgabe für das Modell wichtig sind. LIT unterstützt Methoden zur Auffälligkeit für eine Vielzahl von Klassifizierungsaufgaben, die die Auswirkungen einer Sequenz von Eingabetokens auf das vorhergesagte Label erklären. Bei der Sequenzsalenz werden diese Methoden auf generative Text-zu-Text-Modelle angewendet und die Auswirkungen der vorangehenden Tokens auf die generierten Tokens erklärt.

Sie verwenden hier die Methode Grad L2 Norm für die Sequenzsalenz. Dabei werden die Gradienten des Modells analysiert und die Stärke des Einflusses jedes vorangehenden Tokens auf die Ausgabe angegeben. Diese Methode ist einfach und effizient und hat sich in der Klassifizierung und anderen Einstellungen bewährt. Je höher der Wert für die Auffälligkeit, desto höher der Einfluss. Diese Methode wird in LIT verwendet, da sie in der Forschungscommunity zur Interpretierbarkeit gut verstanden und weithin genutzt wird.

Zu den erweiterten gradientenbasierten Salienzmethoden gehören Grad ⋅ Eingabe und integrierte Gradienten. Es gibt auch ablationbasierte Methoden wie LIME und SHAP, die robuster, aber deutlich rechenintensiver sind. Einen detaillierten Vergleich verschiedener Methoden zur Bestimmung der Aufmerksamkeit finden Sie in diesem Artikel.

Weitere Informationen zu den Methoden zur Hervorhebung von Inhalten finden Sie in diesem interaktiven explorativen Einführungstool.

3. Importe, Umgebung und anderer Einrichtungscode

Wir empfehlen, dieses Codelab im neuen Colab auszuführen. Wir empfehlen die Verwendung einer Beschleuniger-Laufzeit, da Sie ein Modell in den Arbeitsspeicher laden. Beachten Sie jedoch, dass die Beschleunigeroptionen im Laufe der Zeit variieren und einschränkungen unterliegen. Wenn Sie Zugriff auf leistungsstärkere Beschleuniger benötigen, bietet Colab kostenpflichtige Abos an. Alternativ können Sie eine lokale Laufzeit verwenden, wenn Ihr Computer eine geeignete GPU hat.

Hinweis: Möglicherweise werden Warnungen vom folgenden Typ angezeigt:

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.

Sie können diese ignorieren.

LIT und Keras NLP installieren

Für dieses Codelab benötigen Sie eine aktuelle Version von keras (3), keras-nlp (0.14) und lit-nlp (1.2) sowie ein Kaggle-Konto, um das Basismodell herunterzuladen.

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

Kaggle Access

Sie haben folgende Möglichkeiten, sich bei Kaggle zu authentifizieren:

  • Speichern Sie Ihre Anmeldedaten in einer Datei, z. B. ~/.kaggle/kaggle.json.
  • Verwenden Sie die Umgebungsvariablen KAGGLE_USERNAME und KAGGLE_KEY.
  • Führen Sie den folgenden Code in einer interaktiven Python-Umgebung wie Google Colab aus.
import kagglehub

kagglehub.login()

Weitere Informationen finden Sie in der kagglehub-Dokumentation. Akzeptieren Sie außerdem die Gemma-Lizenzvereinbarung.

Keras konfigurieren

Keras 3 unterstützt mehrere Deep-Learning-Back-Ends, darunter TensorFlow (Standard), PyTorch und JAX. Das Backend wird mit der Umgebungsvariablen KERAS_BACKEND konfiguriert. Diese muss vor dem Importieren der Keras-Bibliothek festgelegt werden. Im folgenden Code-Snippet wird gezeigt, wie Sie diese Variable in einer interaktiven Python-Umgebung festlegen.

import os

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

4. LIT einrichten

LIT kann in Python-Notebooks oder über einen Webserver verwendet werden. In diesem Codelab liegt der Schwerpunkt auf dem Notebook-Anwendungsfall. Wir empfehlen, die Schritte in Google Colab auszuführen.

In diesem Codelab laden Sie Gemma v2 2B IT mit der KerasNLP-Voreinstellung. Im folgenden Snippet wird Gemma initialisiert und ein Beispiel-Dataset in ein LIT Notebook-Widget geladen.

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"],
)

Sie können das Widget konfigurieren, indem Sie die Werte ändern, die an die beiden erforderlichen Positionalparameter übergeben werden:

  • datasets_config: Eine Liste von Strings, die die Namen und Pfade der Datasets zum Laden enthalten, z. B. „dataset:path“, wobei „path“ eine URL oder ein lokaler Dateipfad sein kann. Im folgenden Beispiel wird der spezielle Wert sample_prompts verwendet, um die Beispielprompts aus der LIT-Distribution zu laden.
  • models_config: Eine Liste von Strings mit den Modellnamen und Pfaden, von denen geladen werden soll, als „model:path“. Der Pfad kann eine URL, ein lokaler Dateipfad oder der Name einer Voreinstellung für das konfigurierte Deep-Learning-Framework sein.

Nachdem Sie LIT so konfiguriert haben, dass das gewünschte Modell verwendet wird, führen Sie das folgende Code-Snippet aus, um das Widget in Ihrem Notebook zu rendern.

lit_widget.render(open_in_new_tab=True)

Eigene Daten verwenden

Als generatives Text-zu-Text-Modell nimmt Gemma eine Texteingabe entgegen und generiert eine Textausgabe. LIT verwendet eine voreingenommene API, um die Struktur der geladenen Datensätze an die Modelle zu senden. LLMs in LIT sind für die Arbeit mit Datasets mit zwei Feldern konzipiert:

  • prompt: Die Eingabe für das Modell, aus der Text generiert wird, und
  • target: Eine optionale Zielsequenz, z. B. eine „Ground-Truth“-Antwort von menschlichen Bewertern oder eine vorab generierte Antwort eines anderen Modells.

LIT enthält eine kleine Auswahl von sample_prompts mit Beispielen aus den folgenden Quellen, die dieses Codelab und die erweiterte Anleitung zur Fehlerbehebung von LIT unterstützen.

  • GSM8K: Lösen von Mathematikaufgaben aus der Grundschule mit wenigen Beispielen.
  • Gigaword-Benchmark: Überschriftengenerierung für eine Sammlung kurzer Artikel.
  • Konstitutionelle Aufforderung: Neue Ideen zur Verwendung von Objekten mit Richtlinien/Grenzen entwickeln.

Sie können auch ganz einfach eigene Daten laden, entweder als .jsonl-Datei mit Einträgen mit den Feldern prompt und optional target (Beispiel) oder aus einem beliebigen Format mithilfe der Dataset API von LIT.

Führen Sie die Zelle unten aus, um die Beispielprompts zu laden.

5. Analyse von Prompts mit wenigen Aufnahmen für Gemma in LIT

Heute ist das Erstellen von Prompts sowohl eine Kunst als auch eine Wissenschaft. Mit LIT können Sie Prompts für Large Language Models wie Gemma empirisch verbessern. Im Folgenden sehen Sie ein Beispiel dafür, wie Sie mit LIT das Verhalten von Gemma untersuchen, potenzielle Probleme vorhersehen und die Sicherheit verbessern können.

Fehler in komplexen Prompts erkennen

Zwei der wichtigsten Prompting-Techniken für hochwertige LLM-basierte Prototypen und Anwendungen sind Prompting mit wenigen Beispielen (mit Beispielen für das gewünschte Verhalten im Prompt) und Denkprozess (mit einer Art Erklärung oder Begründung vor der endgültigen Ausgabe des LLM). Das Erstellen eines effektiven Prompts ist jedoch oft immer noch eine Herausforderung.

Angenommen, Sie möchten einer Person helfen, zu beurteilen, ob ihr ein bestimmtes Gericht schmecken wird. Eine erste Vorlage für einen Prototyp-Denkprozess könnte so aussehen:

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

Haben Sie die Probleme mit diesem Designvorschlag erkannt? LIT hilft Ihnen, den Prompt mit dem LM-Salienzmodul zu untersuchen.

6. Sequenzsalenz zur Fehlerbehebung verwenden

Die Salienz wird auf der kleinstmöglichen Ebene berechnet (d. h. für jedes Eingabetoken). Mit LIT kann die Token-Salienz jedoch in größere, besser interpretierbare Bereiche wie Zeilen, Sätze oder Wörter zusammengefasst werden. Weitere Informationen zu Salienz und wie Sie damit unbeabsichtigte Voreingenommenheit erkennen können, finden Sie in unserem Exploreable zu Salienz.

Geben Sie zuerst eine neue Beispieleingabe für die Variablen der Promptvorlage ein:

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:

Wenn Sie die LIT-Benutzeroberfläche in der Zelle oben oder in einem separaten Tab geöffnet haben, können Sie mit dem Datenpunkt-Editor von LIT diesen Prompt hinzufügen:

LIT-Datenpunkt-Editor

Eine weitere Möglichkeit besteht darin, das Widget direkt mit dem gewünschten Prompt neu zu rendern:

lit_widget.render(data=[fewshot_mistake_example])

Beachten Sie die überraschende Modellvervollständigung:

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.

Warum schlägt das Modell vor, etwas zu essen, das Sie ausdrücklich nicht essen können?

Die Sequenzsalenz kann helfen, das Grundproblem zu identifizieren, wie in unseren Few-Shot-Beispielen. Im ersten Beispiel stimmt die Argumentationskette im Analyseabschnitt it has cooked onions in it, which you don't like nicht mit der endgültigen Empfehlung You have to try it überein.

Wählen Sie im Modul „LM Salience“ die Option „Sentences“ (Sätze) und dann die Empfehlungszeile aus. Die Benutzeroberfläche sollte jetzt so aussehen:

LIT-Sichtbarkeit

Dies zeigt einen menschlichen Fehler auf: Der Empfehlungsteil wurde versehentlich kopiert und eingefügt und nicht aktualisiert.

Korrigieren wir jetzt den Wert „Empfehlung“ im ersten Beispiel in Avoid und versuchen es noch einmal. In LIT ist dieses Beispiel in den Beispielprompts vorinstalliert. Sie können es mit dieser kleinen Dienstprogrammfunktion abrufen:

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')}])

Jetzt sieht die Modellfertigstellung so aus:

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.

Eine wichtige Lektion, die wir daraus ziehen können: Frühes Prototyping hilft, Risiken aufzudecken, an die Sie vorher vielleicht nicht gedacht haben. Aufgrund der Fehleranfälligkeit von Sprachmodellen müssen Sie proaktiv auf Fehler reagieren. Weitere Informationen dazu finden Sie in unserem Leitfaden „Mensch + KI“ zum Entwerfen mit KI.

Der korrigierte Prompt für wenige Aufnahmen ist zwar besser, aber noch nicht ganz richtig: Der Nutzer wird zwar richtig aufgefordert, Eier zu vermeiden, aber die Begründung ist nicht richtig. Es wird gesagt, dass er Eier nicht mag, obwohl er tatsächlich angegeben hat, dass er keine Eier essen kann. Im folgenden Abschnitt erfahren Sie, wie Sie das verbessern können.

7. Hypothesen testen, um das Modellverhalten zu verbessern

Mit LIT können Sie Änderungen an Prompts in derselben Benutzeroberfläche testen. In diesem Fall testen Sie, ob das Hinzufügen einer Konstitution das Verhalten des Modells verbessert. Verfassungen beziehen sich auf Designvorschläge mit Prinzipien, die die Generierung des Modells unterstützen. Neuere Methoden ermöglichen sogar die interaktive Ableitung von Verfassungsprinzipien.

Nutzen wir diese Idee, um den Prompt weiter zu verbessern. Fügen Sie oben in unserem Prompt einen Abschnitt mit den Prinzipien für die Generierung hinzu. Er beginnt jetzt so:

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')}])

Nach dieser Aktualisierung kann das Beispiel noch einmal ausgeführt werden. Die Ausgabe sieht dann ganz anders aus:

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.

Die Auffälligkeit des Prompts kann dann noch einmal überprüft werden, um zu verstehen, warum diese Änderung auftritt:

LIT-Sichtbarkeit

Beachten Sie, dass die Empfehlung viel sicherer ist. Außerdem wird die Angabe „Nicht für Sie geeignet“ durch das Prinzip der klaren Angabe der Eignung gemäß der Ernährungseinschränkung sowie durch die Analyse (die sogenannte Gedankenkette) beeinflusst. So können Sie sich noch sicherer sein, dass die Ausgabe aus dem richtigen Grund erfolgt.

8. Nicht technische Teams in die Modellprüfung und explorative Datenanalyse einbeziehen

Die Interpretierbarkeit sollte ein Teamprojekt sein, das Fachwissen aus den Bereichen XAI, Richtlinien und Recht umfasst.

Die Interaktion mit Modellen in den frühen Entwicklungsphasen erforderte bisher ein erhebliches technisches Know-how, was es für einige Mitbearbeiter schwieriger machte, darauf zuzugreifen und sie zu testen. Bisher gab es keine Tools, mit denen diese Teams an den frühen Prototyping-Phasen teilnehmen konnten.

Mit LIT soll sich dieses Paradigma ändern. Wie Sie in diesem Codelab gesehen haben, können das visuelle Medium und die interaktive Möglichkeit von LIT, die Auffälligkeit zu untersuchen und Beispiele zu untersuchen, verschiedenen Stakeholdern helfen, Ergebnisse zu teilen und zu kommunizieren. So können Sie ein breiteres Team für die explorative Datenanalyse, die Prüfung und die Fehlerbehebung einsetzen. Wenn sie diese technischen Methoden kennenlernen, können sie besser nachvollziehen, wie Modelle funktionieren. Darüber hinaus kann eine größere Vielfalt an Fachwissen in frühen Modelltests dazu beitragen, unerwünschte Ergebnisse zu erkennen, die verbessert werden können.

9. Zusammenfassung

Zusammenfassung:

  • Die LIT-Benutzeroberfläche bietet eine Oberfläche für die interaktive Modellausführung, mit der Nutzer direkt Ergebnisse generieren und „Was-wäre-wenn-Szenarien“ testen können. Das ist besonders nützlich, um verschiedene Promptvarianten zu testen.
  • Das LM-Salienzmodul bietet eine visuelle Darstellung der Salienz und eine steuerbare Datengranularität, damit Sie über menschenzentrierte Konstrukte (z.B. Sätze und Wörter) statt über modellzentrierte Konstrukte (z.B. Tokens) kommunizieren können.

Wenn Sie in Ihren Modellbewertungen problematische Beispiele finden, laden Sie sie zur Fehlerbehebung in LIT hoch. Analysieren Sie zuerst die größte sinnvolle Inhaltseinheit, die sich logisch auf die Modellierungsaufgabe bezieht. Verwenden Sie die Visualisierungen, um zu sehen, wo das Modell den Promptinhalt richtig oder falsch verarbeitet, und gehen Sie dann auf kleinere Inhaltseinheiten ein, um das falsche Verhalten zu beschreiben und mögliche Fehlerkorrekturen zu ermitteln.

Zu guter Letzt: Lit wird ständig verbessert. Hier finden Sie weitere Informationen zu unseren Funktionen und können uns Ihre Vorschläge senden.