Doc2vec (gensim) - Comment puis-je déduire l'étiquette de phrases invisibles?

datascience.stackexchange https://datascience.stackexchange.com/questions/10612

  •  16-10-2019
  •  | 
  •  

Question

https://radimrehurek.com/gensim/models/doc2vec.html

Par exemple, si nous avons formé avec doc2vec

"aaaaaaaaaaaaaaaa" - "label 1"

« bbbbbbbbbbbbbbb » - "label 2"

peut-on déduire « aaaaaaaaaaaaaa » est l'étiquette 1 en utilisant Doc2vec?

Je sais que Doc2vec peut former des vecteurs de mots et des vecteurs d'étiquettes. L'utilisation de ce vecteurs, peut-on déduire des phrases invisibles (combinaison de mots formés) dans laquelle l'étiquette?

Était-ce utile?

La solution

Le titre de cette question est une question distincte à son texte, donc je répondrai à la fois séparément (étant donné que l'on mène dans l'autre).

  1. Comment puis-je déduire des phrases invisibles:
# ... trained model stored in var model
list_of_words = ["this", "is", "a", "new","unseen", "sentence"]
inferred_embedding = model.infer_vector(list_of_words)

Comment ça marche? Selon le document original ( https://cs.stanford.edu/~quocle/paragraph_vector.pdf ), nous avons deux matrices de poids initialisés au hasard $ W \ in \ mathbb {R} ^ {N \ times P} $, ce qui est la même matrice de Word2Vec dans lequel chaque ligne ou colonne cartes à un vecteur et mot $ D \ in \ mathbb {R} ^ {M \ times R} $ qui est la matrice du document où chaque colonne ou une ligne cartes à une phrase / document. Au cours de la formation d'un classificateur softmax de taille de la fenêtre k $ $ fixe se déplace (dans une fenêtre mobile comme la mode) en minimisant la probabilité de journal suivant (multi-classe d'entropie croisée):

$$ \ Frac {1} {M} \ sum_ {i = 1} ^ {M} \ frac {1} {| D_ {i} |} \ sum_ {t = k} ^ {| D_ {i-1} | - k} log (p (w_ {t} ^ {i} | w_ {tk} ^ {i}, ..., w_ {t + k} ^ {i}, D_ {i})) $$

Où $ D_ {i} $ correspond au vecteur représentant le i $ ^ {e} $ phrase, $ | D_ {i} | $ le nombre de mots dans ce document et $ W_ {t} ^ {i} $ est le $ t ^ {e} $ de mot dans le i $ ^ {e} $ document. Tout rétropropagation se souvient est le document que nous allons actuellement notre softmax fenêtré sur les mises à jour et que cette ligne dans la matrice $ D $ ainsi que les mots dans cette fenêtre.

De plus, lorsque nous voulons déduire quelque chose de pas dans la formation nous stockons fixons $ W $ afin qu'il ne soit pas mis à jour et augment matrice $ D $ avec la nouvelle ligne initialisées au hasard et former juste pour plusieurs itérations (avec la nouvelle tenue de la ligne l'incorporation du vecteur déduit). Cela nous mène à la question 2.

  1. Peut-on déduire qu'une phrase peut-être invisible correspond exactement à une phrase dans l'ensemble de la formation?

La réponse est non et ce n'est pas ce que Doc2Vec est pour. En raison de l'initialisation aléatoire + la complexité de la convergence et la formation de votre vecteur inférées ne sera jamais exactement le même que son vecteur correspondant à $ D $ c'est pourquoi Gensim n'a pas construit en fonction à l'appui, comment jamais, étant donné que le modèle a été bien formés ces deux vecteurs doivent être arbitrairement proches les uns des autres, vous pouvez donc conclure qu'ils sont extrêmement similaires.

Même la graine de fixation aléatoire peut ne pas fonctionner, il y a tant d'autres variables qui peuvent avoir une incidence sur la convergence s'il vous plaît voir la première réponse sur https://github.com/RaRe-Technologies/gensim/issues/374 .

Dans tous les cas, vous pouvez trouver le plus étiquette similaire dans votre ensemble de données à une peine inférée juste en itérer sur votre jeu de formation et de comparer la similitude avec le vecteur inférées. Mais pourquoi voudriez-vous faire une correspondance exacte à quelque chose dans l'ensemble de la formation? c'est ce que les expressions régulières sont dans le but de ces documents est pour l'intégration de tâches d'apprentissage surveillé ou non surveillé (à savoir le classement et le regroupement).

Autres conseils

Je tente de résoudre ce problème aujourd'hui et coudnt trouver un module donné par gensim.Doc2Vec que la similitude entre le vecteur de calcul inférée de documents non dans le modèle formé à ceux dans le modèle formé. Donc, fondamentalement, je l'ai fait.

from scipy import spatial
inferred_vector=model.infer_vector(sentence.split())
for labels in labelled_documents:
    print (1-  spatial.distance.cosine(inferred_vector,model.docvecs[labels]))

Basé sur Gensim Doc2Vec tutoriel , vous pouvez faire quelque chose comme ça.

inferred_vector = model_dmm.infer_vector(sentence.split())
sims = model.docvecs.most_similar([inferred_vector], topn=len(model.docvecs))

Cela vous donnera une liste de tuples avec toutes les étiquettes et la probabilité associée à votre nouveau document appartenant à chaque étiquette. alors vous pouvez simplement prendre la plus grande valeur que l'étiquette.

Licencié sous: CC-BY-SA avec attribution
scroll top