← Alle Artikel

Technik · 6. Juni 2026 · aktualisiert am 31. August 2026 · 7 Min. Lesezeit

von Ugur Aydogan

fastText: das Modell hinter den Rängen

Kontexto könnte auf mehreren Verfahren laufen. Es läuft auf fastText, und diese Entscheidung ist nicht beliebig, sondern eine direkte Folge davon, dass hier Deutsch gespielt wird. Wäre Kontexto ein englisches Spiel, wäre die Wahl womöglich anders ausgefallen.

Dieser Text handelt vom Modell selbst. Was Worteinbettungen überhaupt sind und wie sie entstehen, steht in Worteinbettungen erklärt.

Welches Modell genau

Verwendet wird cc.de.300.bin, eines der von Meta AI Research veröffentlichten fastText-Modelle für 157 Sprachen. Drei Angaben stecken in dem Namen:

  • cc steht für Common Crawl, ein öffentliches Archiv gecrawlter Webseiten, ergänzt um die deutsche Wikipedia.
  • de ist die Sprache. Es ist kein mehrsprachiges Modell, sondern ausschließlich auf deutschem Text trainiert.
  • 300 ist die Zahl der Dimensionen pro Wortvektor.

Die Datei enthält Vektoren für rund zwei Millionen Zeichenketten. „Zeichenketten“ ist dabei wörtlich zu nehmen: Ein Web-Korpus enthält Tippfehler, HTML-Reste, Domainnamen und englische Brocken. Die Filterung auf tatsächlich spielbare deutsche Wörter passiert erst danach und ist ein eigener Arbeitsschritt, beschrieben in Wie das Lösungswort entsteht.

Was fastText von seinen Vorgängern unterscheidet

Ältere Verfahren wie word2vec behandeln ein Wort als unteilbare Einheit. Sie lernen einen Vektor pro Wortform, und Wörter, die nicht im Training vorkamen, existieren für sie schlicht nicht.

fastText zerlegt jedes Wort zusätzlich in Zeichen-n-Gramme, also in Abschnitte von n aufeinanderfolgenden Zeichen. Für Strandkorb entstehen unter anderem str, tra, ran, and, ndk, dko, kor, orb und längere Varianten. Der endgültige Wortvektor ist die Summe aus dem Vektor der ganzen Wortform und den Vektoren aller dieser Abschnitte.

Zwei Konsequenzen folgen daraus, und beide sind für Deutsch wichtig.

Seltene Wörter bekommen brauchbare Vektoren. Auch wenn Strandkorb im Korpus kaum vorkommt, kennt das Modell stran aus Strand und korb aus Korb und kann daraus etwas zusammensetzen. Bei einem wortbasierten Modell gäbe es für dieses Wort gar nichts.

Verwandte Wörter teilen sich Struktur automatisch. Strandkorb, Strandbad und Sandstrand überlappen im Abschnitt stran, also ziehen sich ihre Vektoren an, ohne dass jemand diese Verwandtschaft eingetragen hätte.

Für eine Sprache, in der man beliebig viele neue Wörter durch Zusammensetzung bilden kann, ist das genau die richtige Eigenschaft. Im Englischen, wo fire department zwei getrennte, jeweils häufige Wörter sind, wäre der Gewinn deutlich kleiner.

Der Preis dieser Eigenschaft

Zeichenabschnitte kennen keine Bedeutung. Sie kennen Buchstabenfolgen.

Wenn zwei Wörter viele Zeichen teilen, aber inhaltlich nichts miteinander zu tun haben, zieht die Teilwortkomponente ihre Vektoren trotzdem ein Stück zueinander. Wachstum und Wachs, Ausland und Auslauf, Verkehr und verkehrt.

Beim Spielen heißt das: Ein überraschend guter Rang ist nicht immer ein Bedeutungssignal, manchmal ist er ein Buchstabensignal. Wie man beides auseinanderhält, steht in Komposita und Teilwörter.

Es ist ein Tausch, kein Fehler. Ohne Zeichenabschnitte gäbe es für einen erheblichen Teil des deutschen Wortschatzes überhaupt keine Vektoren.

Was das Modell nicht kann

Drei Grenzen, die man kennen sollte, weil sie im Spiel sichtbar werden.

Ein Wort, ein Vektor. fastText ist ein statisches Modell. Bank bekommt eine einzige Zahlenreihe, egal ob Sitzmöbel oder Geldinstitut gemeint ist. Moderne Sprachmodelle berechnen den Vektor eines Worts abhängig vom Satz, in dem es steht. fastText tut das nicht, weil es dafür einen Satz bräuchte, und beim Raten gibt es keinen Satz, sondern nur ein einzelnes Wort.

Keine Wortarten. Das Modell unterscheidet nicht zwischen Substantiv, Verb und Adjektiv. Das ist beim Spielen sogar nützlich, weil es Wortartwechsel als Strategie überhaupt erst ermöglicht.

Keine Aktualität. Das Modell hat einen Trainingsstand. Begriffe, die danach aufkamen, existieren darin nicht.

Warum kein größeres Modell

Die naheliegende Frage: Warum kein aktuelles Sprachmodell, das Kontext berücksichtigt?

Es gibt einen praktischen und einen prinzipiellen Grund.

Praktisch: Kontexto berechnet zur Laufzeit nichts. Alle Ränge sind vorberechnet, ein Rateversuch ist ein Tabellenzugriff. Ein Modell, das pro Eingabe rechnen müsste, würde jeden einzelnen Zug spürbar verlangsamen und deutlich mehr Serverkapazität brauchen.

Prinzipiell: Ein kontextabhängiges Modell braucht Kontext. Beim Raten gibst du ein einzelnes Wort ohne Satz ein. Man müsste künstlich einen Satz drumherum bauen, und die Wahl dieses Satzes würde das Ergebnis mitbestimmen. Ein statisches Modell ist für diese Aufgabe nicht die schlechtere Wahl, sondern die passende.

Wie ein Vektor überhaupt entsteht

Bis hierhin steht da: Jedes Wort bekommt 300 Zahlen. Die naheliegende Frage ist, woher diese Zahlen kommen, und die Antwort ist erstaunlich schlicht.

Das Training läuft als Ratespiel über riesige Textmengen. Der Algorithmus schiebt ein Fenster über jeden Satz und stellt an jeder Stelle dieselbe Aufgabe: Gegeben das Wort in der Mitte, welche Wörter stehen wahrscheinlich daneben? Am Anfang sind alle Vektoren zufällig, die Vorhersagen also wertlos. Nach jeder Fehlvorhersage werden die beteiligten Zahlen ein winziges Stück in die Richtung verschoben, die den Fehler verkleinert hätte.

Wiederholt man das milliardenfach, passiert etwas, das niemand explizit einprogrammiert hat: Wörter, die in ähnlichen Nachbarschaften vorkommen, brauchen ähnliche Vektoren, um dieselbe Vorhersage zu erlauben. Hund und Katze stehen beide vor füttern, Tierarzt und streicheln, also rücken ihre Vektoren zusammen. Bedeutung ist hier nichts, was das Modell versteht. Sie ist ein Nebenprodukt der Aufgabe, Nachbarschaft vorherzusagen.

Das erklärt auch die bekannteste Eigenheit des Spiels. Gegensätze wie heiß und kalt stehen in praktisch identischen Sätzen, vor Wasser, Wetter und Getränk. Für die Trainingsaufgabe sind sie damit austauschbar, und ihre Vektoren landen nebeneinander. Ein sehr guter Rang heißt deshalb „im richtigen Bedeutungsfeld“ und nicht „inhaltlich zutreffend“.

Warum 300 Zahlen und nicht 50 oder 1.000

Die Zahl 300 ist kein Zufall und keine reine Konvention. Sie ist ein Kompromiss zwischen zwei Fehlern, die in entgegengesetzte Richtungen wirken.

Zu wenige Dimensionen, etwa 50, zwingen unterschiedliche Bedeutungen auf dieselben Achsen. Der Raum hat schlicht nicht genug Richtungen, um Tierart, Größe, Verwendungszweck und Stilebene gleichzeitig auseinanderzuhalten. Bedeutungen kleben dann aneinander, die nichts miteinander zu tun haben, und die Rangliste wird beliebig.

Zu viele Dimensionen, etwa 1.000, brauchen entsprechend mehr Text, um verlässlich gefüllt zu werden. Für häufige Wörter ist das kein Problem, für seltene schon: Ihre Vektoren bleiben dann nah an ihrer zufälligen Ausgangslage und tragen mehr Rauschen als Signal. Für ein Spiel, in dem auch selten geratene Wörter einen sinnvollen Rang bekommen sollen, ist das der schlechtere Fehler.

Dazu kommt der schlichte Speicherbedarf. 80.000 Wörter mal 300 Zahlen ergeben eine Matrix, die sich noch bequem verarbeiten lässt. Bei 1.000 Dimensionen wäre sie dreimal so groß, ohne dass die Rangliste dadurch für Spielende erkennbar besser würde.

Was der Trainingstext bestimmt

Ein Punkt, der beim Spielen regelmäßig für Verwunderung sorgt: Das Modell bildet nicht die deutsche Sprache ab, sondern die deutschen Texte, auf denen es trainiert wurde. Das sind Common Crawl, also ein breiter Querschnitt des Webs, und die deutsche Wikipedia.

Daraus folgen zwei sichtbare Eigenheiten. Erstens sind Begriffe aus Technik, Politik und Popkultur überdurchschnittlich gut vernetzt, weil im Web viel darüber geschrieben wird. Zweitens sind Alltagsdinge, über die man selten schreibt, weil sie zu selbstverständlich sind, schlechter aufgestellt als ihre Häufigkeit im Sprechen vermuten ließe.

Auch der Zeitpunkt steckt im Modell. Es kennt den Sprachgebrauch bis zum Trainingsstand, nicht danach. Wörter, deren Bedeutung sich seither verschoben hat, tragen die ältere Nachbarschaft. Für ein Ratespiel ist das kein Schaden, aber es erklärt, warum manche Verbindungen altmodisch wirken.

Von der Modelldatei zum Rang

Der Weg vom Modell zu der Zahl, die du siehst, hat vier Schritte, und alle vier passieren offline, lange bevor du spielst:

  1. Filtern. Aus den rund zwei Millionen Zeichenketten werden die 80.000 häufigsten echten deutschen Wörter ausgewählt.
  2. Entzerren. Mittelwert und die drei stärksten Hauptkomponenten werden entfernt, damit Häufigkeit nicht als Ähnlichkeit durchschlägt, siehe All-but-the-Top.
  3. Sortieren. Für jedes Rätsel wird die Kosinus-Ähnlichkeit aller 80.000 Wörter zum Zielwort berechnet und absteigend sortiert.
  4. Speichern. Die Positionen werden als Rangtabelle abgelegt, eine Datei pro Rätsel.
Vom Sprachmodell zur RangtabelleFünf aufeinanderfolgende Schritte: Aus dem deutschen fastText-Modell mit rund zwei Millionen Zeichenketten werden 80.000 echte Wörter gefiltert. Deren Vektoren werden entzerrt, indem Mittelwert und die drei stärksten Hauptkomponenten entfernt werden. Danach wird für jedes Rätsel die Kosinus-Ähnlichkeit aller Wörter zum Zielwort berechnet und sortiert. Das Ergebnis ist eine Rangtabelle je Rätsel. Alle Schritte laufen offline vor dem Spiel.1. fastTextcc.de.300, rund 2 Mio. Zeichenketten2. Filtern80.000 echte deutsche Wörter3. EntzerrenMittelwert und 3 Hauptkomponenten entfernt4. SortierenKosinus-Ähnlichkeit zum Zielwort5. Rangtabelleeine Datei je Rätsel
Alle fünf Schritte laufen offline, bevor jemand spielt. Zur Laufzeit bleibt ein Nachschlagen in der fertigen Tabelle, deshalb ist die Antwort sofort da und der Rang über den ganzen Tag stabil.

Zur Laufzeit bleibt: Wort nachschlagen, Position lesen, Zahl ausgeben. Kein Modell im Arbeitsspeicher, keine Matrixmultiplikation, keine Wartezeit. Wie aus dem Kosinuswert eine lesbare Zahl wird, erklärt Kosinus-Ähnlichkeit.