Perplexity
Perplexity ist die exponentierte Kreuzentropie eines Modells für Text. So berechnest du den Wert, vergleichst Modelle fair und erfährst, wo die Metrik über die Bewertung hinaus zum Einsatz kommt.
Perplexität ist eine Metrik dafür, wie gut ein probabilistisches Modell eine Sequenz vorhersagt. Sie wird als Exponentialfunktion der durchschnittlichen negativen Log-Likelihood berechnet, die das Modell jedem tatsächlichen nächsten Token zuweist. Niedrigere Werte sind besser. Eine Perplexität von 10 bedeutet, dass das Modell im Durchschnitt so unsicher ist, als würde es in jedem Schritt gleichmäßig aus 10 Optionen wählen. Deshalb wird dieser Wert häufig als effektiver Verzweigungsfaktor interpretiert. Frederick Jelinek, Robert Mercer, Lalit Bahl und James Baker führten die Metrik 1977 bei IBM ein, um den Schwierigkeitsgrad von Aufgaben der Spracherkennung zu messen. Sie ist weiterhin die Standardmetrik zur intrinsischen Bewertung von Sprachmodellen. OpenAIs GPT-2 mit 1,5 Milliarden Parametern erreichte 2019 beispielsweise eine Perplexität von 17,48 beim WikiText-103-Benchmark, ohne darauf trainiert worden zu sein.
Das Wort bezeichnet außerdem zwei voneinander unabhängige Dinge. Perplexity AI ist ein Unternehmen für eine KI-Suchmaschine, und t-SNE verwendet einen Perplexitäts-Hyperparameter, der ungefähr festlegt, wie viele Nachbarn jeder Punkt berücksichtigt, wenn t-SNE eine zweidimensionale Karte hochdimensionaler Daten erstellt.
Perplexität berechnen#
Für eine Sequenz aus N Tokens gilt: Perplexität = exp(-(1/N) x Summe der Logarithmen von p(token_i | alle vorherigen Tokens)). Die Größe im Exponenten ist die Kreuzentropie zwischen dem Text und den Vorhersagen des Modells. Dieselbe Verlustfunktion wird zum Trainieren großer Sprachmodelle (LLMs) verwendet. Bei natürlichen Logarithmen ist die Basis e; bei Logarithmen zur Basis 2 ist sie 2. Beide ergeben dieselbe Perplexität. Der Kreuzentropieverlust von PyTorch verwendet natürliche Logarithmen und mittelt standardmäßig über die Tokens. Die Perplexität eines Sprachmodells ist daher einfach exp(loss).
import math
# Probability the model assigned to each correct next token
token_probs = [0.50, 0.25, 0.80, 0.40]
# Cross-entropy is the average negative log-likelihood, in nats
cross_entropy = -sum(math.log(p) for p in token_probs) / len(token_probs)
print(f"Cross-entropy: {cross_entropy:.3f}, perplexity: {math.exp(cross_entropy):.2f}")
# A model that spreads probability evenly over 10 tokens has perplexity 10
uniform = -sum(math.log(0.1) for _ in token_probs) / len(token_probs)
print(f"Uniform perplexity: {math.exp(uniform):.2f}")Die vier Wahrscheinlichkeiten ergeben eine Kreuzentropie von 0.805 Nats und eine Perplexität von 2.24. Das Modell verhält sich also, als würde es bei jedem Schritt zwischen etwa zwei gleich wahrscheinlichen Tokens wählen. Der Gleichverteilungsfall bestätigt die Interpretation als Verzweigungsfaktor: Eine Wahrscheinlichkeit von 0.1 für jedes korrekte Token ergibt genau 10.
Bei langen Dokumenten ist Vorsicht geboten. Ein Modell mit festem Kontextfenster bewertet Text in Abschnitten. Tokens am Anfang eines nicht überlappenden Abschnitts sehen fast keinen Kontext, was die Perplexität erhöht. Bei einer Auswertung mit gleitendem Fenster überlappen sich die Abschnitte, sodass jedes Token so viel vorausgehenden Kontext erhält, wie das Modell zulässt. Dafür ist mehr Rechenaufwand erforderlich.
Modelle fair vergleichen#
Perplexität lässt sich nur zwischen Modellen vergleichen, die mit demselben Text und derselben Tokenisierung bewertet wurden. Ein Modell mit einem größeren Vokabular teilt Text in weniger, schwerer vorherzusagende Tokens auf. Seine Perplexität pro Token ist daher nicht direkt mit der eines Modells vergleichbar, das kleinere Tokens verwendet. Wird die gesamte Log-Likelihood durch die Anzahl der Bytes oder Zeichen geteilt und als Bits pro Byte oder Bits pro Zeichen angegeben, entfällt diese Abhängigkeit.
Die Testdaten dürfen außerdem nicht in den Trainingsdaten enthalten sein. Ein Modell, das eine Textpassage schon einmal gesehen hat, weist ihr eine ungewöhnlich hohe Wahrscheinlichkeit zu. Diese Form der Datenleckage lässt die Perplexität besser aussehen als die tatsächliche Leistung. Derselbe Effekt ermöglicht Angriffe zur Ableitung der Zugehörigkeit, bei denen Text mit ungewöhnlich niedriger Perplexität als wahrscheinlich in den Trainingsdaten enthalten markiert wird.
Die Perplexität bewertet die Vorhersage des nächsten Tokens bei einem festgelegten Text. Chatmodelle werden durch Instruction Tuning und bestärkendes Lernen mit menschlichem Feedback (RLHF) darauf trainiert, Anweisungen zu befolgen und menschliche Präferenzen zu berücksichtigen. Daher vergleicht man sie anhand von Aufgaben-Benchmarks und Bewertungen menschlicher Präferenzen.
Anwendungen jenseits des Modellvergleichs#
Die Datenaufbereitung ist ein wichtiger Anwendungsbereich. Die CCNet-Pipeline, die Forschende von Facebook AI 2019 veröffentlichten, bewertete Common-Crawl-Seiten mit einem auf Wikipedia trainierten Sprachmodell und teilte sie anhand der Perplexität in oberes, mittleres und unteres Drittel auf. Das Drittel mit der niedrigsten Perplexität galt als Text höchster Qualität. Viele Pipelines für das Vortraining filtern Webdaten auf ähnliche Weise – ein Schritt der Datenbereinigung im großen Maßstab. KI-Textdetektoren wie GPTZero bewerten ebenfalls die Perplexität, da von einem Sprachmodell erzeugter Text meist vorhersehbarer ist als von Menschen verfasster Text.
Die Formel gilt für jedes Modell, das mit Kreuzentropie trainiert wird. Klassifikationsmodelle von Ultralytics YOLO26 werden mit der mittleren Kreuzentropie trainiert. Daher ist exp(Validierungsverlust) die Perplexität über die tatsächlichen Klassenlabels. Ein Validierungsverlust von 0.35 entspricht einer Perplexität von etwa 1.42. Das bedeutet, dass das Modell sein Vertrauen bei einem durchschnittlichen Bild so verteilt, als würde es zwischen ungefähr 1.4 Klassen schwanken.










