1

我使用 Gensim Doc2vec 模型来训练文档向量。我打印了“好”这个词的表示,但我发现每个时代,我发现没有更新!虽然我打印出 id 为“3”的文档的表示,但每个时期都不一样!

我的代码如下,不知道发生了什么。

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)])
4

3 回答 3

3

纯 PV-DBOW 模型 ( dm=0) 根本不涉及词向量的使用或训练。(这只是共享代码的产物Word2Vec,它们完全被分配和随机初始化。)

如果您希望以交错方式训练词向量,则必须使用非默认dbow_words=1参数。(或者,切换到 PV-DM 模式,dm=1其中固有地涉及词向量。)

于 2016-09-27T04:30:48.540 回答
1

这不是每次更新后检查表示的正确方法。Gensimdoc2vec使用一个iter参数来定义 epoch 的数量应该是多少(参见docs),其default值为 5。

基本上在以下循环中发生了什么:

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

您正在训练您的模型10 次,从头开始到 5 个 epochs

我认为 Gensim 目前不允许在每个时代之后检查表示。一种粗略的做法是:

model.train(documents, iter=1)
print('Now training epoch %s' % epoch)
print(model['good'])
print(model.docvecs[str(3)])

model.train(documents, iter=2)
print('Now training epoch %s' % epoch)
print(model['good'])
print(model.docvecs[str(3)])
于 2016-08-11T12:44:23.553 回答
0

在每个 epoch gensim 首先使用随机值作为词向量,然后开始训练模型。在 doc2vec(或 word2vec)中,一个词(exp. 'good')的每个最终词向量不应该相同,但相似词是相似词向量。例如在一个时代:

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

在另一个时代:

model['good'] = [0.58 0.96 0.24]
model['better'] = [0.59 0.90 0.21]
于 2016-08-15T09:45:14.133 回答