Gensim Doc2Vec infer_vector 在看不见的单词上根据这些单词中的字符而有所不同

Gensim Doc2Vec infer_vector on unseen words differs based on characters in these words

Gensim Doc2Vec infer_vector 对带有不可见词的段落生成基于不可见词中的字符而不同的向量。

for i in range(0, 2):
    print(model.infer_vector(["zz"])[0:2])
    print(model.infer_vector(["zzz"])[0:2])
    print(model.infer_vector(["zzzz"])[0:2])
    print("\n")

[ 0.00152548 -0.00055992]
[-0.00165872 -0.00047997]
[0.00125548 0.00053445]


[ 0.00152548 -0.00055992] # same as in previous iteration
[-0.00165872 -0.00047997]
[0.00125548 0.00053445]

我正在尝试理解看不见的单词如何影响 infer_vector 的初始化。看起来不同的字符会产生不同的向量。试图理解为什么。

在迭代推理的实际过程中忽略看不见的单词:根据冻结的 Doc2Vec 模型调整向量以更好地预测文本的单词。

但是,推理是从一个伪随机初始化的向量开始的。并且,传入的全套令牌(包括未知词)用作该随机初始化的种子。

这种种子初始化是对那些寻求完全可重现推理的人的潜在小帮助——但在实践中,寻求这种精确重现,而不仅仅是 运行-to-运行 相似性, 通常是个坏主意。有关更多详细信息,请参阅 gensim 常见问题解答 Q11 & Q12,了解从 运行 到 运行 的不同结果。

所以你看到的是:

  • 每个不同的标记化文本都会导致伪随机,但相对于源文本、向量初始化而言是确定性的
  • 因为没有词是已知的,之后的推理是空操作:没有词可以预测
  • 伪随机初始化向量是returned

infer_vector() 方法可能应该记录一个警告,或 return 一个标志值(可能像原始向量),作为更好的提示,表明实际上没有发生任何有意义的事情。

但是您可能希望在将文本提供给 infer_vector() 之前检查任何文本 – 如果 none 个词在 d2v_model.wv 中,那么推论将只是 [=36] =]ing 一个小的随机初始化向量。