Ich habe die Vektoren für eine Liste von Token aus einem großen Dokument mit word2vec generiert. Ist es bei einem gegebenen Satz möglich, den Vektor des Satzes aus dem Vektor der Token im Satz zu erhalten.
Ich habe die Vektoren für eine Liste von Token aus einem großen Dokument mit word2vec generiert. Ist es bei einem gegebenen Satz möglich, den Vektor des Satzes aus dem Vektor der Token im Satz zu erhalten.
Antworten:
Es gibt verschiedene Methoden, um die Satzvektoren zu erhalten:
Es gibt verschiedene Möglichkeiten, einen Vektor für einen Satz zu erhalten. Jeder Ansatz hat Vor- und Nachteile. Die Auswahl hängt von der Aufgabe ab, die Sie mit Ihren Vektoren ausführen möchten.
Zunächst können Sie einfach die Vektoren aus word2vec mitteln. Laut Le und Mikolov ist dieser Ansatz für Aufgaben der Stimmungsanalyse schlecht geeignet, da er "die Wortreihenfolge auf die gleiche Weise verliert wie die Standardmodelle für Wortbeutel " und "viele hochentwickelte sprachliche Phänomene nicht erkennt". zum Beispiel Sarkasmus ". Auf der anderen Seite, nach Kenter et al. 2016 hat sich herausgestellt , dass die einfache Mittelung der Worteinbettung aller Wörter in einem Text eine starke Basis oder Funktion für eine Vielzahl von Aufgaben darstellt, z. B. Aufgaben zur Ähnlichkeit von kurzen Texten. Eine Variante wäre, Wortvektoren mit ihrer TF-IDF zu gewichten, um den Einfluss der häufigsten Wörter zu verringern.
Ein komplexerer Ansatz, der von Socher et al. besteht darin, Wortvektoren in einer durch einen Analysebaum eines Satzes gegebenen Reihenfolge unter Verwendung von Matrixvektoroperationen zu kombinieren. Diese Methode funktioniert für die Stimmungsanalyse von Sätzen, da sie vom Parsen abhängt.
Es ist möglich, aber nicht von word2vec. Die Zusammensetzung von Wortvektoren, um übergeordnete Darstellungen für Sätze (und weiter für Absätze und Dokumente) zu erhalten, ist ein wirklich aktives Forschungsthema. Es gibt keine beste Lösung dafür, es hängt wirklich davon ab, auf welche Aufgabe Sie diese Vektoren anwenden möchten. Sie können Verkettung, einfache Summierung, punktweise Multiplikation, Faltung usw. ausprobieren. Es gibt verschiedene Veröffentlichungen, aus denen Sie lernen können, aber letztendlich müssen Sie nur experimentieren und herausfinden, was am besten zu Ihnen passt.
Es kommt auf die Verwendung an:
1) Wenn Sie nur einen Satzvektor für einige bekannte Daten erhalten möchten. Schauen Sie sich den Absatzvektor in diesen Papieren an:
Quoc V. Le und Tomas Mikolov. 2014. Verteilte Darstellungen von Sätzen und Dokumenten. Eprint Arxiv, 4: 1188–1196.
AM Dai, C. Olah und QV Le. 2015. DocumentEmbedding mit Absatzvektoren. ArXiv E-Prints, Juli.
2) Wenn Sie möchten, dass ein Modell den Satzvektor für unbekannte (Test-) Sätze mit unbeaufsichtigtem Ansatz schätzt:
Sie können dieses Papier überprüfen:
3) Forscher suchen auch nach der Ausgabe einer bestimmten Schicht im RNN- oder LSTM-Netzwerk. Ein aktuelles Beispiel ist:
http://www.aaai.org/ocs/index.php/AAAI/AAAI16/paper/view/12195
4) Für das gensim doc2vec konnten viele Forscher keine guten Ergebnisse erzielen, um dieses Problem zu lösen, nachdem sie doc2vec verwendet hatten, das auf vorab trainierten Wortvektoren basierte.
Facebook hat ein SentEval-Projekt zur Bewertung der Qualität von Satzvektoren.
https://github.com/facebookresearch/SentEval
6) Weitere Informationen finden Sie im folgenden Dokument:
Neuronale Netzwerkmodelle für Paraphrasenidentifikation, semantische Textähnlichkeit, natürliche Sprachinferenz und Beantwortung von Fragen
Und jetzt können Sie 'BERT' verwenden:
Google veröffentlicht den Quellcode sowie vorab trainierte Modelle.
https://github.com/google-research/bert
Und hier ist ein Beispiel, um bert as a service auszuführen:
Sie können Vektordarstellungen von Sätzen während der Trainingsphase erhalten (nehmen Sie am Test teil und trainieren Sie Sätze in einer einzigen Datei und führen Sie den über den folgenden Link erhaltenen word2vec-Code aus).
Der Code für satz2vec wurde hier von Tomas Mikolov geteilt . Es wird davon ausgegangen, dass das erste Wort einer Zeile Satz-ID ist. Kompilieren Sie den Code mit
gcc word2vec.c -o word2vec -lm -pthread -O3 -march=native -funroll-loops
und führen Sie es mit
./word2vec -train alldata-id.txt -output vectors.txt -cbow 0 -size 100 -window 10 -negative 5 -hs 0 -sample 1e-4 -threads 40 -binary 0 -iter 20 -min-count 1 -sentence-vectors 1
BEARBEITEN
Gensim (Entwicklungsversion) scheint eine Methode zu haben, um Vektoren neuer Sätze abzuleiten. Überprüfen Sie die model.infer_vector(NewDocument)
Methode unter https://github.com/gojomo/gensim/blob/develop/gensim/models/doc2vec.py
Die Einbettungen des Universal-Satzcodierers von Google sind eine aktualisierte Lösung für dieses Problem. Es verwendet kein Word2vec, führt jedoch zu einer konkurrierenden Lösung.
Hier ist ein Rundgang mit TFHub und Keras .
Deep Averaging Network (DAN) kann Satzeinbettungen bereitstellen, in denen Wort-Bi-Gramme gemittelt und durch ein Feedforward Deep Neural Network (DNN) geleitet werden.
Es wurde festgestellt, dass das Transferlernen unter Verwendung von Satzeinbettungen dazu neigt, die Übertragung auf Wortebene zu übertreffen, da die semantische Beziehung erhalten bleibt.
Sie müssen das Training nicht von vorne beginnen, die vorab trainierten DAN-Modelle können eingesehen werden (siehe Universal Satz-Encoder-Modul in Google Hub).
Nehmen wir an, dies ist der aktuelle Satz
import gensim
from gensim.models import Word2Vec
from gensim import models
model = gensim.models.KeyedVectors.load_word2vec_format('path of your trainig
dataset', binary=True)
strr = 'i am'
strr2 = strr.split()
print(strr2)
model[strr2] //this the the sentance embeddings.