Was ist ein Wort-Embedding?
Ein Wort-Embedding ist eine Liste von Zahlen, die die Bedeutung eines Wortes beschreibt. Wörter mit ähnlicher Bedeutung bekommen ähnliche Zahlen, deshalb findet ein Programm so auch Wörter, die eine reine Zählung nicht verbindet.
Wer „Mensa“ sucht, will vielleicht auch „Kantine“ finden. Das ist die Frage dieser Lektion, und auch, wo solche Modelle danebenliegen.
Am Ende dieser Lektion
Notiz
Ich kann erklären, wie Wörter zu Vektoren werden und wo Sprachmodelle danebenliegen.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Embedding | die Zahlenliste, die ein Wort beschreibt |
| Abstand | wie weit zwei Vektoren auseinander liegen |
| Aufmerksamkeit | das Gewicht, mit dem ein Modell auf ein anderes Wort schaut |
| Verzerrung | ein Muster der Trainingsdaten, das ein Modell wiederholt |
| Halluzination | ein flüssiger Text, der nicht stimmt |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Bedeutung wird zur Nähe zwischen Vektoren
Eine Zählung sieht „Mensa“ und „Kantine“ als völlig verschiedene Wörter. Ein Embedding gibt jedem Wort eine Zahlenliste, die aus dem Text gelernt wird, in dem es vorkommt. Wörter, die in ähnlichen Sätzen stehen, bekommen ähnliche Listen.
Der Abstand zweier Listen misst dann die Nähe der Bedeutung. Wir rechnen mit zwei erfundenen Zahlen je Wort.
Beispiel: erfundene Vektoren und Abstände zu „mensa“
| Wort | Vektor | Abstand zum Quadrat zu mensa |
|---|---|---|
| mensa | [3, 8] | 0 |
| kantine | [3, 7] | (3 - 3)² + (8 - 7)² = 1 |
| bibliothek | [0, 9] | 9 + 1 = 10 |
| tee | [8, 1] | 25 + 49 = 74 |
| kaffee | [9, 0] | 36 + 64 = 100 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Das nächste Wort suchen
# Erfundene Vektoren: (Essen und Trinken, Gebäude).
vektoren = {
"kaffee": [9, 0],
"tee": [8, 1],
"mensa": [3, 8],
"kantine": [3, 7],
"bibliothek": [0, 9],
}
wort = "mensa"
for anderes in vektoren:
if anderes != wort:
a = vektoren[wort]
b = vektoren[anderes]
abstand = (a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2
print(anderes, abstand)
# Welches Wort liegt am nächsten? Probieren Sie "kaffee".
Einen Abstand zum Quadrat nachrechnen
docker exec jupyter python3 -c "print((3 - 3) ** 2 + (8 - 7) ** 2)"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Rechnen mit Bedeutungen
Der Unterschied zwischen zwei Vektoren kann eine Beziehung enthalten. Im erfundenen Beispiel führt der Weg von „deutschland“ zu „berlin“ von einem Land zu seiner Hauptstadt.
Wendet man denselben Schritt auf „frankreich“ an, landet man bei „paris“. Echte Embeddings treffen so etwas nur ungefähr, nicht sicher.
Denselben Schritt auf ein anderes Wort anwenden
# Erfundene Vektoren: (Land oder Stadt, Region).
deutschland = [4, 1]
berlin = [7, 1]
frankreich = [4, 3]
ziel = []
for n in range(2):
ziel.append(berlin[n] - deutschland[n] + frankreich[n])
print(ziel)
# Vergleichen Sie mit dem Vektor von paris: [7, 3].
Dieselbe Rechnung im Terminal
docker exec jupyter python3 -c "print(7 - 4 + 4, 1 - 1 + 3)"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Aufmerksamkeit entscheidet, welche Wörter zählen
Ein großes Sprachmodell schaut bei jedem Wort auf alle früheren Wörter. Es gibt jedem ein Gewicht. Das heißt Aufmerksamkeit (englisch attention).
Im Satz „Der Hund jagt die Katze, weil er Hunger hat“ muss das Modell wissen, wer „er“ ist. Dafür muss es auf „Hund“ stärker schauen als auf „Katze“.
Beispiel: erfundene Gewichte für das Wort „er“
| Früheres Wort | Gewicht |
|---|---|
| Der | 0,05 |
| Hund | 0,60 |
| jagt | 0,10 |
| Katze | 0,25 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele denken, ein Sprachmodell schlage Fakten nach. Es wählt wahrscheinliche nächste Wörter. Sind sie auch wahr, stimmt die Antwort. Sind sie es nicht, klingt die falsche Antwort genauso sicher.
Ein Modell erfindet Sätze, die nie vorkamen
Das kleine Modell des Labs zählt in einem kurzen englischen Text, welches Wort auf welches folgt. Dann schreibt es vier neue Sätze.
Jedes Wortpaar darin steht im Text, aber der erste Satz „the shop opens at the hour .“ steht nirgends und ist falsch. Das ist eine Halluzination im Kleinen.
Vier Sätze aus Zählungen schreiben lassen
docker exec jupyter python3 steps/generate.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Der Trainingstext prägt die Embeddings
Ein Embedding lernt aus Texten. Steht ein Beruf dort meist mit einem Geschlecht oder ein Land meist mit einem Vorurteil, liegen die Vektoren entsprechend nah. Das ist Verzerrung aus den Daten.
Sie ist in einer einzelnen Antwort oft nicht zu sehen. Prüfen Sie deshalb Ergebnisse an Beispielen aus allen Gruppen.