【问题标题】:gensim doc2vec, why the order of the sentences affects the doc2vec vectorgensim doc2vec,为什么句子的顺序会影响 doc2vec 向量
【发布时间】:2019-08-03 01:09:11
【问题描述】:

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

当我执行了两次 call infer_vector 时,结果如下。

我不知道为什么会这样。

this link is the result

【问题讨论】:

    标签: gensim doc2vec


    【解决方案1】:

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

    相反,借助强大的模型和足够的训练/推理(更多步骤),您应该在重复运行时获得 very-similar-quality 向量。

    更多步骤对于短文本可能尤其重要。在您的屏幕截图中很难分辨 - 如果您将文本粘贴到您的问题中会更好 - 但看起来您的文本中的空格分隔会导致每个文档包含 13-17 个标记。

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

    (我不建议尝试在每次运行中强制执行确定性。这样做实际上是为了掩盖设置中固有的随机性/不稳定性。最好认识到它并采取切实措施来收紧输出,比如更强大的模型或更多的迭代。但如果你想尝试,this gensim issue 中讨论了这样做的方法。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 2016-06-07
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      相关资源
      最近更新 更多