Doc2Vec - So beschriften Sie die Absätze (gensim)

17

Ich frage mich, wie ich Sätze / Absätze / Dokumente mit doc2vec in gensim kennzeichnen kann - aus praktischer Sicht.

Müssen Sie für jeden Satz / Absatz / jedes Dokument eine eindeutige Bezeichnung haben (z. B. "Sent_123")? Dies scheint nützlich zu sein, wenn Sie sagen möchten, welche Wörter oder Sätze einem bestimmten Satz mit der Bezeichnung "Sent_123" am ähnlichsten sind.

Können Sie die Beschriftungen je nach Inhalt wiederholen lassen? Wenn sich beispielsweise jeder Satz / Absatz / Dokument auf einen bestimmten Produktartikel bezieht (und für einen bestimmten Produktartikel mehrere Sätze / Absätze / Dokumente vorhanden sind), können Sie die Sätze basierend auf dem Artikel kennzeichnen und dann die Ähnlichkeit zwischen einem Wort oder einem berechnen satz und dieses etikett (was ich für einen durchschnitt aller sätze halte, die mit dem produktartikel zu tun hatten)?

B_Miner
quelle

Antworten:

10

Beides ist möglich. Sie können jedem Dokument eine eindeutige ID (z. B. eine fortlaufende Seriennummer) als Doctag oder als Doctag für einen gemeinsam genutzten String zuweisen, der etwas anderes darstellt, oder beides gleichzeitig.

Der TaggedDocument-Konstruktor verwendet eine Liste von Tags. (Wenn Sie sich zufällig auf einfache Zeichen beschränken, die von 0 aufsteigen, verwendet das Doc2Vec-Modell diese als direkte Indizes in seinem Sicherungsarray, und Sie sparen viel Speicher, der ansonsten für eine Zeichenfolge -> Indexsuche verwendet würde Dies kann für große Datenmengen wichtig sein. Sie können jedoch auch String-Doctags oder eine Mischung aus Int- und String-Doctags verwenden.)

Sie müssen experimentieren, was für Ihre Bedürfnisse am besten geeignet ist.

Ein Ansatz, der manchmal besser funktioniert, als ich es erwartet hätte, besteht darin, nur Text-IDs zu überspringen und das Doc2Vec-Modell anhand von Beispielen bekannter Klassen mit den gewünschten Klassen als Doctags zu trainieren. Sie erhalten dann "Dokumentvektoren" nur für die Klassendoctags - nicht für jedes Dokument - ein möglicherweise viel kleineres Modell. Späteres Ableiten von Vektoren für neue Texte führt zu Vektoren, die den zugehörigen Klassen-Doc-Vektoren sinnvoll nahe kommen.

Gojomo
quelle
Das ist großartig, vielen Dank! Abgesehen davon, dass ich anfange, mit dem Genim herumzuspielen, bin ich neugierig, ob es möglich ist, die Ähnlichkeit zwischen einem Dokument (unabhängig davon, ob eindeutige oder gemeinsam genutzte Tags verwendet werden) und einem Wort zu berechnen. Kann dies Ihrer Erfahrung nach geschehen?
B_Miner
1
Einige Trainingsmodi erstellen Wort- und Dokumentvektoren im selben Bereich, sodass Ähnlichkeiten sinnvoll sein können. Siehe zum Beispiel dieses Papier - arxiv.org/abs/1507.07998 - das sogar eine Art 'Analogie-Arithmetik' mit doc-Vektoren (Wikipedia-Artikeln) und Wortvektoren durchführt. Die Ausbildung in diesem Papier ist wie GENSIM des DBOW Modus mit gleichzeitiger skip-Gramm - Wort-Ausbildung: dm=0, dbow_words=1.
Gojomo
Vielen Dank @gojomo! Ich habe der Gensim-Liste eine Abfrage hinzugefügt: groups.google.com/forum/#!topic/gensim/RLRfY6k3ulw
B_Miner
Bitte korrigieren Sie mich, wenn ich falsch liege. In Ihrem letzten Absatz schlagen Sie vor, jedes Dokument so zu kennzeichnen, wie wir Fragen auf dieser Site kennzeichnen. Und nach dem Training erhalten wir eine Vektordarstellung jedes Tags. Wenn ein neues Dokument eingeht, können wir einfach die Ähnlichkeitsmetrik verwenden, um Tags für das neue Dokument vorzuschlagen.
Benutzer
@user - ja, das ist möglich und manchmal von Vorteil, obwohl es nicht notwendig ist.
Gojomo
9

doc2vecModell bekommt seinen Algorithmus von word2vec.

In word2vecgibt es keine Notwendigkeit , die Worte zu kennzeichnen, weil jedes Wort eigene semantische Bedeutung im Vokabular hat. Im Fall von doc2vecmuss jedoch angegeben werden, wie viele Wörter oder Sätze eine semantische Bedeutung enthalten, damit der Algorithmus sie als eine einzelne Entität identifizieren kann. Aus diesem Grunde sind wir spezifizieren labelsoder tagszu Satz oder Absatz je nach dem Grad der semantische Bedeutung gefördert.

Wenn wir eine einzelne Bezeichnung für mehrere Sätze in einem Absatz angeben, bedeutet dies, dass alle Sätze im Absatz erforderlich sind, um die Bedeutung zu vermitteln. Wenn wir dagegen allen Sätzen in einem Absatz Variablenbezeichnungen zuweisen, bedeutet dies, dass jeder Satz eine semantische Bedeutung hat und Ähnlichkeiten aufweisen kann oder nicht.

In einfachen Worten labelbedeutet eine semantische Bedeutung von etwas.

Yazhi
quelle
If we specify a single label to multiple sentences in a paragraph, it means that all the sentences in the paragraph are required to convey the meaning.Ich bin nicht sicher, ob ich das richtig verstehe. Werden nach dem Algorithmus POV alle Sätze mit demselben Tag für die semantische Definition benötigt oder beschreiben alle Sätze mit demselben Tag dasselbe? Im ersten Fall ist kein einzelner Satz für sich allein autark, im zweiten Fall ist ein einzelner Satz autark.
Benutzer
@user: Es ist der zweite Fall, nach dem Algorithmus POV, dass ein Tag als eine Entität definiert ist, die bei Verwendung in einem einzelnen Satz die Bedeutung aller Wörter erfasst. In gleicher Weise werden bei Verwendung in mehreren Sätzen auch die Wörter in allen anderen Sätzen erfasst.
Yazhi