Ratlosigkeit der Sprachmodelle

Nov 27 2022
Ratlosigkeit ist eine Bewertungsmetrik, die die Qualität von Sprachmodellen misst. In diesem Beitrag werden wir diskutieren, was Perplexität ist und wie sie für das beliebte Modell GPT2 berechnet wird.

Ratlosigkeit ist eine Bewertungsmetrik, die die Qualität von Sprachmodellen misst. In diesem Beitrag werden wir diskutieren, was Perplexität ist und wie sie für das beliebte Modell GPT2 berechnet wird .

Was ist ein Sprachmodell?

Möglicherweise haben Sie bereits von großen Sprachmodellen (LLM) wie BERT, GPT2 usw. gehört, die das Gesicht der Verarbeitung natürlicher Sprache verändert haben. Es gibt verschiedene Arten von Sprachmodellen wie statistische Sprachmodelle und neuronale Sprachmodelle. Die SLMs basieren auf Statistiken im gegebenen Text, wobei die neuronalen Sprachmodelle unter Verwendung neuronaler Netzwerkarchitekturen trainiert werden.

Im Kern ist ein Sprachmodell (LM) nichts anderes als eine Wahrscheinlichkeitsverteilung über eine Menge von Wörtern, die als Vokabular des Modells bekannt ist. Es gibt die Wahrscheinlichkeit an, mit der ein bestimmtes Wort im Vokabular unter Berücksichtigung aller seiner vorherigen Wörter vorkommt. Üblicherweise wird dasjenige Wort, das die maximale Wahrscheinlichkeit hat, als das nächste vorhergesagte Wort in der Folge ausgewählt.

Diese Wahrscheinlichkeit kann berechnet werden, indem eine Folge von bedingten Wahrscheinlichkeiten für jedes Wort mit seinen vorherigen Wörtern multipliziert wird, was die Wahrscheinlichkeit dieser Folge ergibt.

Zum Beispiel wird die gemeinsame Wahrscheinlichkeit des Beispielsatzes „Es ist ein schöner Tag“ wie unten gezeigt geschrieben. Die Berechnung dieser Wahrscheinlichkeit hilft uns, die nächsten oder fehlenden Wörter in einer Folge vorherzusagen, und so lernt das Modell die Nuancen der Sprache – daher der Begriff Sprachmodell.

P(It,is,a,beautiful,day) = P(day|beautiful, a, is, it) * 
                           P(beautiful|a, is, it) * P(a|is, it) * P(is|it)

In den nächsten Abschnitten werden wir einige wichtige Begriffe erörtern, die zur Berechnung der Perplexität verwendet werden.

Entropie

Entropie ist ein Maß, das die Unsicherheit quantifiziert und als Kehrwert der Wahrscheinlichkeit des Eintretens eines Ereignisses erhalten wird. Je höher die Wahrscheinlichkeit, desto geringer die Unsicherheit. Daher besteht das Ziel des Sprachmodells darin, die Entropie beim Erzeugen einer Folge von Wörtern zu minimieren, die den Trainingssequenzen ähnlich sind. Die Formel zur Berechnung der Entropie ist wie unten angegeben, wobei P(x) die Wahrscheinlichkeit des Wortes x ist.

Formel für die Entropie einer Wahrscheinlichkeitsverteilung

Hier ist ein großartiges Video, um Entropie genauer zu verstehen:https://youtube.com/watch?v=YtebGVx-Fxw

Entropie kreuzen

Cross Entropy vergleicht zwei Wahrscheinlichkeitsverteilungen P(x) und Q(x). Im Kontext von Sprachmodellen vergleichen wir die vorhergesagte Wahrscheinlichkeitsverteilung über die Wörter mit der tatsächlichen Wahrscheinlichkeitsverteilung. Hier ist P(x) die tatsächliche Wahrscheinlichkeitsverteilung und Q(x) die vom Modell vorhergesagte Verteilung. Die Kreuzentropie wird dann wie unten gezeigt berechnet und kann als Verlustfunktion zum Trainieren von Sprachmodellen verwendet werden.

Nehmen wir an, wir haben ein Sprachmodell, das mit einem Vokabular von nur 5 Wörtern „sonnig“, „Tag“, „schön“, „Landschaft“, „Wolken“ trainiert wurde. Jetzt wollen wir die Ratlosigkeit des Modells berechnen, wenn es den Ausdruck „schöne Landschaft“ sieht.

Lassen Sie uns die Kreuzentropie anhand eines einfachen Beispiels in PyTorch berechnen.

# Get the needed libraries
import torch
from torch.nn import functional as F

Diese Logits werden dann an eine Softmax- Funktion übergeben, die die Werte normalisiert und in eine Wahrscheinlichkeitsverteilung umwandelt. Dies ist die vorhergesagte Wahrscheinlichkeitsverteilung.

tensor([[-0.7891,  1.3421,  0.4929,  0.0715, -0.0910],
        [ 0.9024, -0.8675,  0.8498, -1.0331,  0.5531]])

F.softmax(input, dim = -1)

Predicted:

tensor([[0.0575, 0.4841, 0.2071, 0.1359, 0.1155],
        [0.3369, 0.0574, 0.3196, 0.0486, 0.2375]])

Target/Actual: tensor([2, 3])

tensor([[0, 0, 1, 0, 0],
        [0, 0, 0, 1, 0]])

Loss for First Word:
(((- 0 * log(0.0575)) + (- 0 * log(0.4841)) + (- 1 * log(0.2071)) + 
  (- 0 * log(0.1359)) + (- 0 * log(0.1155))) = 1.5745535105805986

Loss for Second Word:
(((- 0 * log(0.3369)) + (- 0 * log(0.0574)) + (- 0* log(0.3196)) + 
  (- 1* log(0.0486)) + (- 0 * log(0.2375))) = 3.024131748075689

Loss = (1.5745535105805986 + 3.024131748075689)/2 = 2.299

loss = torch.nn.CrossEntropyLoss()

output = loss(input, target)
output

Loss: tensor(2.299)

Ratlosigkeit bedeutet intuitiv, überrascht zu sein. Wir messen, wie sehr das Modell überrascht ist, wenn es neue Daten sieht. Je geringer die Ratlosigkeit, desto besser ist das Training.

Ratlosigkeit wird als Exponent des aus dem Modell erhaltenen Verlusts berechnet. Im obigen Beispiel können wir sehen, dass die Perplexität unseres Beispielmodells in Bezug auf den Ausdruck „schöne Landschaft“ 9,97 beträgt. Die Formel für Perplexität ist der Exponent des Mittelwerts der logarithmischen Wahrscheinlichkeit aller Wörter in einer Eingabesequenz.

Formel der Ratlosigkeit von HuggingFace

Lassen Sie uns nun die Verwirrung von zwei Sätzen mit GPT2 vergleichen und sehen, wie verwirrend sie ist. Wir laden zunächst einen Tokenizer und einen Kausalkopf für das GPT2-Modell von HuggingFace:

from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")
inputs = tokenizer("ABC is a startup based in New York City and Paris", return_tensors = "pt")
loss = model(input_ids = inputs["input_ids"], labels = inputs["input_ids"]).loss
ppl = torch.exp(loss)
print(ppl)

Output: 29.48

inputs_wiki_text = tokenizer("Generative Pretrained Transformer is an opensource artificial intelligence created by OpenAI in February 2019", return_tensors = "pt")
loss = model(input_ids = inputs_wiki_text["input_ids"], labels = inputs_wiki_text["input_ids"]).loss
ppl = torch.exp(loss)
print(ppl)

Output: 211.81

Ratlosigkeit wird normalerweise nur verwendet, um festzustellen, wie gut ein Modell den Trainingssatz gelernt hat. Andere Metriken wie BLEU , ROUGE usw. werden auf dem Test-Set verwendet, um die Testleistung zu messen.

In diesem Beitrag haben wir Cross Entropy, Perplexity eines Sprachmodells diskutiert und berechnet. Im nächsten Beitrag werden wir über den GLUE-Benchmark sprechen, der die allgemeine Sprachverständnisfähigkeit populärer Sprachmodelle misst.

Verweise