根据看不见单词的Gensim Doc2Vec infer_vector,这些单词中的字符会有所不同

时间:2019-12-25 22:01:34

标签: gensim word2vec doc2vec

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的初始化。看起来不同的字符会产生不同的向量。试图了解原因。

1 个答案:

答案 0 :(得分:1)

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

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

完成种子初始化工作对于寻求完全可重现的推理的人来说可能是一个小小的帮助-但是在实践中,寻求这样的精确再现,而不仅仅是运行之间的相似性通常是一个坏主意。有关更多详细信息,请参见gensim常见问题解答Q11Q12

所以您看到的是:

  • 您不同的标记化文本各自导致伪随机,但对于源文本而言是确定性的,矢量初始化
  • 因为没有单词,所以以后的推论是没有操作的:没有单词可以预测
  • 返回伪随机初始化向量

infer_vector()方法可能应该记录一条警告或返回一个标志值(例如可能是原始向量),以更好地暗示实际上没有任何有意义的事情发生。

但是您可能希望先检查任何文本,然后再将其提供给infer_vector() –如果在d2v_model.wv中没有任何单词,则推断将只是返回一个小的随机初始化向量。