Doc2vec (gensim) - Comment puis-je déduire le libellé de phrases invisibles?

14

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

Par exemple, si nous avons formé doc2vec avec

"aaaaaAAAAAaaaaaa" - "étiquette 1"

"BbbbbbBBBBBbbbb" - "étiquette 2"

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

Je sais que Doc2vec peut former des vecteurs de mots et des vecteurs d'étiquettes. En utilisant ces vecteurs, pouvons-nous déduire des phrases invisibles (combinaison de mots formés) dans quelle étiquette?

Seongho
la source

Réponses:

11

Le titre de cette question est une question distincte de son texte, je vais donc répondre aux deux séparément (étant donné que l'un mène à 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 cela marche-t-il ? Selon l'article original ( https://cs.stanford.edu/~quocle/ paragraph_vector.pdf ) nous avons deux matrices de poids initialisées au hasard qui est la même matrice de Word2Vec dans laquelle chaque colonne ou ligne correspond à un vecteur de mots et D R M × R qui est la matrice du document où chaque colonne ou ligne correspond à une phrase / un document. Lors de la formation, un classificateur softmax de mouvements de taille fixe de fenêtre k (dans une fenêtre mobile comme la mode) minimise la probabilité de log suivante (entropie croisée multi-classes):WRN×PDRM×Rk

1Mi=1M1|Di|t=k|Di1|klog(p(wti|wtki,...,wt+ki,Di))

Diith|Di|wtitthithD

WD

  1. Pouvons-nous en déduire qu'une phrase éventuellement invisible correspond exactement à une phrase de l'ensemble de formation?

D

Même la fixation de la graine aléatoire peut ne pas fonctionner, il y a tellement d'autres variables qui peuvent affecter sa convergence, veuillez voir la première réponse sur https://github.com/RaRe-Technologies/gensim/issues/374 .

Dans tous les cas, vous pouvez trouver l'étiquette la plus similaire dans votre ensemble de données à une phrase déduite simplement en itérant sur votre ensemble d'entraînement et en comparant la similitude avec le vecteur déduit. Mais pourquoi voudriez-vous faire une correspondance exacte avec quelque chose dans l'ensemble d'entraînement? c'est ce que sont les expressions régulières aux fins de l'intégration de ces documents pour les tâches d'apprentissage supervisées ou non (c.-à-d. classification et regroupement).

Francisco Vargas
la source
0

J'essayais de résoudre ce problème aujourd'hui, et je n'ai trouvé aucun module donné par gensim.Doc2Vec qui calcule la similitude entre le vecteur de document déduit non dans le modèle formé et 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]))
Himanshu Rai
la source
0

Basé sur le tutoriel Gensim Doc2Vec , 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 comme étiquette.

Amirhos Imani
la source