Ich versuche, ungefähr 60 Millionen Phrasen in einen Vektorraum einzubetten und dann die Kosinusähnlichkeit zwischen ihnen zu berechnen . Ich habe sklearns CountVectorizer
mit 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, word2vec
da 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.
Antworten:
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.
quelle