wake-up-neo.com

Wie kann ein Satz oder ein Dokument in einen Vektor umgewandelt werden?

Wir haben Modelle zum Konvertieren von Wörtern in Vektoren (zum Beispiel das Word2vec-Modell). Gibt es ähnliche Modelle, die Sätze/Dokumente in Vektoren umwandeln, wobei möglicherweise die für die einzelnen Wörter erlernten Vektoren verwendet werden?

47
Sahil

1) Überspringe Gramm-Methode: Papier hier und das Tool, das es verwendet, Google Word2vec

2) Verwenden von LSTM-RNN zur Bildung semantischer Repräsentationen von Sätzen.

3) Darstellungen von Sätzen und Dokumenten . Der Absatzvektor wird in diesem Dokument vorgestellt. Es handelt sich im Wesentlichen um einen nicht überwachten Algorithmus, der Feature-Darstellungen mit fester Länge aus Texten mit variabler Länge, wie etwa Sätzen, Absätzen und Dokumenten, lernt.

4) Obwohl dieses Papier keine Satz-/Absatzvektoren bildet, ist es einfach genug, dies zu tun. Man kann einfach die einzelnen Word-Vektoren einstecken ( GloveWord-Vektoren haben die beste Leistung gezeigt) und können dann eine Vektordarstellung des gesamten Satzes/Absatzes bilden. 

5) Verwenden eines CNN to summary documents.

43
Azrael

Eine Lösung, die etwas weniger auf dem Markt ist, aber in Bezug auf die Genauigkeit wahrscheinlich schwer zu schlagen ist, wenn Sie etwas Bestimmtes tun:

Erstellen Sie ein RNN (mit LSTM- oder GRU-Speicherzellen, vergleich hier ) und optimieren Sie die Fehlerfunktion der tatsächlichen Aufgabe, die Sie ausführen möchten. Sie füttern Ihren Satz und trainieren ihn, um die gewünschte Ausgabe zu erzeugen. Die Aktivierungen des Netzwerks, nachdem der Satz eingespeist wurde, sind eine Repräsentation des Satzes (obwohl Sie vielleicht nur die Ausgabe des Netzwerks interessieren). 

Sie können den Satz als eine Folge von Ein-Hot-codierten Zeichen, als eine Folge von Ein-Hot-codierten Wörtern oder als eine Folge von Word-Vektoren (z. B. GloVe oder Word2vec ) darstellen. Wenn Sie Word-Vektoren verwenden, können Sie sich weiterhin in die Word-Vektoren zurückverbreiten und deren Gewichte aktualisieren, sodass Sie auch benutzerdefinierte Word-Vektoren erhalten, die speziell für Ihre Aufgabe angepasst wurden. 

15
larspars

Alles hängt von ... ab:

  • welches Vektormodell Sie verwenden
  • was ist der Zweck des Modells
  • ihre Kreativität beim Kombinieren von Word-Vektoren in einen Dokumentvektor

Wenn Sie das Modell mit Word2Vec erstellt haben, können Sie Folgendes versuchen:

Oder Sie können tun, was manche Leute tun, d. H. Alle Inhaltswörter in den Dokumenten summieren und durch die Inhaltswörter dividieren, z. https://github.com/alvations/oque/blob/master/o.py#L13 (Anmerkung: Zeile 17-18 ist ein Hack, um das Rauschen zu reduzieren):

def sent_vectorizer(sent, model):
    sent_vec = np.zeros(400)
    numw = 0
    for w in sent:
        try:
            sent_vec = np.add(sent_vec, model[w])
            numw+=1
        except:
            pass
    return sent_vec / np.sqrt(sent_vec.dot(sent_vec))
15
alvas

Es gibt viele Möglichkeiten, diese Frage zu beantworten. Die Antwort hängt von Ihrer Interpretation von Sätzen und Sätzen ab.

Diese Verteilungsmodelle wie Word2vec, die Vektordarstellung für jedes Wort bereitstellen, können nur zeigen, wie ein Wort normalerweise in einem Fenster-Basiskontext in Verbindung mit anderen Wörtern verwendet wird. Basierend auf dieser Interpretation der Kontext-Wort-Beziehungen können Sie den Durchschnittsvektor aller Wörter in einem Satz als Vektordarstellung des Satzes verwenden. Zum Beispiel in diesem Satz:

vegetarier essen Gemüse.

V_s

Wir können den normalisierten Vektor als Vektordarstellung annehmen:

V(sentence)

Das Problem liegt in der kompositorischen Natur von Sätzen. Wenn Sie die durchschnittlichen Wortvektoren wie oben verwenden, haben diese beiden Sätze dieselbe Vektordarstellung:

gemüse isst Vegetarier.

Es gibt viele Forschungen auf verteilende Art und Weise, um Baumstrukturen durch Korpusverarbeitung zu erlernen. Zum Beispiel: Analyse mit kompositorischen Vektorgrammatiken . Dieses Video erklärt auch diese Methode.

Ich möchte noch einmal die Interpretation betonen. Diese Satzvektoren haben in Ihrer Anwendung wahrscheinlich eine eigene Bedeutung. In der Sentiment-Analyse in diesem Projekt in Stanford ist zum Beispiel der Sinn, den sie suchen, die positive/negative Stimmung eines Satzes. Selbst wenn Sie eine perfekte Vektordarstellung für einen Satz finden, gibt es philosophische Debatten, dass dies keine tatsächlichen Bedeutungen von Sätzen sind, wenn Sie den Wahrheitszustand nicht beurteilen können (David Lewis "General Semantics" 1970). Aus diesem Grund gibt es eine Reihe von Arbeiten, die sich auf das Computersehen konzentrieren ( dieses Papier oder dieses Papier ). Mein Punkt ist, dass es völlig von Ihrer Anwendung und Interpretation von Vektoren abhängen kann.

13
Mehdi

Ich hoffe, Sie begrüßen eine Implementierung. Bei der Konvertierung der Filmdarstellungen zur Analyse stand ich vor einem ähnlichen Problem. Nachdem ich viele andere Lösungen ausprobiert hatte, hielt ich an einer Implementierung fest, die meine Arbeit erleichterte. Das Code-Snippet ist unten beigefügt.

Installieren Sie 'spaCy' über den folgenden Link.

import spacy
nlp = spacy.load('en')
doc = nlp(YOUR_DOC_HERE)
vec = doc.vector

Hoffe das hilft. 

0
Sai Harsha