2016-08-04 1 views
0

J'utilise le modèle Gensim Doc2vec pour former des vecteurs de document. J'ai imprimé des représentations pour le mot "bien", mais j'ai trouvé toutes les époques, je n'ai pas mis à jour! Alors que j'ai imprimé des représentations pour le document avec l'ID '3', chaque époque différente!Doc2vec Gensim: les plongements de mots ne se mettent pas à jour à chaque époque

Mes codes sont ci-dessous, ne savent pas ce qui se passe.

model = gensim.models.Doc2Vec(dm = 0, alpha=0.1, size= 20, min_alpha=0.025) 

model.build_vocab(documents) 

print ('Building model....',(time4-time3)) 
for epoch in range(10): 
    model.train(documents) 

    print('Now training epoch %s' % epoch) 
    print(model['good']) 
    print(model.docvecs[str(3)]) 

Répondre

1

Ce n'est pas la bonne façon de vérifier les représentations après chaque mise à jour. Gensim doc2vec utilise un paramètre iter pour définir ce que le nombre d'époques devrait être (voir docs), dont la valeur est default 5.

Essentiellement ce qui se passe dans la boucle suivante:

for epoch in range(10): 
    model.train(documents) 

vous entraînez votre modèle 10 fois, de zéro à 5 époques.

Je ne pense pas que Gensim permette actuellement de vérifier les représentations après chaque époque. Un brut façon de le faire serait:

0

à chaque époque gensim utiliser la valeur aléatoire pour le vecteur de mot dans un premier temps, puis commencer à former le modèle. dans doc2vec (ou word2vec), chaque vecteur de mot final pour un mot (exp. 'good') ne devrait pas être le même mais les mots similaires sont des vecteurs de mots similaires. par exemple dans une époque:

model['good'] = [0.22 0.52 0.36] 
model['better'] = [0.24 0.50 0.39] 

et à une autre époque:

model['good'] = [0.58 0.96 0.24] 
model['better'] = [0.59 0.90 0.21] 
+1

Je n'ai pas compris ce que vous vouliez dire. (1) A chaque époque, les vecteurs de mots ne partent pas au hasard, mais à partir de la valeur précédente du mot vecteur. Seulement à la première époque, les vecteurs de mots partent du hasard. – kampta

+0

chaque fois que vous appelez la fonction "train", le vecteur de mot obtient la valeur aléatoire pour les vecteurs de mot. dans un autre mot "train" fonction démarrer le modèle de formation à partir du vecteur de début et de mot obtenir une valeur aléatoire. –

+0

C'est correct. La fonction «train» démarre le modèle d'entraînement depuis le début. Puisque la valeur par défaut du paramètre 'seed' de la fonction' train' est fixée à 0, chaque fois que vous commencez à vous entraîner, les vecteurs de mots sont initialisés aux mêmes valeurs aléatoires, et après n épochs, vous obtenez les mêmes vecteurs (essentiellement les expériences sont reproductibles) – kampta

2

Le pur modèle PV-DBOW (dm=0) ne concerne pas l'utilisation ou la formation des mots-vecteurs du tout. (C'est juste un artefact du code partagé avec Word2Vec qu'ils sont alloués et initialisés aléatoirement du tout.)

Si vous voulez que les vecteurs de mots soient entraînés de manière entrelacée, vous devez utiliser le non-par défaut dbow_words=1 paramètre. (Ou, passez en mode PV-DM, dm=1, où les vecteurs de mots sont intrinsèquement impliqués.)