我正在使用w2v_server_googlenews运行的word2vec HTTP服务器中的https://rare-technologies.com/word2vec-tutorial/#bonus_app代码。我将加载的文件更改为使用原始C版word2vec训练的矢量文件。我用
加载文件gensim.models.KeyedVectors.load_word2vec_format(fname, binary=True)
似乎加载没有问题。但是当我测试HTTP服务时,让我们说
curl 'http://127.0.0.1/most_similar?positive%5B%5D=woman&positive%5B%5D=king&negative%5B%5D=man'
我的结果只有执行时间。
{"taken": 0.0003361701965332031, "similars": [], "success": 1}
我在相关方法的除部分上放了一个traceback.print_exc()
,在这种情况下def most_similar(self, *args, **kwargs):
我得到了:
Traceback (most recent call last):
File "./w2v_server.py", line 114, in most_similar
topn=5)
File "/usr/local/lib/python2.7/dist-packages/gensim/models/keyedvectors.py", line 304, in most_similar
self.init_sims()
File "/usr/local/lib/python2.7/dist-packages/gensim/models/keyedvectors.py", line 817, in init_sims
self.syn0norm = (self.syn0 / sqrt((self.syn0 ** 2).sum(-1))[..., newaxis]).astype(REAL)
AttributeError: 'KeyedVectors' object has no attribute 'syn0'
有关为何会出现这种情况的任何想法?
注意:我使用python 2.7并使用pip安装gensim,这给了我gensim 2.1.0。
答案 0 :(得分:2)
仅供参考,该演示代码基于gensim 0.12.3(从2015年开始,如其requirements.txt
中所列),并且需要更新以使用最新的gensim。
在第70行(仅在w2v_server.py
之后)向load_word2vec_format()
添加一行可能就足够了,以强制创建所需的syn0norm
属性(在较旧的gensims中是在删除原始syn0
值之前,在加载时自动创建。具体做法是:
self.model.init_sims(replace=True)
(如果你要进行replace=True
以外的操作,你可能会遗漏most_similar()
,这可能需要原始载体。)
如果这可以解决您的问题,那么有利于收到w2v_server_googlenews回购的拉取请求!