Warum Wittgensteins Theorien die Grundlage aller modernen NLP bleibenDie Vektordarstellung von Wörtern ist vielleicht eine der schönsten und romantischsten Ideen in der Geschichte der künstlichen Intelligenz. Die Philosophie der Sprache ist ein Zweig der Philosophie, der die Beziehung zwischen Sprache und Realität untersucht und wie man Sprache sinnvoll und verständlich macht. Eine Vektordarstellung von Wörtern ist eine sehr spezifische Methode in der modernen Verarbeitung natürlicher Sprache (NLP). In gewissem Sinne ist es ein empirischer Beweis für die Theorien von Ludwig Wittgenstein, einem der wichtigsten Philosophen des letzten Jahrhunderts. Für Wittgenstein ist die Verwendung von Wörtern ein Schritt in einem sozialen Sprachspiel
, das von Community-Mitgliedern gespielt wird, die sich verstehen. Die Bedeutung eines Wortes hängt nur von seiner Nützlichkeit in einem Kontext ab, es entspricht nicht eins zu eins mit einem Objekt aus der realen Welt.
Für eine große Klasse von Fällen, in denen wir das Wort "Bedeutung" verwenden, kann es definiert werden, da die Bedeutung des Wortes seine Verwendung in der Sprache ist .
Natürlich ist es sehr schwierig, die genaue Bedeutung eines Wortes zu verstehen. Es sind viele Aspekte zu berücksichtigen:
- auf welches Objekt sich das Wort beziehen kann;
- Welcher Teil der Sprache ist das?
- ob es ein idiomatischer Ausdruck ist;
- alle Bedeutungsschattierungen;
- usw.
All diese Aspekte laufen letztendlich auf eines hinaus: zu wissen, wie man das Wort benutzt.
Das Konzept der
Bedeutung und warum ein geordneter Satz von Zeichen eine eindeutige Konnotation in der Sprache hat, ist nicht nur eine philosophische Frage, sondern wahrscheinlich auch das größte Problem, mit dem sich KI-Spezialisten, die mit NLP arbeiten, befassen müssen. Für eine russischsprachige Person ist es ziemlich offensichtlich, dass ein „Hund“ ein „Tier“ ist und eher wie eine „Katze“ als wie ein „Delphin“ aussieht, aber diese Aufgabe ist für eine systematische Lösung alles andere als einfach.
Nachdem wir Wittgensteins Theorien leicht korrigiert haben, können wir sagen, dass Hunde wie Katzen aussehen, weil sie oft in denselben Kontexten vorkommen: Sie können wahrscheinlich Hunde und Katzen finden, die mit den Wörtern „Zuhause“ und „Garten“ assoziiert sind, als mit den Wörtern „Meer“. und der "Ozean". Es ist diese Intuition, die
Word2Vec zugrunde
liegt , einer der bekanntesten und erfolgreichsten Implementierungen der Vektordarstellung von Wörtern. Heutzutage sind Maschinen weit davon entfernt
, lange Texte und Passagen wirklich zu
verstehen , aber die Vektordarstellung von Wörtern ist zweifellos die einzige Methode, mit der wir in den letzten zehn Jahren den größten Schritt in diese Richtung getan haben.
Von BoW zu Word2Vec
Bei vielen Computerproblemen besteht das erste Problem darin, die Daten in numerischer Form darzustellen. Wörter und Sätze sind in dieser Form wahrscheinlich am schwierigsten vorstellbar. In unserem Setup werden
D Wörter aus dem Wörterbuch ausgewählt, und jedem Wort kann ein numerischer Index
i zugewiesen werden.
Seit vielen Jahrzehnten wird ein klassischer Ansatz gewählt, um jedes Wort als numerischen D-dimensionalen Vektor aller Nullen mit Ausnahme von Eins an Position i darzustellen. Betrachten Sie als Beispiel ein Wörterbuch mit drei Wörtern: "Hund", "Katze" und "Delphin" (D = 3). Jedes Wort kann als dreidimensionaler Vektor dargestellt werden: "Hund" entspricht [1,0,0], "Katze" [0,1,0] und "Delphin" offensichtlich [0,0,1]. Das Dokument kann als D-dimensionaler Vektor dargestellt werden, wobei jedes Element die Vorkommen des i-ten Wortes im Dokument zählt. Dieses Modell heißt Bag-of-Words (BoW) und wird seit Jahrzehnten verwendet.
Trotz des Erfolgs in den 90er Jahren fehlte der BoW die einzig interessante Funktion von Wörtern: ihre Bedeutung. Wir wissen, dass zwei sehr unterschiedliche Wörter ähnliche Bedeutungen haben können, auch wenn sie sich vom Standpunkt der Rechtschreibung völlig unterscheiden. "Katze" und "Hund" sind beide Haustiere, "König" und "Königin" sind nahe beieinander, "Apfel" und "Zigarette" sind völlig unabhängig voneinander. Wir
wissen das, aber im BoW-Modell befinden sich alle diese Wörter im Vektorraum im gleichen Abstand: 1.
Das gleiche Problem gilt für Dokumente: Mit BoW können wir schließen, dass Dokumente nur dann ähnlich sind, wenn sie das gleiche Wort eine bestimmte Anzahl von Malen enthalten. Und hier kommt Word2Vec, das viele philosophische Fragen, die Wittgenstein vor 60 Jahren in seinen
Philosophischen Studien erörterte, in die Begriffe des maschinellen Lernens einführt.
In einem Wörterbuch der Größe D, in dem das Wort durch seinen Index identifiziert wird, besteht das Ziel darin, die N-dimensionale Vektordarstellung jedes Wortes für N << D zu berechnen. Idealerweise möchten wir, dass es sich um einen dichten Vektor handelt, der einige semantisch spezifische Aspekte der Bedeutung darstellt. Zum Beispiel möchten wir idealerweise, dass "Hund" und "Katze" ähnliche Darstellungen haben, und "Apfel" und "Zigarette" sind im Vektorraum sehr weit entfernt.
Wir möchten einige grundlegende algebraische Operationen an Vektoren durchführen, z. B.
+−=
. Ich möchte, dass der Abstand zwischen den Vektoren „Schauspieler“ und „Schauspielerin“ im Wesentlichen mit dem Abstand zwischen „Prinz“ und „Prinzessin“ übereinstimmt. Obwohl diese Ergebnisse ziemlich utopisch sind, zeigen Experimente, dass Word2Vec-Vektoren Eigenschaften aufweisen, die diesen sehr nahe kommen.
Word2Vec lernt daraus nicht direkt Ansichten, sondern erhält sie als Nebenprodukt der Klassifizierung ohne Lehrer. Der durchschnittliche NLP-Wortkorpus-Datensatz besteht aus einer Reihe von Sätzen. Jedes Wort in einem Satz erscheint im Kontext der umgebenden Wörter. Der Zweck des Klassifikators besteht darin, das Zielwort vorherzusagen, wobei Kontextwörter als Eingabe betrachtet werden. Für den Satz „brauner Hund spielt im Garten“ werden dem Modell die Wörter [braun, spielt im Garten] als Eingabe zur Verfügung gestellt, und sie sollte das Wort „Hund“ vorhersagen. Diese Aufgabe wird als Lernen ohne Lehrer betrachtet, da der Korpus nicht mit einer externen Quelle der Wahrheit gekennzeichnet werden muss: Mit einer Reihe von Sätzen können Sie immer automatisch positive und negative Beispiele erstellen. Wenn wir als positives Beispiel „brauner Hund, der im Garten spielt“ betrachten, können wir viele negative Muster erstellen, wie z. B. „braune Ebene, die im Garten spielt“ oder „braune Traube, die im Garten spielt“, wobei das Zielwort „Hund“ durch zufällige Wörter aus dem Datensatz ersetzt wird.
Und jetzt ist die Anwendung von Wittgensteins Theorien völlig klar: Der Kontext ist entscheidend für die Vektordarstellung von Wörtern, da es wichtig ist, dem Wort in seinen Theorien eine Bedeutung beizumessen. Wenn zwei Wörter ähnliche Bedeutungen haben, haben sie ähnliche Darstellungen (ein kleiner Abstand im N-dimensionalen Raum), nur weil sie häufig in ähnlichen Kontexten vorkommen. Daher haben "Katze" und "Hund" möglicherweise enge Vektoren, da sie häufig in denselben Kontexten auftreten. Es ist nützlich, dass das Modell ähnliche Vektordarstellungen für sie verwendet, da dies das bequemste ist, was sie tun kann. um bessere Ergebnisse bei der Vorhersage von zwei Wörtern basierend auf ihren Kontexten zu erzielen.
Der Originalartikel bietet zwei verschiedene Architekturen: CBOW und Skip-Gramm. In beiden Fällen werden verbale Darstellungen zusammen mit einer bestimmten Klassifizierungsaufgabe unterrichtet, um die bestmöglichen Vektordarstellungen von Wörtern bereitzustellen, die die Modellleistung maximieren.
Abbildung 1. Vergleich von CBOW- und Skip-Gramm-ArchitekturenCBOW steht für Continuous Bag of Words und hat die Aufgabe, ein Wort mit Blick auf den Kontext als Eingabe zu erraten. Die Ein- und Ausgänge werden als D-dimensionale Vektoren dargestellt, die in einen N-dimensionalen Raum mit gemeinsamen Gewichten projiziert werden. Wir suchen nur Projektionsgewichte. Tatsächlich ist die Vektordarstellung von Wörtern D × N-Matrizen, wobei jede Zeile ein Wörterbuchwort darstellt. Alle Kontextwörter werden an einer Position projiziert und ihre Vektordarstellungen werden gemittelt. Daher hat die Wortreihenfolge keinen Einfluss auf das Ergebnis.
Skip-Gramm macht dasselbe, aber umgekehrt: Es versucht, Kontextwörter
C vorherzusagen, wobei das Zielwort als Eingabe verwendet wird. Die Aufgabe, mehrere Kontextwörter vorherzusagen, kann in eine Reihe unabhängiger binärer Klassifizierungsprobleme umformuliert werden, und nun besteht das Ziel darin, das Vorhandensein (oder Fehlen) von Kontextwörtern vorherzusagen.
In der Regel benötigt Skip-Gramm mehr Zeit für das Training und liefert häufig etwas bessere Ergebnisse. Wie üblich haben unterschiedliche Anwendungen unterschiedliche Anforderungen, und es ist schwierig, im Voraus vorherzusagen, welche das beste Ergebnis erzielen. Trotz der Einfachheit des Konzepts ist das Erlernen dieser Art von Architektur aufgrund der Datenmenge und der Verarbeitungsleistung, die zur Optimierung der Gewichte erforderlich sind, ein wahrer Albtraum. Glücklicherweise finden Sie im Internet einige vorab trainierte Vektordarstellungen von Wörtern, und Sie können den Vektorraum - den interessantesten - mit nur wenigen Zeilen Python-Code untersuchen.
Mögliche Verbesserungen: GloVe und fastText
Gegenüber dem klassischen Word2Vec wurden in den letzten Jahren viele mögliche Verbesserungen vorgeschlagen. Die beiden interessantesten und am häufigsten verwendeten sind GloVe (Stanford University) und fastText (von Facebook entwickelt). Sie versuchen, die Einschränkungen des ursprünglichen Algorithmus zu identifizieren und zu überwinden.
In einem
originalen wissenschaftlichen Artikel betonen die Autoren von GloVe, dass das Modelltraining in einem separaten lokalen Kontext die globalen Korpusstatistiken nur unzureichend nutzt. Der erste Schritt zur Überwindung dieser Einschränkung besteht darin, eine globale Matrix
X zu erstellen, in der jedes Element
i, j die Anzahl der Verweise auf das Wort
j im Kontext des Wortes
i zählt . Die zweite wichtige Idee dieses Dokuments ist das Verständnis, dass nur Wahrscheinlichkeiten allein nicht ausreichen, um Werte zuverlässig vorherzusagen, und dass auch eine Matrix für das gleichzeitige Auftreten erforderlich ist, aus der bestimmte Aspekte von Werten direkt extrahiert werden können.
Betrachten Sie zwei Wörter i und j, die von besonderem Interesse sind. Nehmen wir der Vollständigkeit halber an, dass wir uns für das Konzept eines thermodynamischen Zustands interessieren, für den wir i =
und j =
. Die Beziehung dieser Wörter kann untersucht werden, indem das Verhältnis ihrer Wahrscheinlichkeiten des gemeinsamen Auftretens unter Verwendung verschiedener klingender Wörter, k, untersucht wird. Für Wörter k, die sich auf Eis beziehen, aber nicht auf Dampf, sagen wir k =
[Feststoff, Materiezustand], erwarten wir, dass das Verhältnis Pik / Pjk größer sein wird. In ähnlicher Weise sollte für die Wörter k, die mit Dampf verbunden sind, aber nicht mit Eis, sagen wir k =
, das Verhältnis klein sein. Für Wörter wie „Wasser“ oder „Mode“, die entweder gleichermaßen mit Eis und Dampf verwandt sind oder keine Beziehung zu ihnen haben, sollte dieses Verhältnis nahe an der Einheit liegen.
Dieses Wahrscheinlichkeitsverhältnis wird zum Ausgangspunkt für die Untersuchung der Vektordarstellung von Wörtern. Wir wollen Vektoren berechnen können, die in Kombination mit einer bestimmten Funktion
F dieses Verhältnis im Vektordarstellungsraum konstant halten.
Abbildung 2. Die gebräuchlichste Formel für die Vektordarstellung von Wörtern im GloVe-ModellDie Funktion F und die Abhängigkeit vom Wort k können vereinfacht werden, indem die Exponentiale und festen Offsets ersetzt werden, was die Funktion der Minimierung von Fehlern durch die Methode
J der kleinsten Quadrate ergibt:
Abbildung 3. Die letzte Funktion zur Berechnung der Vektordarstellung von Wörtern im GloVe-ModellDie
f- Funktion ist eine Zählfunktion, die versucht, sehr häufige und seltene Übereinstimmungen nicht zu belasten, während
bi und
bj Offsets sind, um die Symmetrie der Funktion wiederherzustellen. In den letzten Absätzen des Artikels wird gezeigt, dass sich das Training dieses Modells am Ende nicht sehr vom Training des klassischen Skip-Gramm-Modells unterscheidet, obwohl GloVe in empirischen Tests beiden Word2Vec-Implementierungen überlegen ist.
Andererseits korrigiert
fastText einen völlig anderen Nachteil von Word2Vec: Wenn das Modelltraining mit der direkten Codierung eines D-dimensionalen Vektors beginnt, wird die interne Struktur von Wörtern ignoriert. Anstatt die Codierung von Wörtern, die verbale Darstellungen lernen, direkt zu codieren, bietet fastText an, N-Gramm Zeichen zu untersuchen und Wörter als Summe von N-Gramm-Vektoren darzustellen. Zum Beispiel wird mit N = 3 das Wort "Blume" als 6 verschiedene 3-Gramm [<fl, flo, low, Debt, wer, er>] plus eine spezielle Sequenz <blume> codiert. Beachten Sie, wie spitze Klammern verwendet werden, um den Anfang und das Ende eines Wortes anzuzeigen. Somit wird ein Wort durch seinen Index im Wörterbuch der Wörter und die Menge der darin enthaltenen N-Gramme dargestellt, die mit der Hash-Funktion Ganzzahlen zugeordnet werden. Mit dieser einfachen Verbesserung können Sie N-Gramm-Darstellungen zwischen Wörtern aufteilen und Vektordarstellungen von Wörtern berechnen, die nicht im Lernfall enthalten waren.
Experimente und mögliche Anwendungen
Wie bereits erwähnt, benötigen Sie zur
Verwendung dieser Vektordarstellungen nur wenige Zeilen Python-Code. Ich führte mehrere Experimente mit dem
50-dimensionalen GloVe-Modell durch , das auf 6 Milliarden Wörtern aus Wikipedia-Sätzen trainiert wurde, sowie mit dem
300-dimensionalen fastText-Modell, das auf Common Crawl trainiert wurde (was 600 Milliarden Token ergab). Dieser Abschnitt enthält nur Links zu den Ergebnissen beider Experimente, um die Konzepte zu beweisen und ein allgemeines Verständnis des Themas zu vermitteln.
Zunächst wollte ich einige grundlegende Ähnlichkeiten von Wörtern überprüfen, die einfachste, aber wichtige Eigenschaft ihrer Vektordarstellung. Wie erwartet waren die ähnlichsten Wörter mit dem Wort "Hund" "Katze" (0,92), "Hunde" (0,85), "Pferd" (0,79), "Welpe" (0,78) und "Haustier" (0,77). Beachten Sie, dass die Pluralform fast dieselbe Bedeutung hat wie der Singular. Auch hier ist es für uns ziemlich trivial, das zu sagen, aber für ein Auto ist das überhaupt keine Tatsache. Jetzt Essen: Die ähnlichsten Wörter für "Pizza" sind "Sandwich" (0,87), "Sandwiches" (0,86), "Snack" (0,81), "Backwaren" (0,79), "Pommes" (0,79) und "Burger" ( 0,78). Es ist sinnvoll, die Ergebnisse sind zufriedenstellend und das Modell verhält sich ziemlich gut.
Der nächste Schritt besteht darin, einige grundlegende Berechnungen im Vektorraum durchzuführen und zu überprüfen, wie korrekt das Modell einige wichtige Eigenschaften erhalten hat. In der Tat ergibt sich als Ergebnis der Berechnung der Vektoren
+-
das Ergebnis "Schauspielerin" (0,94), und als Ergebnis der Berechnung des
+-
wird das Wort "König" (0,86) erhalten. Wenn der Wert
a:b=c:d
, sollte das Wort
d im Allgemeinen als
d=b-a+c
. Auf der nächsten Ebene kann man sich nicht vorstellen, wie diese Vektoroperationen überhaupt geografische Aspekte beschreiben: Wir wissen, dass Rom die Hauptstadt Italiens ist, da Berlin die Hauptstadt Deutschlands ist, nämlich
+-= (0.88)
und
+-= (0.83)
.
Und jetzt zum lustigen Teil. Nach der gleichen Idee werden wir versuchen, Konzepte zu addieren und zu subtrahieren. Was ist zum Beispiel das amerikanische Äquivalent von Pizza für Italiener?
+-= (0.60)
, dann
(0.59)
. Seit ich nach Holland gezogen bin, sage ich immer, dass dieses Land eine Mischung aus drei Dingen ist: ein bisschen amerikanischer Kapitalismus, schwedische Kälte und Lebensqualität und schließlich eine Prise neapolitanischer
Fülle . Indem wir den ursprünglichen Satz leicht ändern und ein wenig Schweizer Präzision entfernen, erhalten wir Holland (0,68) als Ergebnis der
++-
: ziemlich beeindruckend, um ehrlich zu sein.
Abbildung 4. An alle niederländischen Leser: Nehmen Sie dies als Kompliment, okay?Hier und
hier finden Sie gute praktische Ressourcen, um diese vorab trainierten Vektordarstellungen zu verwenden.
Gensim ist eine einfache und vollständige Python-Bibliothek mit einigen gebrauchsfertigen algebraischen und ähnlichen Funktionen. Diese vorab trainierten Vektordarstellungen können auf verschiedene (und nützliche) Arten verwendet werden, um beispielsweise die Leistung von Stimmungsanalysatoren oder Sprachmodellen zu verbessern. Unabhängig von der Aufgabe wird die Verwendung von N-dimensionalen Vektoren die Effizienz des Modells im Vergleich zur direkten Codierung erheblich verbessern. Natürlich wird das Training in Vektordarstellungen in einem bestimmten Bereich das Ergebnis weiter verbessern, aber dies kann möglicherweise übermäßigen Aufwand und Zeit erfordern.