Große Sprachmodelle (Large Language Models, LLMs) sind ein unglaubliches Werkzeug für Entwickler und Unternehmensleiter, um neue Werte für Verbraucher zu schaffen. Sie geben persönliche Empfehlungen, übersetzen zwischen unstrukturierten und strukturierten Daten, fassen große Mengen an Informationen zusammen und tun noch viel mehr.
In dem Maße, wie sich die Anwendungen vervielfältigen, steigt auch die Bedeutung der Leistungsmessung von LLM-basierten Anwendungen. Dies ist aus mehreren Gründen ein nicht triviales Problem: Benutzerfeedback oder eine andere „Wahrheitsquelle“ ist äußerst begrenzt und oft nicht vorhanden; selbst wenn dies möglich ist, ist die Kennzeichnung durch den Menschen immer noch teuer; und es ist leicht, diese Anwendungen komplex zu machen.
Diese Komplexität wird oft durch die Abstraktionsebenen des Codes verborgen und wird erst dann deutlich, wenn etwas schief läuft. Eine einzige Codezeile kann eine Kaskade von Aufrufen (Spans) auslösen. Für jeden Bereich sind unterschiedliche Auswertungen erforderlich, wodurch sich die Probleme vervielfachen. So löst beispielsweise der nachstehende einfache Codeschnipsel mehrere Sub-LLM-Aufrufe aus.
Glücklicherweise können wir die Leistungsfähigkeit von LLMs nutzen, um die Bewertung zu automatisieren. In diesem Artikel werden wir uns damit befassen, wie man dies einrichtet und sicherstellt, dass es zuverlässig ist.
Der Kern von LLM-Evaluierungen ist KI, die KI evaluiert.
Das mag zwar zirkulär klingen, aber die menschliche Intelligenz hat schon immer die menschliche Intelligenz bewertet (z. B. bei einem Vorstellungsgespräch oder der Abschlussprüfung am College). Jetzt können KI-Systeme endlich das Gleiche für andere KI-Systeme tun.
Der Prozess besteht darin, dass LLMs eine synthetische Grundwahrheit erzeugen, die zur Bewertung eines anderen Systems verwendet werden kann. Das wirft die Frage auf: Warum nicht direkt das menschliche Feedback nutzen? Ganz einfach: Weil man nie genug davon haben wird.
Ein menschliches Feedback zu auch nur einem Prozent der Eingabe-/Ausgabepaare zu erhalten, ist ein gigantischer Kraftakt. Die meisten Teams schaffen nicht einmal das. Aber damit dieser Prozess wirklich nützlich ist, ist es wichtig, Bewertungen für jeden LLM-Unteraufruf zu haben, von denen es, wie wir bereits gesehen haben, viele geben kann.
Lassen Sie uns erforschen, wie man das macht.
LLM Modellevaluation vs. LLM Systemevaluation
LLM_model_evals != LLM_System_evals
LLM Model Evals
Vielleicht haben Sie schon von LLM-Evals gehört. Dieser Begriff wird auf viele verschiedene Arten verwendet, die alle sehr ähnlich klingen, aber tatsächlich sehr unterschiedlich sind. Einer der häufigsten Verwendungszwecke ist das, was wir LLM-Modellevaluierungen nennen werden. LLM-Modellevaluierungen konzentrieren sich auf die Gesamtleistung der Basismodelle. Die Unternehmen, die die ursprünglichen kundenorientierten LLMs auf den Markt brachten, brauchten einen Weg, um ihre Effektivität für eine Reihe verschiedener Aufgaben zu quantifizieren.
Eine beliebte Bibliothek, die LLM-Modell Evals enthält, ist die OpenAI Eval-Bibliothek, die ursprünglich auf den Anwendungsfall der Modellevaluation ausgerichtet war. Es gibt viele Metriken wie HellaSwag (bewertet, wie gut ein LLM einen Satz vervollständigen kann), TruthfulQA (misst die Wahrhaftigkeit von Modellantworten) und MMLU (misst, wie gut der LLM multitaskingfähig ist). Es gibt sogar LLM-Bestenlisten, die zeigen, wie gut die Open-Source-LLMs im Vergleich zueinander abschneiden.
LLM System Evals
Bis zu diesem Punkt haben wir die LLM-Modellevaluation besprochen. Im Gegensatz dazu ist die LLM-Systemevaluation die vollständige Evaluation der Komponenten, die Sie in Ihrem System kontrollieren können. Die wichtigsten dieser Komponenten sind der Prompt (oder die Prompt-Vorlage) und der Kontext. LLM-Systemevaluierungen bewerten, wie gut Ihre Eingaben Ihre Ausgaben bestimmen können.
LLM-Systemprüfungen können zum Beispiel den LLM konstant halten und die Prompt-Vorlage ändern. Da Prompts dynamischere Teile Ihres Systems sind, ist diese Bewertung während der gesamten Lebensdauer des Projekts sehr sinnvoll. Ein LLM kann zum Beispiel Ihre Chatbot-Antworten auf Nützlichkeit oder Höflichkeit bewerten, und dieselbe Bewertung kann Ihnen Informationen über Leistungsänderungen im Laufe der Zeit in der Produktion liefern.
Which To Use? It Depends On Your Role
Es gibt verschiedene Personengruppen, die LLM-Evaluierungen nutzen. Die eine ist der Modellentwickler oder ein Ingenieur, der mit der Feinabstimmung des LLM-Kerns beauftragt ist, und die andere ist der Praktiker, der das benutzerorientierte System zusammenstellt.
Es gibt nur sehr wenige LLM-Modellentwickler, und sie neigen dazu, für Unternehmen wie OpenAI, Anthropic, Google, Meta und andere zu arbeiten. Modellentwickler kümmern sich um LLM-Modellevaluierungen, da ihre Aufgabe darin besteht, ein Modell zu liefern, das für eine Vielzahl von Anwendungsfällen geeignet ist.
Für ML-Praktiker beginnt die Aufgabe ebenfalls mit der Modellbewertung. Einer der ersten Schritte bei der Entwicklung eines LLM-Systems ist die Auswahl eines Modells (z. B. GPT 3.5 vs. 4 vs. Palm, usw.). Die LLM-Modellevaluierung für diese Gruppe ist jedoch oft ein einmaliger Schritt. Sobald die Frage geklärt ist, welches Modell für Ihren Anwendungsfall am besten geeignet ist, wird der Großteil des restlichen Lebenszyklus der Anwendung durch LLM-Systemevaluierungen bestimmt. Daher kümmern sich ML-Praktiker sowohl um LLM-Modell-Evaluierungen als auch um LLM-System-Evaluierungen, wobei sie wahrscheinlich viel mehr Zeit auf letztere verwenden.
LLM-System Evals variieren je nach Anwendungsfall
Wenn Sie mit anderen ML-Systemen gearbeitet haben, ist Ihre erste Frage wahrscheinlich die folgende: „Was soll die Ergebnismetrik sein?“ Die Antwort hängt davon ab, was Sie zu bewerten versuchen.
- Extrahieren strukturierter Informationen: Sie können prüfen, wie gut der LLM Informationen extrahiert. Sie können zum Beispiel die Vollständigkeit prüfen (gibt es Informationen in der Eingabe, die nicht in der Ausgabe enthalten sind?)
- Beantwortung von Fragen: Wie gut beantwortet das System die Frage des Benutzers? Sie können die Genauigkeit, die Höflichkeit oder die Kürze der Antwort untersuchen – oder alles zusammen.
- Retrieval Augmented Generation (RAG): Sind die abgerufenen Dokumente und die endgültige Antwort relevant?
Als Systementwickler sind Sie letztendlich für die Leistung des Systems verantwortlich, und daher liegt es an Ihnen zu verstehen, welche Aspekte des Systems bewertet werden müssen. Wenn Sie zum Beispiel ein LLM haben, das mit Kindern interagiert, wie eine Nachhilfe-App, möchten Sie sicherstellen, dass die Antworten altersgerecht und nicht toxisch sind.
Einige gängige Bewertungen, die heute verwendet werden, sind Relevanz, Halluzinationen, Genauigkeit bei der Beantwortung von Fragen und Toxizität. Für jede dieser Bewertungen gibt es unterschiedliche Vorlagen, je nachdem, was Sie zu bewerten versuchen. Hier ist ein Beispiel für Relevanz:
In diesem Beispiel wird der Einfachheit halber das Open-Source-Tool Phoenix verwendet (ich bin Mitglied des Teams, das Phoenix entwickelt hat). Innerhalb des Phoenix-Tools gibt es Standardvorlagen für die meisten gängigen Anwendungsfälle. Hier ist die Vorlage, die wir für dieses Beispiel verwenden werden:
You are comparing a reference text to a question and trying to determine if the reference text contains information relevant to answering the question. Here is the data:
[BEGIN DATA]
************
[Question]: {query}
************
[Reference text]: {reference}
[END DATA]
Compare the Question above to the Reference text. You must determine whether the Reference text
contains information that can answer the Question. Please focus on whether the very specific
question can be answered by the information in the Reference text.
Your response must be single word, either "relevant" or "irrelevant",
and should not contain any text or characters aside from that word.
"irrelevant" means that the reference text does not contain an answer to the Question.
"relevant" means the reference text contains an answer to the Question.
Wir werden auch das GPT-4-Modell von OpenAI und die Präzisions-/Recall-Metriken von scikitlearn verwenden.
Zunächst importieren wir alle notwendigen Abhängigkeiten:
from phoenix.experimental.evals import (
RAG_RELEVANCY_PROMPT_TEMPLATE_STR,
RAG_RELEVANCY_PROMPT_RAILS_MAP,
OpenAIModel,
download_benchmark_dataset,
llm_eval_binary,
)
from sklearn.metrics import precision_recall_fscore_support
Lassen Sie uns nun den Datensatz einfügen:
# Download a "golden dataset" built into Phoenix
benchmark_dataset = download_benchmark_dataset(
task="binary-relevance-classification", dataset_name="wiki_qa-train"
)
# For the sake of speed, we'll just sample 100 examples in a repeatable way
benchmark_dataset = benchmark_dataset.sample(100, random_state=2023)
benchmark_dataset = benchmark_dataset.rename(
columns={
"query_text": "query",
"document_text": "reference",
},
)
# Match the label between our dataset and what the eval will generate
y_true = benchmark_dataset["relevant"].map({True: "relevant", False: "irrelevant"})
Lassen Sie uns nun unsere Bewertung durchführen:
# Any general purpose LLM should work here, but it is best practice to keep the temperature at 0
model = OpenAIModel(
model_name="gpt-4",
temperature=0.0,
)
# Rails will define our output classes
rails = list(RAG_RELEVANCY_PROMPT_RAILS_MAP.values())
benchmark_dataset["eval_relevance"] = \
llm_eval_binary(benchmark_dataset,
model,
RAG_RELEVANCY_PROMPT_TEMPLATE_STR,
rails)
y_pred = benchmark_dataset["eval_relevance"]
# Calculate evaluation metrics
precision, recall, f1, support = precision_recall_fscore_support(y_true, y_pred)
Evaluating LLM-Based Systems with LLMs
Der Prozess der Evaluierung Ihres LLM-basierten Systems mit einem LLM umfasst zwei verschiedene Schritte. Zuerst müssen Sie eine Benchmark für Ihre LLM-Evaluationsmetrik erstellen. Um dies zu tun, stellen Sie eine spezielle LLM-basierte Auswertung zusammen, deren einzige Aufgabe es ist, Daten so effektiv zu beschriften, wie ein Mensch Ihren „goldenen Datensatz“ beschriftet hat. Dann vergleichen Sie Ihre Metrik mit dieser Auswertung. Führen Sie dann diese LLM-Evaluierungsmetrik gegen die Ergebnisse Ihrer LLM-Anwendung durch (mehr dazu weiter unten).
Wie man eine LLM-Eval aufbaut
Der erste Schritt besteht, wie oben beschrieben, darin, eine Benchmark für Ihre Bewertungen zu erstellen.
Dazu müssen Sie mit einer Metrik beginnen, die für Ihren Anwendungsfall am besten geeignet ist. Dann benötigen Sie den goldenen Datensatz. Dieser sollte repräsentativ für die Art von Daten sein, die Sie bei der LLM-Evaluierung zu sehen erwarten. Der goldene Datensatz sollte das „Ground-Truth“-Label haben, damit wir die Leistung der LLM-Evaluierungsvorlage messen können. Oftmals stammen solche Bezeichnungen von menschlichem Feedback. Die Erstellung eines solchen Datensatzes ist mühsam, aber Sie können oft einen standardisierten Datensatz für die häufigsten Anwendungsfälle finden (wie wir es im obigen Code getan haben).
Dann müssen Sie entscheiden, welchen LLM Sie für die Bewertung verwenden wollen. Dies könnte ein anderes LLM sein als das, das Sie für Ihre Anwendung verwenden. Zum Beispiel könnten Sie Llama für Ihre Anwendung und GPT‑4 für Ihre Auswertung verwenden. Oft wird diese Wahl durch Fragen der Kosten und der Genauigkeit beeinflusst.
Jetzt kommt die Kernkomponente, die wir versuchen, zu bewerten und zu verbessern: die Evaluierungsvorlage. Wenn Sie eine vorhandene Bibliothek wie OpenAI oder Phoenix verwenden, sollten Sie mit einer vorhandenen Vorlage beginnen und sehen, wie diese Eingabeaufforderung funktioniert.
Wenn Sie eine bestimmte Nuance einbauen möchten, passen Sie die Vorlage entsprechend an oder erstellen Sie Ihre eigene Vorlage von Grund auf.
Denken Sie daran, dass die Vorlage eine klare Struktur haben sollte, wie die, die wir im vorherigen Abschnitt verwendet haben. Seien Sie bei den folgenden Punkten explizit:
- Was ist der Input? In unserem Beispiel sind es die abgerufenen Dokumente/Kontexte und die Anfrage des Benutzers.
- Was wird abgefragt? In unserem Beispiel bitten wir den LLM, uns zu sagen, ob das Dokument für die Abfrage relevant ist.
- Was sind die möglichen Ausgabeformate? In unserem Beispiel ist es binär relevant/irrelevant, aber es kann auch mehrklassig sein (z. B. vollständig relevant, teilweise relevant, nicht relevant).
Jetzt müssen Sie die Auswertung über Ihren goldenen Datensatz laufen lassen. Dann können Sie Metriken (Gesamtgenauigkeit, Präzision, Wiedererkennungswert, F1 usw.) erstellen, um den Benchmark zu ermitteln. Es ist wichtig, mehr als nur die Gesamtgenauigkeit zu betrachten. Darauf gehen wir weiter unten noch genauer ein.
Wenn Sie mit der Leistung Ihrer LLM-Bewertungsvorlage nicht zufrieden sind, müssen Sie die Eingabeaufforderung ändern, damit sie besser funktioniert. Dies ist ein iterativer Prozess, der sich auf harte Messgrößen stützt. Wie immer ist es wichtig, eine Überanpassung der Vorlage an den goldenen Datensatz zu vermeiden. Stellen Sie sicher, dass Sie einen repräsentativen Holdout-Satz haben oder führen Sie eine k‑fache Kreuzvalidierung durch.
Schließlich gelangen Sie zu Ihrem Benchmark. Die optimierte Leistung auf dem goldenen Datensatz zeigt, wie sicher Sie sich auf Ihre LLM-Bewertung verlassen können. Sie wird nicht so genau sein wie die Grundwahrheit, aber sie wird genau genug sein, und sie wird viel weniger kosten als ein menschlicher Beschrifter in der Schleife für jedes Beispiel.
Die Vorbereitung und Anpassung Ihrer Prompt-Vorlagen ermöglicht Ihnen die Einrichtung von Testfällen.
Warum Sie beim Benchmarking Ihrer LLM-Prompt-Vorlage Precision und Recall verwenden sollten
Die Branche hat die besten Praktiken für LLM-Bewertungen nicht vollständig standardisiert. Die Teams wissen in der Regel nicht, wie sie die richtigen Benchmark-Metriken festlegen sollen.
Die Gesamtgenauigkeit wird häufig verwendet, aber sie reicht nicht aus.
Dies ist eines der häufigsten Probleme in der Praxis der Datenwissenschaft: Ein sehr starkes Klassenungleichgewicht macht die Genauigkeit zu einer unpraktischen Metrik.
Es ist hilfreich, sich das Problem anhand der Relevanzmetrik zu vergegenwärtigen. Nehmen wir an, Sie machen sich die Mühe und den Aufwand, den relevantesten Chatbot zusammenzustellen, den Sie finden können. Sie wählen ein LLM und eine Vorlage, die für den Anwendungsfall geeignet sind. Das sollte bedeuten, dass deutlich mehr Ihrer Beispiele als „relevant“ bewertet werden sollten. Nehmen wir eine extreme Zahl, um den Punkt zu verdeutlichen: 99,99 % aller Abfragen liefern relevante Ergebnisse. Hurra!
Betrachten Sie es nun aus der Sicht der LLM-Auswertungsvorlage. Wenn die Ausgabe in allen Fällen „relevant“ wäre, ohne dass man sich die Daten überhaupt ansieht, würde sie in 99,99 % der Fälle richtig liegen. Gleichzeitig würden aber alle (wohl wichtigsten) Fälle übersehen – diejenigen, in denen das Modell irrelevante Ergebnisse liefert, und genau die müssen wir abfangen.
In diesem Beispiel wäre die Genauigkeit hoch, aber die Präzision und die Wiederauffindbarkeit (oder eine Kombination aus beiden, wie der F1-Wert) wären sehr niedrig. Präzision und Recall sind hier ein besseres Maß für die Leistung Ihres Modells.
Eine weitere nützliche Visualisierung ist die Konfusionsmatrix, mit der Sie den Prozentsatz der richtigen und falschen Vorhersagen für relevante und irrelevante Beispiele sehen können.
So führen Sie LLM-Evals für Ihre App durch
Zu diesem Zeitpunkt sollten Sie sowohl Ihr Modell als auch Ihre getestete LLM-Evaluierung haben. Sie haben sich selbst bewiesen, dass die Bewertung funktioniert und haben ein quantifizierbares Verständnis ihrer Leistung im Vergleich zur Grundwahrheit. Zeit, mehr Vertrauen zu schaffen!
Jetzt können wir unser Eval tatsächlich in unserer Anwendung verwenden. Dies wird uns helfen zu messen, wie gut unsere LLM-Anwendung funktioniert und herauszufinden, wie wir sie verbessern können.
Das LLM-System-Eval führt Ihr gesamtes System mit einem zusätzlichen Schritt aus. Zum Beispiel:
- Sie rufen Ihre Eingabedokumente ab und fügen sie zusammen mit den Beispieleingaben des Benutzers zu Ihrer Eingabeaufforderungsvorlage hinzu.
- Sie geben diese Eingabeaufforderung an den LLM weiter und erhalten die Antwort.
- Sie übermitteln die Eingabeaufforderung und die Antwort an Ihre Auswertung und fragen sie, ob die Antwort für die Eingabeaufforderung relevant ist.
Es empfiehlt sich, LLM-Evaluierungen nicht mit einmaligem Code durchzuführen, sondern mit einer Bibliothek, die integrierte Prompt-Vorlagen enthält. Dies erhöht die Reproduzierbarkeit und ermöglicht eine flexiblere Auswertung, bei der man verschiedene Teile austauschen kann.
Diese Evaluierungen müssen in drei verschiedenen Umgebungen funktionieren:
Vor-Produktion
Wenn Sie das Benchmarking durchführen.
Vorproduktionsphase
Wenn Sie Ihre Anwendung testen. Dies ähnelt in gewisser Weise dem Konzept der Offline-Evaluierung in der traditionellen ML. Es geht darum, die Leistung Ihres Systems zu verstehen, bevor Sie es an Kunden ausliefern.
Produktion
Wenn die Anwendung bereitgestellt wird. Das Leben ist chaotisch. Daten verändern sich, Benutzer verändern sich, Modelle verändern sich, und das alles auf unvorhersehbare Weise. Nur weil Ihr System einmal gut funktioniert hat, heißt das nicht, dass dies auch am Dienstag um 19 Uhr der Fall sein wird. Evals helfen Ihnen, die Leistung Ihres Systems nach der Bereitstellung kontinuierlich zu verstehen.
Zu berücksichtigende Fragen
Wie viele Zeilen sollten Sie abfragen?
Das LLM-Auswertungs-LLM-Paradigma ist keine Zauberei. Sie können nicht jedes Beispiel auswerten, das Ihnen jemals untergekommen ist – das wäre unerschwinglich teuer. Allerdings müssen Sie bereits bei der Beschriftung durch den Menschen Stichproben nehmen, und mit mehr Automatisierung wird dies nur einfacher und billiger. Sie können also mehr Zeilen abfragen als bei der menschlichen Beschriftung.
Welche Evals sollten Sie verwenden?
Das hängt weitgehend von Ihrem Anwendungsfall ab. Für die Suche und das Abrufen von Daten eignen sich Relevanzbewertungen am besten. Für Toxizität und Halluzinationen gibt es spezifische Auswertungsmuster (mehr dazu weiter oben).
Einige dieser Auswertungen sind für die Fehlersuche wichtig. Die Genauigkeit bei der Beantwortung von Fragen könnte eine gute Gesamtkennzahl sein, aber wenn Sie untersuchen, warum diese Kennzahl in Ihrem System nicht die gewünschte Leistung erbringt, werden Sie feststellen, dass dies beispielsweise auf eine schlechte Abfrage zurückzuführen ist. Es gibt oft viele mögliche Gründe, und Sie benötigen möglicherweise mehrere Metriken, um der Sache auf den Grund zu gehen.
Welches Modell sollten Sie verwenden?
Es ist unmöglich zu sagen, dass ein Modell für alle Fälle am besten geeignet ist. Stattdessen sollten Sie Modellevaluierungen durchführen, um herauszufinden, welches Modell für Ihre Anwendung am besten geeignet ist. Je nachdem, was für Ihre Anwendung sinnvoll ist, müssen Sie möglicherweise auch Kompromisse zwischen Recall und Präzision in Betracht ziehen. Mit anderen Worten, betreiben Sie etwas Datenwissenschaft, um dies für Ihren speziellen Fall zu verstehen.
Schlussfolgerung
Die Fähigkeit, die Leistung Ihrer Anwendung zu bewerten, ist sehr wichtig, wenn es um Produktionscode geht. In der Ära der LLMs sind die Probleme schwieriger geworden, aber glücklicherweise können wir die Technologie der LLMs selbst nutzen, um uns bei der Durchführung von Evaluierungen zu helfen. LLM-Evaluierung sollte das gesamte System testen und nicht nur das zugrundeliegende LLM-Modell – denken Sie daran, wie wichtig eine Prompt-Vorlage für die Benutzererfahrung ist. Bewährte Praktiken, standardisierte Werkzeuge und kuratierte Datensätze vereinfachen die Aufgabe der Entwicklung von LLM-Systemen.
Quelle: medium.com