Doc2vec Gensim:在每个时期内嵌入不会更新的词

时间:2016-08-04 15:50:36

标签: nlp gensim word2vec doc2vec

我使用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)])

3 个答案:

答案 0 :(得分:3)

纯PV-DBOW模型(Word2Vec)根本不涉及使用或训练单词向量。 (它只是与dbow_words=1共享代码的工件,它们被分配并随机初始化。)

如果希望以交错方式训练单词向量,则必须使用非默认dm=1参数。 (或者,切换到PV-DM模式,free,其中字向量本身就在其中。)

答案 1 :(得分:1)

这不是每次更新后检查表示的正确方法。 Gensim doc2vec使用iter参数来定义纪元数应该是多少(请参阅docs),其default值为5。

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

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

你正在训练你的模型 10次,从零开始到5个时代

我不认为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)])

答案 2 :(得分: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]