gensim Word2vec 作为 HTTP 服务的代码 'KeyedVectors' 属性错误
Code for gensim Word2vec as an HTTP service 'KeyedVectors' Attribute error
我正在使用w2v_server_googlenews code from the word2vec HTTP server running at 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}
我在相关方法的 except 部分放了一个 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。
仅供参考,演示代码基于 gensim 0.12.3(从 2015 年开始,如其 requirements.txt
中所列),并且需要更新才能使用最新的 gensim。
在第 70 行(就在 load_word2vec_format()
之后)向 w2v_server.py
添加一行可能就足够了,以强制创建所需的 syn0norm
属性 (在旧的 gensims 中是在加载时自动创建的),然后删除原始 syn0
值。具体来说:
self.model.init_sims(replace=True)
(如果您要进行 most_similar()
以外的操作,则可能会省略 replace=True
,这可能需要原始向量。)
如果这能为您解决问题,那么欢迎向 w2v_server_googlenews 存储库发出拉取请求!
我正在使用w2v_server_googlenews code from the word2vec HTTP server running at 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}
我在相关方法的 except 部分放了一个 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。
仅供参考,演示代码基于 gensim 0.12.3(从 2015 年开始,如其 requirements.txt
中所列),并且需要更新才能使用最新的 gensim。
在第 70 行(就在 load_word2vec_format()
之后)向 w2v_server.py
添加一行可能就足够了,以强制创建所需的 syn0norm
属性 (在旧的 gensims 中是在加载时自动创建的),然后删除原始 syn0
值。具体来说:
self.model.init_sims(replace=True)
(如果您要进行 most_similar()
以外的操作,则可能会省略 replace=True
,这可能需要原始向量。)
如果这能为您解决问题,那么欢迎向 w2v_server_googlenews 存储库发出拉取请求!