← Alle Artikel

Technik · 15. August 2026 · aktualisiert am 31. August 2026 · 6 Min. Lesezeit

von Ugur Aydogan

All-but-the-Top: warum Kontexto die Wortvektoren entzerrt

Nimm ein frisch trainiertes Worteinbettungsmodell, such dir ein beliebiges Zielwort aus und lass dir die zehn ähnlichsten Wörter ausgeben. Dann nimm ein völlig anderes Zielwort und mach dasselbe. In vielen Fällen überschneiden sich die Listen. Nicht bei den Wörtern, die inhaltlich passen, sondern bei einer Handvoll sehr häufiger Allerweltsbegriffe, die überall vorne mitlaufen.

Das ist kein Fehler im Training. Es ist eine bekannte geometrische Eigenschaft von Worteinbettungen, und sie macht ein Spiel wie Kontexto ohne Gegenmaßnahme fast unspielbar. Deshalb läuft jeder Vektor bei uns durch eine Nachbearbeitung, bevor auch nur ein einziger Rang berechnet wird.

Das Problem: alle Vektoren zeigen ein bisschen in dieselbe Richtung

Man stellt sich einen Vektorraum gern als sauber zentrierte Wolke vor, in der die Wörter gleichmäßig um den Nullpunkt herum verteilt liegen und die Richtung eines Vektors reine Bedeutung kodiert.

So sieht es nicht aus. Der Mittelwert aller Wortvektoren ist deutlich von null verschieden. Die gesamte Wolke ist verschoben. Und darüber hinaus gibt es einige wenige Richtungen im Raum, in denen extrem viel Varianz steckt und die von fast allen Wörtern geteilt werden.

Diese dominanten Richtungen kodieren keine Bedeutung. Sie kodieren im Wesentlichen, wie häufig ein Wort im Trainingskorpus vorkommt. Mu und Viswanath haben das 2018 in der Arbeit All-but-the-Top: Simple and Effective Postprocessing for Word Representations systematisch beschrieben und gezeigt, dass das Entfernen dieser Richtungen die Qualität von Ähnlichkeitsmessungen messbar verbessert.

Für Kontexto ist der Effekt handfest. Die Kosinus-Ähnlichkeit misst den Winkel zwischen zwei Vektoren. Wenn alle Vektoren eine gemeinsame Komponente haben, dann ist der Winkel zwischen beliebigen zwei Wörtern systematisch kleiner, als er inhaltlich sein müsste. Und Wörter mit besonders großer gemeinsamer Komponente, also besonders häufige Wörter, sind zu allem ähnlich.

Ohne Korrektur läge bei einem Zielwort wie Erdbeere nicht Himbeere vorne, sondern eine Ansammlung von hochfrequenten Substantiven, die zu allem passen. Der Rang würde messen, wie gebräuchlich dein Wort ist, nicht wie nah es an der Bedeutung liegt. Das Spiel würde sich in eine Häufigkeitsraterei verwandeln.

Die Korrektur in zwei Schritten

Der Eingriff ist erstaunlich klein. Er besteht aus zwei Operationen auf der Matrix aller 80.000 Vokabelvektoren.

Schritt 1: Mittelwert abziehen. Für jede der 300 Dimensionen wird der Durchschnitt über alle Wörter gebildet, und dieser Durchschnittsvektor wird von jedem einzelnen Wortvektor subtrahiert. Danach liegt der Schwerpunkt der Wolke im Nullpunkt. Das ist gewöhnliches Zentrieren, wie man es aus der Statistik kennt.

Schritt 2: die drei stärksten Hauptkomponenten entfernen. Auf die zentrierte Matrix wird eine Singulärwertzerlegung angewandt. Sie liefert die Richtungen im Raum, sortiert danach, wie viel Varianz jede erklärt. Von jedem Wortvektor wird anschließend seine Projektion auf die drei stärksten dieser Richtungen abgezogen.

Anschaulich: Wenn du eine Punktwolke hast, die insgesamt schräg im Raum liegt, entfernst du damit genau die Schräglage, ohne die Feinstruktur innerhalb der Wolke anzutasten. Die Bedeutungsstruktur bleibt vollständig erhalten, der gemeinsame Drift verschwindet.

Warum ausgerechnet drei? Das ist der Wert aus der ursprünglichen Arbeit und die Größenordnung, die sich in der Praxis bewährt hat. Entfernt man zu wenige Komponenten, bleibt der Häufigkeitseffekt sichtbar. Entfernt man zu viele, greift man in echte Bedeutungsachsen ein und die Nachbarschaften werden willkürlich.

Warum das im Spiel spürbar ist

Die Auswirkung merkst du an einer Stelle, an der du sie wahrscheinlich nicht vermutest: bei Wörtern, die eindeutig danebenliegen.

Nach der Entzerrung bekommt ein häufiges, aber thematisch unpassendes Wort einen ehrlich schlechten Rang. Genau das macht die Information verwertbar. Wenn du Zeit eingibst und Rang 4.100 siehst, dann ist das eine echte Aussage über das Zielwort, nämlich dass es nichts mit zeitlichen Konzepten zu tun hat. Ohne Entzerrung hätte Zeit fast immer einen mittelmäßig guten Rang bekommen, egal worum es geht, und die Eingabe wäre wertlos gewesen.

Das ist der Grund, warum die Strategie aus Die besten Startwörter für Kontexto überhaupt funktioniert. Ein breites Alltagswort als erster Zug liefert nur dann ein Signal, wenn sein Rang tatsächlich von der Bedeutung abhängt und nicht von seiner Häufigkeit.

Warum ausgerechnet drei Hauptkomponenten

Die Zahl drei wirkt willkürlich, und sie ist es zur Hälfte auch. Sie stammt aus der ursprünglichen Arbeit zu diesem Verfahren, die eine einfache Faustregel vorschlägt: ungefähr die Dimension geteilt durch hundert. Bei 300 Dimensionen sind das drei.

Interessanter als die Herkunft ist, was passiert, wenn man daneben liegt. Entfernt man zu wenig, etwa nur den Mittelwert, bleibt ein Teil des Häufigkeitseffekts stehen: Allerweltswörter liegen weiterhin bei jedem beliebigen Zielwort zu weit vorn, und ein guter Rang für Zeit sagt dann mehr über Zeit als über das Rätsel.

Entfernt man zu viel, etwa zehn Komponenten, verschwindet irgendwann echte Bedeutung. Die vorderen Hauptkomponenten kodieren nicht ausschließlich Häufigkeit, sie tragen auch breite semantische Gegensätze wie konkret gegen abstrakt. Wer sie herausrechnet, macht Wörter ähnlich, die es nicht sind, und die Rangliste wird flau.

Praktisch heißt das: Der Effekt ist zwischen zwei und vier Komponenten stabil und kippt danach. Drei ist eine gute Wahl, keine magische.

Was ohne die Entzerrung im Spiel passieren würde

Der Unterschied lässt sich am besten als Gedankenexperiment beschreiben, weil er das ganze Spielprinzip betrifft.

Ohne Entzerrung hätten die häufigsten deutschen Wörter zu jedem Zielwort einen überdurchschnittlich hohen Ähnlichkeitswert. Eine Rangliste sähe dann bei jedem Rätsel ungefähr gleich aus: vorne Mensch, Zeit, Jahr, Arbeit, Leben, egal ob das Ziel Strand oder Rechnung heißt.

Das hätte zwei Folgen, und beide würden das Spiel zerstören. Erstens wäre die optimale Strategie trivial: Man spielt immer dieselben zwanzig häufigen Wörter und bekommt immer ähnlich gute Ränge, ohne etwas über das Zielwort zu lernen. Zweitens wären genau die Wörter unbrauchbar, die als Sonden am nützlichsten sind. Ein breites Alltagswort taugt als Startwort nur, wenn sein Rang tatsächlich schwankt, je nachdem wo das Ziel liegt.

Genau diese Schwankungsbreite ist die Zielgröße im Startwort-Benchmark, und sie existiert nur, weil der Häufigkeitsanteil vorher entfernt wurde. Die Entzerrung ist damit keine Optimierung am Rand, sondern die Voraussetzung dafür, dass Strategie im Spiel überhaupt möglich ist.

Was die Entzerrung nicht repariert

Sie behebt einen systematischen geometrischen Effekt. Sie macht das Modell nicht klüger.

Was bleibt, sind die Eigenheiten des Trainingskorpus. fastText für Deutsch ist auf Common Crawl und Wikipedia trainiert, also auf dem, was Menschen ins Netz schreiben. Themen, über die viel geschrieben wird, sind feiner aufgelöst als Themen, über die wenig geschrieben wird. Wörter mit mehreren Bedeutungen bekommen einen einzigen Vektor, der irgendwo zwischen ihren Bedeutungen liegt: Bank sitzt zwischen Möbelstück und Geldinstitut, und keiner der beiden Nachbarschaften gehört sie ganz an.

Auch Gegensätze bleiben nah beieinander. heiß und kalt erscheinen in praktisch identischen Kontexten, deshalb liegen ihre Vektoren dicht zusammen. Für die Rangberechnung heißt das: Ein guter Rang bedeutet „im richtigen Bedeutungsfeld“, nicht „inhaltlich zutreffend“. Wer bei Zielwort kalt das Wort heiß eingibt, bekommt einen sehr guten Rang und ist trotzdem beim Gegenteil. Mehr dazu in Warum hat mein Wort einen schlechten Rang?.

Nachrechnen

Der Schritt ist im Repository nachvollziehbar. Die Funktion heißt postprocess_vectors, sie steht in backend/prepare.py und ist nicht länger als acht Zeilen: Matrix bilden, Mittelwert abziehen, Singulärwertzerlegung, die obersten drei Zeilen der rechten Singulärvektoren nehmen, Projektion abziehen, fertig.

Wer es selbst ausprobieren will, braucht dafür kein Kontexto. Lade ein beliebiges vortrainiertes Einbettungsmodell, berechne die zehn nächsten Nachbarn für ein paar Zielwörter, wende die zwei Schritte an und berechne die Nachbarn erneut. Der Unterschied ist ohne Messwerkzeug sichtbar: Die generischen Dauergäste verschwinden aus den vorderen Plätzen und machen Platz für Wörter, die inhaltlich etwas mit dem Zielwort zu tun haben.

Wie aus den entzerrten Vektoren dann eine einzelne Zahl wird, erklärt Kosinus-Ähnlichkeit einfach erklärt.