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

updates of the document vectors in doc2vec (PV-DM) in gensim

我正在尝试了解 PV-DM 在 gensim 中的平均实现。 doc2vec.py中的函数train_document_dmtrain_cbow_pair的return值("errors")是在求平均(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]  

假设 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 反向传播也发生了同样的事情。在平均的情况下,完整的校正值(乘以 learning-rate alpha)应用于每个组成向量。

(如果使用 sum-of-vectors 代替创建 V,则 然后 误差将需要除以组成向量的数量 - 以将误差拆分到它们全部,不要重复应用。)