Der Titel dieser Frage ist eine separate Frage zu ihrem Text, daher werde ich beide getrennt beantworten (vorausgesetzt, dass eine in die andere führt).
- Wie kann ich auf unsichtbare Sätze schließen:
# ... trained model stored in var model
list_of_words = ["this", "is", "a", "new","unseen", "sentence"]
inferred_embedding = model.infer_vector(list_of_words)
Wie funktioniert das ? Gemäß der Originalarbeit ( https://cs.stanford.edu/~quocle/paragraph_vector.pdf ) haben wir zwei nach dem Zufallsprinzip initialisierte Gewichtsmatrizen, die dieselbe Matrix aus Word2Vec sind, in der jede Spalte oder Zeile enthalten ist ordnet einem Wortvektor zu und D ∈ R M × R ist die Dokumentenmatrix, in der jede Spalte oder Zeile einem Satz / Dokument zugeordnet ist. Während des Trainings bewegt sich ein Softmax-Klassifikator mit einer festen Fenstergröße von k (in einer Art eines sich bewegenden Fensters), um die folgende logarithmische Wahrscheinlichkeit (Kreuzentropie mehrerer Klassen ) zu minimieren:W∈ RN× PD ∈ RM× Rk
1M∑i = 1M1| Dich|∑t = k| Di - 1| -kl o g( p ( wicht| wicht - k, . . . , wicht + k, Dich) )
Wobei dem Vektor entspricht, der den i t h -Satz darstellt, | D i | seine Anzahl von Wörtern in diesem Dokument und w i t ist das t t h Wort in dem i t h Dokument. Bei allen Erinnerungen an die Rückübertragung handelt es sich um das Dokument, über das wir gerade unseren fensterorientierten Softmax bewegen, und das nur diese Zeile in Matrix D zusammen mit den Wörtern in diesem Fenster aktualisiert .Dichicht h| Dich|wichttt hicht hD
Wenn wir außerdem auf etwas schließen wollen, das nicht im Trainingssatz enthalten ist, korrigieren wir damit es nicht aktualisiert wird, und erweitern Matrix D mit der neuen zufällig initialisierten Zeile und trainieren nur für mehrere Iterationen (wobei die neue Zeile die Einbettung für den abgeleiteten Vektor enthält). . Dies führt zu Frage 2.WD
- Können wir daraus schließen, dass ein möglicherweise unsichtbarer Satz genau einem Satz im Trainingssatz entspricht?
Die kurze Antwort ist nein und dafür ist Doc2Vec nicht geeignet. Aufgrund der zufälligen Initialisierung + wird die Komplexität der Konvergenz und des Trainings Ihres abgeleiteten Vektors niemals genau derselbe sein wie der entsprechende Vektor in diesem Grund hat Gensim keine Funktion eingebaut, um dies zu unterstützen, vorausgesetzt, das Modell ist gut trainiert, sollten diese beiden Vektoren beliebig nahe beieinander liegen, so dass man schließen kann, dass sie sich extrem ähnlich sind.D
Auch wenn das Korrigieren des zufälligen Ausgangs nicht funktioniert, gibt es so viele andere Variablen, die die Konvergenz beeinflussen können. Lesen Sie die erste Antwort unter https://github.com/RaRe-Technologies/gensim/issues/374 .
In jedem Fall können Sie die ähnlichste Bezeichnung in Ihrem Datensatz für einen abgeleiteten Satz finden, indem Sie einfach über Ihren Trainingssatz iterieren und die Ähnlichkeit mit dem abgeleiteten Vektor vergleichen. Aber warum solltest du eine exakte Übereinstimmung mit etwas im Trainingsset haben? Das ist, was reguläre Ausdrücke für den Zweck dieser Dokumenteinbettung sind, für überwachte oder unbeaufsichtigte Lernaufgaben (dh Klassifizierung und Clustering).