在gensim中更新doc2vec(PV-DM)中的文档向量

时间:2016-08-31 14:51:26

标签: python numpy gensim word2vec doc2vec

我试图通过gensim平均来理解PV-DM的实现。 在train_document_dm中的doc2vec.py函数中,train_cbow_pair的返回值("错误")是平均值(cbow_mean=1)未除以输入向量的数量(count)。 根据这种解释,在对输入矢量求平均值的情况下,应该除以文档的数量:word2vec Parameter Learning Explained, equation (23)。 以下是train_document_dm的代码:

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]  

1 个答案:

答案 0 :(得分:0)

我们假设V被定义为ABC的平均值:

V =(A + B + C)/ 3

设置A = 5B = 6C = 10。我们要说V等于10。

我们运行计算(前向传播),并且V的值(三个数的平均值)为7.因此V所需的校正为+3。

要将此修正应用于A,B和C,我们是否除以3的修正,以获得+1?在这种情况下,A = 6B = 7C = 11 - 现在V只是8.它还需要另一个+2来匹配目标。

所以,不。在V是平均值的情况下,V的所有组件的正确修正与V的修正相同 - 在这种情况下为+3。如果我们应用它,我们就会达到10的正确目标值:

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

同样的事情发生在gensim反向传播。在平均的情况下,将完整的校正值(学习速率alpha的次数)应用于每个构成矢量。

(如果使用向量和来创建V,那么错误需要除以组成向量的数量 - 将错误分配给它们全部,而不是应用多余的。)