gensim doc2vec,为什么句子的顺序会影响doc2vec向量

时间:2017-11-15 09:36:41

标签: gensim doc2vec

当我使用model.infer_vector计算向量时,不同的顺序         文件结果不同。

size=200;negative=15; min_count=1;iterNum=20;
windows = 5
modelName = "datasets/dm-sum.bin_"+str(windows)+"_" 
+str(size)+"_"+str(negative)
model = loadDoc2vecModel(modelName)
vecNum = 200

调用infer_vector

test_docs = [ x.strip().split() for x in 
codecs.open("datasets/test_keyword_f1", "r", "utf-8").readlines() ]
for item in test_docs:

    print("%s" %(resStr.strip()))
    vecTmp = model.infer_vector(item,  alpha=0.05, steps=20)
    print(vecTmp)

当我执行两次调用infer_vector时,结果如下。

我不知道为什么会这样。

this link is the result

1 个答案:

答案 0 :(得分:0)

Doc2Vec训练/推理算法(在大多数模式中)包含随机化的元素,因此您不必从重复运行中获得相同的结果,除非您强制使用特定的额外约束来强制确定性。

相反,通过强大的模型和足够的训练/推理(更多步骤),您应该在重复运行时获得非常相似的向量。

对于短文本,更多步骤可能尤为重要。在截图中很难说明 - 如果将文字粘贴到您的问题中会更好 - 但看起来文字中的空格分隔会产生每个13-17令牌的文档。 / p>

此外,如果模型最初是针对非常不同类型的文本进行训练的,或者与其整体大小(维度/词汇表)相比的数据非常少,则可能没有太多可推断的能力来推断新文本上的新向量。这种模型弱点也倾向于使重复运行的向量彼此不那么相似。

(我不建议尝试从一次到另一次运行强制确定性。这样做基本上可以掩盖设置中固有的随机性/不稳定性。识别它和识别它是更好的。采取切实措施收紧产出,如更强大的模型或更多的迭代。但如果你想尝试,那么在this gensim issue讨论如何做到这一点。)