带有不可见单词的段落的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
模型,调整向量以更好地预测文本的单词。
但是,推论从伪随机初始化的向量开始。并且,将传入的全套令牌(包括未知单词)用作该随机初始化的种子。
此初始初始化操作对于寻求完全可重现的推理的人来说是一个潜在的小帮助-但是在实践中,寻求这样的精确再现,而不仅仅是运行之间的相似性通常是一个坏主意。有关更多详细信息,请参见gensim常见问题解答Q11和Q12。
所以您看到的是:
infer_vector()
方法可能应该记录警告,或返回标志值(例如可能是原始向量),以更好地暗示实际上没有任何有意义的事情发生。
但是您可能希望先检查任何文本,然后再将其提供给infer_vector()
–如果没有任何单词在d2v_model.wv
中,则推断将只是返回一个小的随机初始化向量。