fastText: das Modell hinter den Rängen
Kontexto könnte mit verschiedenen Verfahren laufen. Wir nutzen fastText, und das ist kein Zufall: Es folgt direkt daraus, dass hier auf Deutsch gespielt wird. Wäre Kontexto ein englisches Spiel, hätten wir vielleicht anders entschieden.
In diesem Artikel geht es um das Modell selbst. Was Worteinbettungen überhaupt sind und wie sie entstehen, erklären wir in Worteinbettungen erklärt. Hier schauen wir uns an, warum gerade fastText zu Kontexto passt und wo seine Grenzen liegen.
Welches Modell genau
Wir nutzen cc.de.300.bin, eines der fastText-Modelle für 157 Sprachen,
die Meta AI Research veröffentlicht hat. Im Namen stecken drei Angaben:
- cc steht für Common Crawl, eine öffentliche Sammlung von Webseiten. Dazu kommt die deutsche Wikipedia.
- de ist die Sprache. Das Modell hat nur aus deutschen Texten gelernt, nicht aus mehreren Sprachen.
- 300 ist die Zahl der Werte, mit denen jedes Wort beschrieben wird.
Die Datei enthält solche Werte für rund zwei Millionen Zeichenfolgen. Das ist wörtlich gemeint: Texte aus dem Internet enthalten Tippfehler, Reste von Webseiten-Code, Internetadressen und englische Brocken. Die echten deutschen Wörter, mit denen man spielen kann, filtern wir erst danach heraus. Wie das geht, steht in Wie das Lösungswort entsteht.
Was fastText anders macht als ältere Verfahren
Ältere Verfahren wie word2vec sehen ein Wort als unteilbares Ganzes. Sie lernen für jede Wortform eine eigene Adresse auf der Bedeutungskarte. Ein Wort, das beim Lernen nicht vorkam, gibt es für sie einfach nicht.
fastText zerlegt jedes Wort zusätzlich in kurze Buchstabenstücke. Fachleute nennen sie
n-Gramme. Aus Strandkorb werden unter anderem str, tra, ran, and, ndk, dko, kor,
orb und längere Stücke. Die Adresse eines Wortes setzt sich dann aus dem ganzen Wort und all
diesen Stücken zusammen.
Daraus folgen zwei Dinge, und beide sind für Deutsch wichtig.
Auch seltene Wörter bekommen eine brauchbare Adresse. Selbst wenn Strandkorb in den Texten
kaum vorkommt, kennt das Modell stran aus Strand und korb aus Korb und kann daraus etwas
zusammensetzen. Ein Modell, das nur ganze Wörter kennt, hätte für dieses Wort gar nichts.
Verwandte Wörter rücken von selbst zusammen. Strandkorb, Strandbad und Sandstrand teilen
das Stück stran. Dadurch landen sie näher beieinander, ohne dass jemand diese Verwandtschaft
eintragen musste.
Für eine Sprache, in der man ständig neue Wörter zusammensetzt, ist das genau richtig. Im Englischen,
wo fire department aus zwei einzelnen, häufigen Wörtern besteht, wäre der Vorteil viel kleiner.
Was diese Stärke kostet
Buchstabenstücke kennen keine Bedeutung. Sie kennen nur Buchstaben.
Teilen zwei Wörter viele Buchstaben, haben aber inhaltlich nichts miteinander zu tun, rücken sie
trotzdem ein Stück zusammen. Wachstum und Wachs, Ausland und Auslauf, Verkehr und
verkehrt.
Beim Spielen heißt das: Ein überraschend guter Rang liegt nicht immer an der Bedeutung, manchmal nur an den Buchstaben. Wie du beides auseinanderhältst, steht in Komposita und Teilwörter.
Das ist ein Tausch, kein Fehler. Ohne Buchstabenstücke hätte ein großer Teil des deutschen Wortschatzes überhaupt keine Adresse.
Was das Modell nicht kann
Drei Grenzen solltest du kennen, weil du sie im Spiel bemerkst.
Ein Wort, eine Adresse. fastText gibt jedem Wort genau eine feste Adresse. Bank bekommt eine
einzige Zahlenliste, egal ob Sitzbank oder Geldinstitut gemeint ist. Neuere Sprachmodelle berechnen
die Bedeutung eines Wortes je nach Satz, in dem es steht. fastText macht das nicht, weil es dafür
einen Satz bräuchte. Beim Raten gibt es aber keinen Satz, nur ein einzelnes Wort.
Keine Wortarten. Das Modell unterscheidet nicht zwischen Hauptwort, Verb und Adjektiv. Beim Spielen ist das sogar praktisch, denn nur deshalb kannst du durch einen Wechsel der Wortart neue Richtungen ausprobieren.
Kein aktueller Stand. Das Modell kennt die Sprache bis zu dem Zeitpunkt, an dem es trainiert wurde. Wörter, die danach aufkamen, kennt es nicht.
Warum kein größeres, neueres Modell
Naheliegende Frage: Warum nehmen wir kein modernes Sprachmodell, das den Zusammenhang versteht?
Dafür gibt es einen praktischen und einen grundsätzlichen Grund.
Der praktische: Während du spielst, rechnet Kontexto nichts. Alle Ränge sind vorher berechnet, dein Versuch wird nur nachgeschlagen. Ein Modell, das bei jedem Wort rechnen müsste, würde jeden Versuch spürbar langsamer machen und viel mehr Serverleistung brauchen.
Der grundsätzliche: Ein Modell, das den Zusammenhang versteht, braucht einen Zusammenhang. Beim Raten gibst du aber nur ein einzelnes Wort ohne Satz ein. Man müsste künstlich einen Satz drumherum bauen, und welcher Satz das ist, würde das Ergebnis mitbestimmen. Für diese Aufgabe ist ein Modell mit festen Adressen also nicht die schlechtere Wahl, sondern die passende.
Wie eine Adresse überhaupt entsteht
Bisher hieß es nur: Jedes Wort bekommt 300 Zahlen. Woher kommen die? Die Antwort ist überraschend einfach.
Das Lernen funktioniert wie ein riesiges Ratespiel mit Texten. Das Programm geht Satz für Satz durch und stellt immer dieselbe Frage: Welche Wörter stehen wahrscheinlich neben dem Wort in der Mitte? Am Anfang sind alle Zahlen zufällig, die Antworten also falsch. Nach jedem Fehler werden die beteiligten Zahlen ein winziges Stück so verschoben, dass der Fehler kleiner geworden wäre.
Macht man das milliardenfach, passiert etwas, das niemand eingebaut hat: Wörter mit ähnlichen
Nachbarn brauchen ähnliche Zahlen, damit die Vorhersage klappt. Hund und Katze stehen beide vor
füttern, Tierarzt und streicheln, also rücken ihre Zahlen zusammen. Das Modell versteht also
keine Bedeutung. Bedeutung entsteht nebenbei, weil es Nachbarn vorhersagen soll.
Das erklärt auch die bekannteste Eigenheit des Spiels. Gegenteile wie heiß und kalt stehen in
fast denselben Sätzen, vor Wasser, Wetter und Getränk. Für die Lernaufgabe sind sie
austauschbar, also landen sie nebeneinander. Ein sehr guter Rang heißt deshalb „richtiges Thema“ und
nicht „gleiche Bedeutung“.
Warum 300 Zahlen und nicht 50 oder 1.000
300 ist weder Zufall noch reine Gewohnheit. Es ist ein Kompromiss zwischen zwei Fehlern, die in entgegengesetzte Richtungen gehen.
Mit zu wenigen Zahlen, etwa 50, müssen sich verschiedene Bedeutungen dieselben Richtungen teilen. Die Karte hat dann nicht genug Platz, um Tierart, Größe, Verwendung und Tonfall gleichzeitig auseinanderzuhalten. Bedeutungen kleben aneinander, die nichts miteinander zu tun haben, und die Rangliste wird beliebig.
Mit zu vielen Zahlen, etwa 1.000, braucht das Modell viel mehr Text, um alle verlässlich zu füllen. Bei häufigen Wörtern ist das kein Problem, bei seltenen schon: Ihre Zahlen bleiben dann nah an ihrem zufälligen Anfang und enthalten mehr Rauschen als Bedeutung. Für ein Spiel, in dem auch selten geratene Wörter einen sinnvollen Rang bekommen sollen, wäre das der schlimmere Fehler.
Dazu kommt einfach der Speicherplatz. 80.000 Wörter mal 300 Zahlen lassen sich noch bequem verarbeiten. Mit 1.000 Zahlen wäre das Ganze mehr als dreimal so groß, ohne dass du als Spieler einen Unterschied merken würdest.
Was die Trainingstexte bestimmen
Etwas, das beim Spielen immer wieder überrascht: Das Modell zeigt nicht die deutsche Sprache an sich, sondern die deutschen Texte, aus denen es gelernt hat. Das sind Texte aus dem Internet und die deutsche Wikipedia.
Daraus folgen zwei Eigenheiten, die du im Spiel merkst. Erstens sind Begriffe aus Technik, Politik und Popkultur besonders gut vernetzt, weil im Internet viel darüber geschrieben wird. Zweitens sind alltägliche Dinge, über die man selten schreibt, weil sie so selbstverständlich sind, schwächer vertreten, als man erwarten würde.
Auch der Zeitpunkt steckt im Modell. Es kennt den Sprachgebrauch bis zum Ende seines Trainings, nicht danach. Hat sich die Bedeutung eines Wortes seitdem verschoben, hat es noch die alten Nachbarn. Für ein Ratespiel ist das kein Problem, es erklärt aber, warum manche Verbindungen etwas altmodisch wirken.
Vom Modell zum Rang
Der Weg vom Modell zu der Zahl, die du siehst, hat vier Schritte. Alle vier passieren lange bevor du spielst:
- Filtern. Aus rund zwei Millionen Zeichenfolgen nehmen wir die 80.000 häufigsten echten deutschen Wörter.
- Aufräumen. Wir entfernen den Anteil, der vor allem Häufigkeit zeigt, damit häufige Wörter nicht automatisch ähnlich wirken, siehe All-but-the-Top.
- Sortieren. Für jedes Rätsel rechnen wir aus, wie nah alle 80.000 Wörter dem geheimen Wort sind, und sortieren sie.
- Speichern. Die Reihenfolge legen wir als Rangliste ab, eine Datei pro Rätsel. Angezeigt wird dir dein Platz unter den rund 51.000 gewerteten Grundformen.
Während du spielst, bleibt nur noch: Wort nachschlagen, Platz lesen, Zahl zeigen. Kein Modell im Speicher, keine große Rechnung, kein Warten. Wie aus der Ähnlichkeit eine lesbare Zahl wird, erklärt Kosinus-Ähnlichkeit.