我使用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)])
答案 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)
首先使用字向量的随机值,然后开始训练模型。在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]