So erhalten Sie einen Vektor für einen Satz aus dem Wort 2vec der Token im Satz


76

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:


91

Es gibt verschiedene Methoden, um die Satzvektoren zu erhalten:

  1. Doc2Vec : Sie können Ihren Datensatz mit Doc2Vec trainieren und dann die Satzvektoren verwenden.
  2. Durchschnitt der Word2Vec-Vektoren : Sie können einfach den Durchschnitt aller Wortvektoren in einem Satz nehmen. Dieser durchschnittliche Vektor repräsentiert Ihren Satzvektor.
  3. Durchschnitt der Word2Vec-Vektoren mit TF-IDF : Dies ist einer der besten Ansätze, die ich empfehlen werde. Nehmen Sie einfach die Wortvektoren und multiplizieren Sie sie mit ihren TF-IDF-Werten. Nehmen Sie einfach den Durchschnitt und er repräsentiert Ihren Satzvektor.

4
Warum Durchschnitt gegen Summe?
Fred

17
Um Sätze mit variabler Länge zu behandeln
neel

2
Sie nehmen die Durchschnittswerte der w2v-Wiederholungen von N Wörtern für einen Satz der Länge N ; Ich verstehe das. Aber warum der Durchschnitt gegen, zB die Summe? (was Ihnen auch eine zusammengesetzte Wiederholung für Sätze variabler Länge bringen würde)
Fred

11
Hier fand ich ein Beispiel von 2-3 nadbordrozd.github.io/blog/2016/05/20/…
Ismael

1
Ich bin mir nicht sicher, warum ich einen Durchschnitt der Werte für jede Dimension erstellen soll. Vielleicht können wir nur summieren und trotzdem ähnliche Ergebnisse erzielen.
Argho Chatterjee

32

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.


25

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.


2
Ich versuche, Dokumente mithilfe der Token-Vektoren zu klassifizieren. Da ich zu viele Token (200 KB) habe, wollte ich die Vektoren der zu klassifizierenden Dokumente generieren. Dadurch werden die Faktoren erheblich reduziert (z. B. 500). Ich habe mich gefragt, ob das möglich ist.
Trialcritic

4
Sie können von diesen ausgehen: 1. Mitchell, 2008. Vektorbasierte Modelle der semantischen Komposition. [link] ( homepages.inf.ed.ac.uk/s0453356/composition.pdf ) 2. Blacoe, 2012. Ein Vergleich vektorbasierter Darstellungen für die semantische Komposition. [Link] ( aclweb.org/anthology/D12-1050 )
Claudiu

3
3. Erkennen der Komposition von Mehrwortausdrücken unter Verwendung der nächsten Nachbarn in Vektorraummodellen ( cl.cam.ac.uk/~dk427/papers/emnlp2013.pdf ) 4. Vorherige Disambiguierung von Worttensoren zum Konstruieren von Satzvektoren cs.ox.ac. .uk / files / 5725 / karts_sadr_emnlp.pdf
Claudiu

Vielen Dank für die Papiere, schätzen Sie es
Trialcritic

20

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:

Steven Du und Xi Zhang. 2016. Aicyber at SemEval-2016 Aufgabe 4: i-Vektor-basierte Satzdarstellung. In Proceedings des 10. Internationalen Workshops zur semantischen Evaluation (SemEval 2016), San Diego, USA

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.

Jey Han Lau und Timothy Baldwin (2016). Eine empirische Bewertung von doc2vec mit praktischen Einblicken in die Dokumenteinbettungsgenerierung. In Proceedings des 1. Workshops zum Repräsentationslernen für NLP, 2016.

5) tweet2vec oder sent2vec .

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:

https://github.com/hanxiao/bert-as-service


10

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


2

Ich habe gute Ergebnisse erzielt von:

  1. Summieren der Wortvektoren (mit tf-idf-Gewichtung). Dies ignoriert die Wortreihenfolge, ist jedoch für viele Anwendungen ausreichend (insbesondere für kurze Dokumente).
  2. Fastenent


1

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).


Ich glaube, Sie wurden abgelehnt, weil Sie die Frage nicht beantworten. Abgesehen davon ist dieser Ansatz praktisch für Personen, die nicht mit ihrem eigenen trainierten Word2Vec-Modell arbeiten möchten. Hier ist ein Link für die Leser: tfhub.dev/google/universal-sentence-encoder/2
Wok

-1

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.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.