Wie berechnet man die Satzähnlichkeit mit dem word2vec-Modell von Gensim mit Python?
Entsprechend der Gensim Word2Vec, ich kann die word2vec Modell im gensim-Paket zur Berechnung der ähnlichkeit zwischen 2 Worten.
z.B.
trained_model.similarity('woman', 'man')
0.73723527
Jedoch die word2vec Modell nicht zur Vorhersage der Satz ähnlichkeit. Ich finde heraus, das LSI-Modell mit Satz ähnlichkeit im gensim, aber, die nicht scheinen, dass können kombiniert werden mit word2vec Modell. Die Länge des Korpus jeder Satz, den ich habe, ist nicht sehr lang (weniger als 10 Wörter). Also, gibt es irgendwelche einfachen Möglichkeiten, um das Ziel zu erreichen?
Kommentar zu dem Problem
Es ist ein ACL-tutorial über dieses Thema (unter anderem): youtube.com/watch?v=_ASOqXiWBVo&feature=youtu.werden
Sie können jetzt gensim ist doc2vec und erhalten Satz ähnlichkeit aus der gleichen Modul
InformationsquelleAutor der Frage zhfkt | 2014-03-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eigentlich ein ziemlich schwieriges problem, dass Sie gefragt sind. Computing Satz ähnlichkeit erfordert den Aufbau eines grammatischen Modells der Satz, Verständnis äquivalente Strukturen (z.B. "er ging zu dem laden gestern" und "gestern, ging er in den laden"), zur Feststellung der ähnlichkeit nicht nur in den Pronomina und Verben, sondern auch in den Eigennamen, der Suche nach statistischen co-occurences /Beziehungen in viele Reale Textbeispielen, etc.
Die einfachste Sache, die Sie könnten versuchen-obwohl ich weiß nicht, wie gut Sie diese ausführen würden und wäre es sicherlich nicht geben Ihnen die optimale Ergebnisse -- wäre zunächst entfernen Sie alle "stop" - Wörter (Wörter wie "der", "ein", usw. dass nicht viel hinzuzufügen, was bedeutet der Satz), und führen Sie dann word2vec auf die Worte in beiden Sätzen, die Summe der Vektoren in der eine Satz, die Summe der Vektoren in den anderen Satz, und dann finden Sie die Differenz zwischen den Summen. Durch summieren Sie bis zu tun, anstatt ein Wort-Weise Unterschied, wirst du zumindest nicht unter word, um. That being said, dieses scheitern wird viele Möglichkeiten und ist auch keine gute Lösung mit allen Mitteln (wenn gute Lösungen für dieses problem fast immer mit einem gewissen Betrag von NLP, maschinelles lernen, und andere cleverness).
So, die kurze Antwort ist, Nein, es gibt keine einfache Möglichkeit, dies zu tun (zumindest nicht um es gut zu machen).
InformationsquelleAutor der Antwort Michael Aaron Safyan
Da Sie mit gensim, sollten Sie wahrscheinlich verwenden es doc2vec Umsetzung. doc2vec ist eine Erweiterung der word2vec, um die Satz-, Satz-und Dokumentebene. Es ist eine ziemlich einfache Erweiterung, die hier beschrieben
http://cs.stanford.edu/~quocle/paragraph_vector.pdf
Gensim ist schön, weil es ist intuitiv, schnell und flexibel. Das tolle ist, dass Sie ergreifen können, die pretrained Wort Einbettungen von der offiziellen word2vec Seite und die syn0 Schicht von gensim ist Doc2Vec Modell ausgesetzt ist, so dass Sie Samen das Wort Einbettungen mit diesen hochwertigen Vektoren!
GoogleNews-vectors-negative300.bin.gz
Ich denke gensim ist definitiv der einfachste (und bisher auch für mich das beste) tool, das für die Einbettung eines Satzes in einem Vektor-Raum.
Gibt es andere Satz-zu-Vektor-Techniken als die, die vorgeschlagen, in Le & Mikolov Papier vor. Socher und Manning aus Stanford sind sicherlich zwei der bekanntesten Forscher auf diesem Gebiet. Ihre Arbeit wurde basierend auf dem Prinzip der kompositorisch - Semantik der Satz kommen:
Haben Sie vorgeschlagen, ein paar solcher Modelle (zunehmend komplexer) wie compositionality zu bauen, Satz-level-zusagen.
2011 - Entfaltung rekursive autoencoder (vergleichsweise sehr einfach. beginnen Sie hier, wenn Sie interessiert sind)
2012 - matrix-Vektor-neuronalen Netzwerk
2013(?) - neuronale tensor network
2015 - Baum LSTM
seine Papiere sind alle vorhanden bei socher.org. Einige dieser Modelle sind verfügbar, aber ich würde noch empfehlen gensim ist doc2vec. Für einen, der 2011 URAE ist nicht besonders leistungsstark. Darüber hinaus kommt es pretrained mit gewichten geeignet für die Umschreibung news-y-Daten. Der code, den er bietet nicht zulassen, Sie umzuschulen Netzwerk. Man kann auch nicht tauschen in verschiedenen word-Vektoren, so sind Sie stecken mit 2011 ist pre-word2vec Einbettungen von Turian. Diese Vektoren sind sicherlich nicht auf der Ebene der word2vec oder Handschuh.
Haben nicht funktioniert, mit dem Baum LSTM noch, aber es scheint sehr vielversprechend aus!
tl;dr Ja, verwenden Sie gensim ist doc2vec. Aber auch andere Methoden existieren!
InformationsquelleAutor der Antwort Willie
Wenn Sie word2vec, die Sie brauchen, um den Durchschnitt berechnen zu vector für alle Wörter, die in jedem Satz/das Dokument und verwenden Kosinus-ähnlichkeit zwischen zwei Vektoren:
Berechnung der ähnlichkeit:
InformationsquelleAutor der Antwort
Einmal berechnest du die Summe der beiden Sätze von Wort-Vektoren, sollten Sie den Kosinus zwischen den Vektoren, nicht die diff. Der Cosinus berechnet werden kann, indem das Skalarprodukt der beiden Vektoren normalisiert. So, das Wort Zählung ist nicht ein Faktor.
InformationsquelleAutor der Antwort Rani Nelken
können Sie Word Mover ' s Distance-Algorithmus. hier ist ein einfache Beschreibung über MVW.
P. s.: wenn Sie vor einem Fehler zu importieren pyemd Bibliothek, können Sie es installieren, verwenden Sie folgenden Befehl:
InformationsquelleAutor der Antwort Ehsan
Ich bin mit der Methode und es funktioniert gut.
Sie zuerst ausführen müssen, um einen POSTagger und filtern Sie dann Ihren Satz, um loszuwerden, die stop-Wörter (Determinanten, Konjunktionen, ...). Ich empfehle TextBlob APTagger.
Anschließend erstellen Sie eine word2vec, indem der Mittelwert der einzelnen Wort-Vektor im Satz. Die n_similarity Methode in Gemsim word2vec macht genau das, indem übergeben zwei Sätze von Wörtern zu vergleichen.
InformationsquelleAutor der Antwort lechatpito
Gibt es Erweiterungen von Word2Vec soll das problem lösen, das der Vergleich mehr Stücke von text, wie Phrasen oder Sätze. Einer von Ihnen ist paragraph2vec oder doc2vec.
"Verteilte Repräsentationen der Sätze und Dokumente"
http://cs.stanford.edu/~quocle/paragraph_vector.pdf
http://rare-technologies.com/doc2vec-tutorial/
InformationsquelleAutor der Antwort Max
Ich würde gerne ein update der bestehenden Lösung zu helfen, die Menschen gehen zur Berechnung der semantischen ähnlichkeit von Sätzen.
Schritt 1:
Laden Sie das passende Modell mit gensim und berechnen Sie die word-Vektoren für die Wörter in dem Satz, und speichern Sie Sie als word-Liste
Schritt 2 :
Berechnung der Vektor-Satz
Die Berechnung der semantischen ähnlichkeit zwischen Sätzen war schwierig, aber vor kurzem ein Papier mit dem Namen "EINE EINFACHE, ABER SCHWER-TO-BEAT-BASELINE FÜR SATZ
EINBETTUNGEN" wurde vorgeschlagen, die schlägt einen einfachen Ansatz durch die Berechnung des gewichteten Durchschnitts der Wort-Vektoren im Satz und entfernen Sie dann die Projektionen der durchschnittlichen Vektoren auf Ihre erste principal component.Hier das Gewicht eines Wortes w ist a/(a + p(w)) wobei a ein parameter und p(w) die (geschätzte) Wort-Frequenz genannt, glatte inverse Frequenz.diese Methode der Durchführung deutlich besser.
Einen einfachen code, der zur Berechnung der Vektor-Satz mit SIF(glatte inverse frequency) die Methode vorgeschlagen, in der Papier gegeben wurde, hier
Schritt 3:
mit sklearn cosine_similarity laden von zwei Vektoren für die Sätze und die Berechnung der ähnlichkeit.
Dies ist die einfache und effiziente Methode zum berechnen der Satz ähnlichkeit.
InformationsquelleAutor der Antwort Poorna Prudhvi
Ich habe versucht die Methoden, durch die vorherigen Antworten. Es funktioniert, aber der größte Nachteil ist es, dass je länger die Sätze, die größere ähnlichkeit wird(zur Berechnung der ähnlichkeit ich benutze die Kosinus-score der beiden bedeuten Einbettungen zweier Sätze), da die mehr die Worte, die mehr positive semantische Effekte werden Hinzugefügt, um den Satz.
Dachte ich, ich sollte meine Meinung ändern und verwenden Sie den Satz einbetten, anstatt, wie studierte in dieses Papier und diese.
InformationsquelleAutor der Antwort lerner
Es ist eine Funktion aus der Dokumentation Einnahme einer Liste von Wörtern und Vergleich Ihrer Gemeinsamkeiten.
InformationsquelleAutor der Antwort Astariul