Algorithmen zum Einbetten von Wörtern in Bezug auf die Leistung

11

Ich versuche, ungefähr 60 Millionen Phrasen in einen Vektorraum einzubetten und dann die Kosinusähnlichkeit zwischen ihnen zu berechnen . Ich habe sklearns CountVectorizermit einer speziell entwickelten Tokenizer-Funktion verwendet, die Unigramme und Bigramme erzeugt. Es stellt sich heraus, dass ich eine enorme Anzahl von Spalten berücksichtigen muss, die linear in der Anzahl der Zeilen sind, um aussagekräftige Darstellungen zu erhalten. Dies führt zu unglaublich spärlichen Matrizen und beeinträchtigt die Leistung. Es wäre nicht so schlimm, wenn es nur etwa 10.000 Spalten gäbe, was meiner Meinung nach für Worteinbettungen ziemlich vernünftig ist.

Ich denke darüber nach, Google zu verwenden, word2vecda ich mir ziemlich sicher bin, dass es viel niedrigere Dimensionen und dichtere Einbettungen erzeugt. Aber gibt es vorher noch andere Einbettungen, die einen Blick zuerst rechtfertigen könnten? Die Hauptanforderung wäre die Skalierung von rund 60 Millionen Phrasen (Zeilen).

Ich bin ziemlich neu auf dem Gebiet der Worteinbettung, daher würde jeder Rat helfen.

Ich sollte auch hinzufügen, dass ich bereits die Singularwertzerlegung verwende, um die Leistung zu verbessern.

Kevin Johnson
quelle
Sie verwenden Spark?
Eliasah
1
Das ist einer der Gründe, warum ich Spark zuerst vorgeschlagen habe. Es tut mir leid, ich bin auf meinem Handy. Ich habe keinerlei Zugang zu Referenzen bezüglich der Voreinbettung von PCA-Techniken.
Eliasah
1
Ich bin mir nicht sicher, ob es ein Overkill mit dieser Datenmenge ist.
Eliasah
1
Das Entfernen überflüssiger Token sollte die Dimension nicht wesentlich verringern, da Sie Texte bearbeiten. In Anbetracht eines Wörterbuchs mit 150000 Wörtern würde das Entfernen von Stoppwörtern pro Beispiel Ihnen ein paar Dutzend Vorteile bringen. Das wird nicht helfen.
Eliasah
1
Andernfalls sollten Sie die Modellierung von Themen mit Latent Dirichlet Allocation in Betracht ziehen, um die Größe Ihres Textvektors pro Phrase zu verringern.
Eliasah

Antworten:

3

In letzter Zeit wurde an der dynamischen Zuweisung der word2vec-Dimension (Gramm überspringen) mithilfe von Boltzmann-Maschinen gearbeitet. Schauen Sie sich dieses Papier an:

"Unendliche dimensionale Worteinbettungen" -Nalsnick, Ravi

Die Grundidee besteht darin, Ihr Trainingsset die Dimensionalität Ihres word2vec-Modells bestimmen zu lassen, was durch einen Regularisierungsterm bestraft wird, der sich auf die Dimensionsgröße bezieht.

Das obige Papier tut dies für Wörter, und ich wäre gespannt, wie gut dies mit Phrasen funktioniert.

Alex R.
quelle