Gemma-Modelle in Keras mit LIT analysieren

Zu generativer KI In Google Colab ausführen Quelle auf GitHub ansehen In Codelabs lernen

Einleitung

Produkte mit generativer KI sind relativ neu und das Verhalten einer Anwendung kann sich stärker unterscheiden als frühere Formen von Software. Daher ist es wichtig, die verwendeten ML-Modelle zu prüfen, Beispiele für das Modellverhalten zu untersuchen und Überraschungen 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.

In diesem Codelab erfahren Sie, wie Sie das Gemma-Modell von Google mithilfe von LIT optimal nutzen. In diesem Codelab wird gezeigt, wie Sie mit Sequenzauffälligkeit, einer Interpretierbarkeitstechnik, verschiedene Prompt-Engineering-Ansätze analysieren.

Lernziele:

  1. Sequenzauffälligkeit und ihre Verwendung in der Modellanalyse verstehen
  2. LIT für Gemma einrichten, um Prompt-Ausgaben und Sequenzauffälligkeit zu berechnen.
  3. Verwendung von Sequenzauffälligkeit über das LM Salience-Modul, um die Auswirkungen von Prompt-Designs auf die Modellausgaben zu verstehen.
  4. Hypothesen zur Verbesserung der Prompts in LIT testen und ihre Auswirkungen ermitteln

Hinweis: In diesem Codelab werden die KerasNLP-Implementierung von Gemma und TensorFlow v2 für das Back-End verwendet. Es wird dringend empfohlen, einen GPU-Kernel zu verwenden.

Sequenzauswahl und ihre Verwendung in der Modellanalyse

Generative Text-zu-Text-Modelle wie Gemma verwenden eine Eingabesequenz in Form von tokenisiertem Text und generieren neue Tokens, die typische Folge- oder Vervollständigungen dieser Eingabe sind. Dabei wird jedes neu generierte Token in einer Schleife an die Eingabe sowie alle vorherigen Generationen angehängt, bis das Modell eine Stoppbedingung erreicht. Beispiele hierfür sind, wenn das Modell ein EOS-Token (End-of-Sequence) generiert oder die vordefinierte maximale Länge erreicht.

Salience-Methoden sind eine Klasse von erklärbaren KI-Techniken (XAI), die Ihnen mitteilen können, welche Teile einer Eingabe für das Modell für verschiedene Teile der Ausgabe wichtig sind. LIT unterstützt Auffälligkeitsmethoden für eine Vielzahl von Klassifizierungsaufgaben, die die Auswirkungen einer Sequenz von Eingabetokens auf das vorhergesagte Label erklären. Durch Sequenzauffälligkeit werden diese Methoden auf generative Text-zu-Text-Modelle verallgemeinert und die Auswirkungen der vorherigen Tokens auf die generierten Tokens erklärt.

Hier verwenden Sie die Methode Grad L2 Norm für die Sequenzauffälligkeit. Dabei werden die Gradienten des Modells analysiert und der Einfluss jedes vorangehenden Tokens auf die Ausgabe ermittelt. Diese Methode ist einfach und effizient und hat sich nachweislich bei der Klassifizierung und anderen Einstellungen als gut erwiesen. Je höher der Auffälligkeitswert, desto größer der Einfluss. Diese Methode wird innerhalb von LIT verwendet, da sie in der Interpretierbarkeits-Forschungs-Community gut verstanden wird und weit verbreitet ist.

Zu den fortschrittlichen verlaufsbasierten Auffälligkeitsmethoden gehören Grad ⋅ Input und integrierte Farbverläufe. Es sind auch ablationsbasierte Methoden wie LIME und SHAP verfügbar. Diese können robuster, aber deutlich teurer in ihrer Berechnung sein. In diesem Artikel finden Sie einen detaillierten Vergleich der verschiedenen Auffälligkeitsmethoden.

In dieser einführenden interaktiven, explorativen Datenanalyse erfahren Sie mehr über die Wissenschaft der Auffälligkeitsmethodik.

Importe, Umgebung und anderer Einrichtungscode

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 ignoriert werden.

LIT und Keras NLP installieren

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

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

Zugriff auf Kaggle

Um sich bei Kaggle anzumelden, können Sie entweder Ihre kaggle.json-Datei mit den Anmeldedaten unter ~/.kaggle/kaggle.json speichern oder Folgendes in einer Colab-Umgebung ausführen. Weitere Informationen finden Sie in der Dokumentation zum kagglehub-Paket.

import kagglehub

kagglehub.login()

Akzeptieren Sie unbedingt auch die Lizenzvereinbarung für Gemma.

LIT für Gemma einrichten

LIT-Modelle einrichten

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)

Mit dem folgenden Code werden die LIT-Wrapper initialisiert, um die Auffälligkeit des Gemma-Modells zu unterstützen. Im LIT-Framework werden diese als Modelle bezeichnet, in diesem Fall sind es jedoch nur unterschiedliche Endpunkte für dasselbe zugrunde liegende gemma_model, das Sie oben geladen haben. Dadurch kann LIT Generierungen, Tokenisierung und Aufteilung on demand berechnen.

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-Datasets einrichten

Gemma ist ein generatives Text-zu-Text-Modell, das Texteingabe und -ausgabe generiert. Die Modelle von LIT gehen davon aus, dass die Datasets die folgenden Felder zur Unterstützung der Generierung bereitstellen:

  • prompt: die Eingabe für eine KerasGenerationModel.
  • target: Eine optionale Zielsequenz wie eine „Ground Truth“-Antwort (Gold) oder eine vorab generierte Antwort des Modells.

LIT enthält einen kleinen Satz von sample_prompts mit Beispielen aus verschiedenen Quellen, z. B.:

  • [GSM8K][GSM8K]: Matheaufgaben an Klassenräumen mit einigen wenigen Beispielen lösen.
  • [Gigaword-Benchmark][Gigaword]: Erstellen von Anzeigentiteln für eine Sammlung kurzer Artikel.
  • [Verfassungs-Prompts][constitutional-prompting]: Neue Ideen zur Verwendung von Objekten mit Richtlinien/Grenzen entwickeln

Sie können auch einfach Ihre eigenen Daten laden, entweder als .jsonl-Datei mit Datensätzen mit den Feldern prompt und optional target ([example][jsonl-example]) oder aus einem beliebigen Format mit der Dataset API von LIT.

Führen Sie die Zelle unten aus, um die Beispiel-Prompts zu laden.

from lit_nlp.examples.datasets import lm as lm_data

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

LIT-UI einrichten

LIT ist ein interaktives Tool zum Verstehen von Modellen, das eine Human-in-the-Loop-Auswertung und Prüfung des Modellverhaltens ermöglicht. Die LIT-UI erleichtert diese Interaktion, indem sie Ihnen folgende Möglichkeiten bietet:

  • Ihre Datasets und Modellausgaben live zu visualisieren,
  • Auffälligkeitsmethoden ausführen, um die Eingabetokens zu verstehen, die das Modellverhalten steuern
  • Kontrafakten zu erstellen, um Hypothesen zu testen.

LIT ermöglicht dies alles innerhalb derselben Oberfläche, wodurch der Wechsel zwischen verschiedenen Tools vereinfacht wird. Dies ist besonders nützlich für Aufgaben wie das Prompt Engineering, auf die Sie sich später in diesem Codelab konzentrieren werden.

Dieses UI-Layout kann für jedes andere generative Sprachmodell verwendet werden. Wenn Sie an zusätzlichen Funktionen interessiert sind, finden Sie hier eine vollständige Liste.

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.',
)

Diese Zelle initialisiert den LIT-Server. Dies kann einige Sekunden dauern, da das Modell auch für die Beispiel-Prompts ausgeführt und das Ergebnis im Cache gespeichert wird.

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',
)

Jetzt können Sie die Benutzeroberfläche anzeigen lassen:

lit_widget.render(height=800)
<IPython.core.display.Javascript object>

Sie können LIT auch als ganze Seite in einem neuen Tab öffnen. Führen Sie diese Zelle aus und klicken Sie auf den angezeigten Link:

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

Analyse einiger Prompts für Gemma in LIT

Prompts sind heute genauso viel Kunst wie Wissenschaft, und mit LIT können Sie Prompts für Large Language Models wie Gemma empirisch verbessern. Vorab sehen Sie ein Beispiel dafür, wie LIT verwendet werden kann, um Gemmas Verhalten zu untersuchen, potenzielle Probleme zu antizipieren und seine Sicherheit zu verbessern.

Fehler in komplexen Prompts erkennen

Zwei der wichtigsten Prompt-Techniken für hochwertige LLM-basierte Prototypen und Anwendungen sind wenige Prompts (einschließlich Beispielen für das gewünschte Verhalten im Prompt) und Chain-of-Thought (Chain of Thinking) (einschließlich einer Form der Erklärung oder Begründung vor der endgültigen Ausgabe des LLM). Das Formulieren eines effektiven Prompts ist jedoch oft immer noch eine Herausforderung.

Stellen Sie sich ein Beispiel vor, mit dem Sie jemandem dabei helfen können, einzuschätzen, ob er aufgrund seines Geschmacks Essen mag. Eine erste Prototyp-Chain-of-Thought-Prompt-Vorlage könnte wie folgt 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 Prompt bemerkt? LIT hilft Ihnen dabei, den Prompt mithilfe des LM Salience-Moduls zu untersuchen.

Auffälligkeit für Sequenzen zur Fehlerbehebung verwenden

In diesem Modul werden Teile des Prompts hervorgehoben, die das Modell beim Generieren seiner Antwort berücksichtigt. Der Salience-Wert wird auf der kleinstmöglichen Ebene berechnet (d. h. für jedes Eingabetoken), aber LIT kann die Token-Salience in besser interpretierbaren größeren Spans zusammenfassen, z. B. in Zeilen, Sätzen oder Wörtern. Weitere Informationen zu Saliency und dazu, wie Sie damit unbeabsichtigte Verzerrungen erkennen, finden Sie in Saliency Explorable.

Beginnen wir mit einer neuen Beispieleingabe für die Variablen der Prompt-Vorlage:

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 die LIT-UI in der Zelle oben oder in einem separaten Tab geöffnet ist, können Sie den Datapoint Editor von LIT verwenden, um diese Eingabeaufforderung hinzuzufügen:

1_Datenpunkt-Editor.png

Eine andere Möglichkeit ist, das Widget direkt mit der gewünschten Aufforderung noch einmal zu rendern:

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

Beachten Sie die überraschende Fertigstellung des Modells:

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 Ihnen vor, etwas zu essen, von dem Sie eindeutig gesagt haben, dass Sie es nicht essen dürfen?

Sequenzauffälligkeit kann helfen, das Grundproblem hervorzuheben, wie in unseren wenigen Beispielen beschrieben. Im ersten Beispiel stimmt die Chain-of-Thought-Logik 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 LM Salience-Modul „Sätze“ und dann die Empfehlungszeile aus. Die Benutzeroberfläche sollte jetzt so aussehen:

3_few_shots_mistake..png

Korrigieren Sie nun die „Recommendation“ (Empfehlung) im ersten Beispiel in Avoid. Versuchen Sie es dann noch einmal. Dieses Beispiel ist in LIT bereits in den Beispiel-Prompts geladen, sodass Sie es mit dieser kleinen Dienstprogrammfunktion abrufen können:

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>

Jetzt wird die Modellvervollständigung zu:

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 Sie daraus lernen sollten: Durch frühes Prototyping lassen sich Risiken aufdecken, an die Sie möglicherweise nicht im Voraus denken. Da Sprachmodelle fehleranfällig sind, müssen sie proaktiv auf Fehler reagieren. Weitere Informationen zur Entwicklung mit KI finden Sie in unserem Leitfaden zu Menschen und KI.

Die korrigierte Aufforderung zu wenige Schlägen ist zwar besser, aber nicht ganz richtig: Sie fordert den Nutzer korrekt auf, Eier zu vermeiden, aber die Gründe sind nicht richtig, da er keine Eier mag, obwohl der Nutzer tatsächlich angegeben hat, dass er keine Eier essen kann. Im folgenden Abschnitt sehen Sie, was Sie noch verbessern können.

Hypothesen testen, um das Modellverhalten zu verbessern

Mit LIT können Sie Änderungen an Prompts auf derselben Benutzeroberfläche testen. In diesem Beispiel testen Sie das Hinzufügen einer Konstitution, um das Modellverhalten zu verbessern. Verfassungen beziehen sich auf Design-Prompts mit Prinzipien, die beim Generieren des Modells helfen. Neuere Methoden ermöglichen sogar eine interaktive Ableitung von Verfassungsprinzipien.

Mithilfe dieser Idee können wir die Aufforderung weiter verbessern. Fügen Sie oben in unserem Prompt einen Abschnitt mit den Prinzipien für die Generierung hinzu, der jetzt so beginnt:

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>

Nach diesem Update kann das Beispiel noch einmal ausgeführt werden und eine ganz andere Ausgabe beobachten:

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.

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

3_few_shot_constitution.png

Sie sehen, dass die Empfehlung viel sicherer ist. Darüber hinaus wird die Angabe „Nicht für dich geeignet“ durch das Prinzip beeinflusst, dass die Eignung je nach Ernährungseinschränkung klar angegeben wird, sowie durch die Analyse (die sogenannte Denkkette). Dies gibt die Gewissheit, dass die Ausgabe aus dem richtigen Grund erfolgt.

Nicht-technische Teams in Modellprüfung und -exploration einbeziehen

Interpretierbarkeit ist als Teamarbeit zu verstehen, das die Expertise von XAI, Richtlinien, Recht und mehr umfasst.

Die Interaktion mit Modellen in den frühen Entwicklungsphasen erforderte bisher ein beträchtliches technisches Fachwissen, wodurch es für manche Mitbearbeiter schwierig war, auf sie zuzugreifen und sie zu prüfen. Bisher gab es keine Tools, mit denen diese Teams in die frühen Prototyping-Phasen einbezogen werden können.

Wir hoffen, dass sich dieses Paradigma durch LIT verändern kann. Wie Sie in diesem Codelab gesehen haben, können das visuelle Medium und die interaktive Fähigkeit von LIT, Auffälligkeit zu untersuchen und Beispiele zu untersuchen, verschiedenen Stakeholdern helfen, Erkenntnisse zu teilen und zu kommunizieren. Auf diese Weise können Sie eine größere Vielfalt von Teammitgliedern für die Modelluntersuchung, die Prüfung und die Fehlerbehebung einbeziehen. Wenn sie diese technischen Methoden kennenlernen, können sie besser verstehen, wie Modelle funktionieren. Darüber hinaus kann ein vielfältigeres Fachwissen zu frühen Modelltests dazu beitragen, unerwünschte Ergebnisse zu ermitteln, die verbessert werden können.

Zusammenfassung

Zur Wiederholung:

  • Die LIT-Benutzeroberfläche bietet eine Schnittstelle für die interaktive Modellausführung, mit der Nutzer Ausgaben direkt generieren und Was-wäre-wenn-Szenarien testen können. Dies ist besonders nützlich, um verschiedene Varianten von Aufforderungen zu testen.
  • Das LM Salience-Modul bietet eine visuelle Darstellung der Auffälligkeit und einen kontrollierbaren Detaillierungsgrad von Daten. So können Sie über Konstrukte, die den Menschen in den Mittelpunkt stellen (z. B. Sätze und Wörter), anstelle von modellzentrierten Konstrukten (z. B. Tokens) kommunizieren.

Wenn Sie in Ihren Modellbewertungen problematische Beispiele finden, übernehmen Sie sie zur Fehlerbehebung in Lite. Analysieren Sie zunächst die größte sinnvolle Inhaltseinheit, die sich logisch auf die Modellierungsaufgabe bezieht. Verwenden Sie die Visualisierungen, um zu sehen, wo das Modell den Inhalt der Aufforderung richtig oder falsch anspricht, und schlüsseln Sie dann in kleinere Inhaltseinheiten auf, um das falsche Verhalten weiter zu beschreiben und mögliche Lösungen zu identifizieren.

Zuletzt: Lit verbessert sich ständig! Hier finden Sie weitere Informationen zu unseren Funktionen und können Vorschläge einreichen.

Anhang: So berechnet LIT Sequenzsalienz

LIT berechnet die Sequenzauffälligkeit in einem mehrstufigen Prozess.

  1. Geben Sie einen Eingabestring (Eingabeaufforderung und entweder die Generierung des Modells oder eine „goldene“ Zielsequenz) für die Modelleingabe an.
  2. Berechnen Sie eine „Ziel“-Sequenz, indem Sie die Eingabetokens um eine Position nach links verschieben.
  3. Extrahieren Sie die Einbettungen für die und berechnen Sie den Verlust pro Token zwischen der Generierung und den Zielsequenzen.
  4. Maskiere den Verlust, um die Tokens zu isolieren, die du erklären möchtest.
  5. Verwenden Sie die Funktion tf.GradientTape.gradient(), um die Gradienten der Eingabeeinbettungen in Bezug auf den maskierten Verlust zu berechnen.
  6. Verarbeiten Sie die Gradienten so, dass für jedes Eingabetoken eine einzelne Punktzahl vergeben wird. Sie können beispielsweise die L2-Norm des Farbverlaufs an jeder Position ermitteln.

Anhang: Salience programmatisch berechnen

Es ist möglich, Auffälligkeitswerte direkt von Python aus zu berechnen. Verwenden Sie dazu dieselben Schritte wie beim internen Ausführen des LIT-Tools. Dazu sind drei Schritte erforderlich:

  1. Bereiten Sie ein Beispiel vor und führen Sie den Modelltokenizer aus.
  2. Bereiten Sie eine Maske vor, die auswählt, welche (vorhergesehenen) Tokens erklärt werden sollen,
  3. Rufen Sie den Auffälligkeits-Wrapper auf.

Eingabebeispiel für LIT erstellen

{'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**'}

Hinweis zu Aufrufkonventionen: Sowohl der Tokenizer als auch der Auffälligkeits-Wrapper verwenden die Modell-API von LIT, wobei die .predict()-Funktion eine Liste von Beispielen (Wörterbücher) annimmt und einen Generator von Antworten (Wörterbüchern) zurückgibt. Bei der Arbeit mit größeren Datasets oder langsameren Modellen ist dies viel flexibler, aber wenn Sie nur Vorhersagen für ein Beispiel erhalten möchten, müssen Sie sie jetzt in etwa so umschließen: list(model.predict([example])[0]

Tokens abrufen, um Erklärungsziele auswählen zu können

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

Zum Berechnen der Auffälligkeit müssen Sie eine Zielmaske erstellen, die angibt, welche (vorhergesehenen) Tokens erklärt werden sollen. Die Zielmaske ist ein Array mit der gleichen Länge wie die Tokens, mit einer 1 an den Positionen der Tokens, die Sie erklären möchten. Verwenden wir ▁training und ▁evaluating als Ziel:

Zielmaske vorbereiten

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

Auffälligkeitsmodell aufrufen

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

Das war schon alles. Die Punktzahlen in den Feldern grad_l2 und grad_dot_input sind auf tokens ausgerichtet und entsprechen denen in der LIT-Benutzeroberfläche.

Beachten Sie, dass die letzten Punktzahlen 0 sind: Da unser Modell ein von links nach rechts gesprochenes Sprachmodell ist, haben Tokens rechts neben dem Zielbereich keinen Einfluss auf die Vorhersage.