当我使用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时,结果如下。
我不知道为什么会这样。
答案 0 :(得分:0)
Doc2Vec训练/推理算法(在大多数模式中)包含随机化的元素,因此您不必从重复运行中获得相同的结果,除非您强制使用特定的额外约束来强制确定性。
相反,通过强大的模型和足够的训练/推理(更多步骤),您应该在重复运行时获得非常相似的向量。
对于短文本,更多步骤可能尤为重要。在截图中很难说明 - 如果将文字粘贴到您的问题中会更好 - 但看起来文字中的空格分隔会产生每个13-17令牌的文档。 / p>
此外,如果模型最初是针对非常不同类型的文本进行训练的,或者与其整体大小(维度/词汇表)相比的数据非常少,则可能没有太多可推断的能力来推断新文本上的新向量。这种模型弱点也倾向于使重复运行的向量彼此不那么相似。
(我不建议尝试从一次到另一次运行强制确定性。这样做基本上可以掩盖设置中固有的随机性/不稳定性。识别它和识别它是更好的。采取切实措施收紧产出,如更强大的模型或更多的迭代。但如果你想尝试,那么在this gensim issue讨论如何做到这一点。)