2016-08-31 2 views
0

J'essaie de comprendre l'implémentation de PV-DM avec moyennage dans gensim. Dans la fonction train_document_dm dans doc2vec.py la valeur de retour ("erreurs") de train_cbow_pair est dans le cas de moyennage (cbow_mean=1) non divisée par le nombre de vecteurs d'entrée (count). Selon cette explication, il devrait y avoir une division par le nombre de documents dans le cas de la moyenne des vecteurs d'entrée: word2vec Parameter Learning Explained, equation (23). Voici le code de train_document_dm:mises à jour des vecteurs de document dans doc2vec (PV-DM) dans gensim

l1 = np_sum(word_vectors[word2_indexes], axis=0)+np_sum(doctag_vectors[doctag_indexes], axis=0) 
count = len(word2_indexes) + len(doctag_indexes) 
if model.cbow_mean and count > 1: 
    l1 /= count 
neu1e = train_cbow_pair(model, word, word2_indexes, l1, alpha, 
           learn_vectors=False, learn_hidden=learn_hidden) 
if not model.cbow_mean and count > 1: 
    neu1e /= count 
if learn_doctags: 
    for i in doctag_indexes: 
     doctag_vectors[i] += neu1e * doctag_locks[i] 
if learn_words: 
    for i in word2_indexes: 
     word_vectors[i] += neu1e * word_locks[i] 

Répondre

0

Disons que V est défini comme étant la moyenne des A, B et C:

V = (A + B + C)/3

Définissons , B = 6 et C = 10. Et disons que nous voulons V égale 10.

Nous exécutons le calcul (propagation vers l'avant), et la valeur de V, la moyenne des trois nombres, est 7. Ainsi, la correction nécessaire pour V est +3.

Pour appliquer cette correction à A, B et C, avons-nous aussi diviser cette correction par 3, pour obtenir +1 contre chacun? Dans ce cas A = 6, B = 7, et C = 11 - et maintenant V est juste 8. Il aurait encore besoin d'un autre +2 pour correspondre à la cible.

Donc, non. La correction correcte à tous les composants de V, dans le cas où V est une moyenne, est la même que la correction à V - dans ce cas, +3. Si nous étions appliquer ce, nous aimerions atteindre notre valeur cible appropriée de 10:

A = 8, B = 9, C = 13 
V = (8 + 9 + 13)/3 = 10 

La même chose se produit le rétropropagation gensim. Dans le cas du moyennage, la valeur corrective totale (multipliée par le taux d'apprentissage alpha) est appliquée à chacun des vecteurs constitutifs. Si vous utilisez une somme-de-vecteurs pour créer V à la place, puis l'erreur devrait être divisée par le nombre de vecteurs constituants - pour diviser l'erreur sur tous les vecteurs, et ne pas l'appliquer de manière redondante.)