我使用 Gensim 4.0 将向量存储在 Doc2VecKeyedVectors 中以执行相似性查找,但出现错误。
这是一些示例代码:
model = <load a Doc2Vec model>
corpus = <load an object which returns key/words pairs>
kv = Doc2VecKeyedVectors(vector_size=50)
for key, words in corpus:
vector = model.infer_vector(words)
kv.add_vector(key, vector)
test_words = ['word1', 'word2', ...]
vector = model.infer_vector(test_words)
sims = kv.similar_by_vector(vector, topn=200)
在most_similar()方法中keyedvectors.py的第758行调用similar_by_vector()会抛出“ValueError:太多值无法解包(预期为2)”。
我浏览了源代码,看起来它期望密钥与向量一起传入,根据方法签名,这似乎很奇怪。
关于我做错了什么有什么想法吗?
我发现了问题所在。我给出的代码示例忽略了这样一个事实:对 infer_vector() 的调用实际上是对远程服务器的调用,该服务器返回浮点数列表,而不是 ndarray。好吧,在调用 simple_by_vector() 之前我从未将其转换回 ndarray,这就是问题的原因。