在Python中保持对象以便在其他程序中使用
我正在使用word2vec来计算两个词之间的相似度。为了这个模型,我使用的是GoogleNews。这个模型非常大,所以加载它需要花费很多时间。
model = Word2Vec.load_word2vec_format('D:/Userfiles/vsachidananda/Downloads/GoogleNews-vectors negative300.bin.gz', binary=True)
我想把这个模型加载到一个变量或对象里,这样每次运行Python程序时,我就可以直接调用它。
model.similarity('word1','word2')
请问怎么才能做到这一点呢?有什么想法吗?
1 个回答
1
我知道的唯一一种在Python进程之间共享复杂对象的方法是使用 multiprocessing.Manager
。不过,每次需要和子进程共享 model
时,它都会被序列化和反序列化。我想这会和 load_word2vec_format
一样慢。
你可以考虑运行一个启动器,先加载一次 model
,然后等待并根据需要执行其他的Python脚本。一个非常简单的启动器大概是这样的:
import Word2Vec
model = Word2Vec.load_word2vec_format(...)
try:
import traceback
import script
while True:
raw_input()
try:
reload(script)
script.main(model)
except:
print traceback.print_exc()
except KeyboardInterrupt:
print 'exit launcher'
使用这个基本的启动器,script.py
应该放在同一个文件夹里,并且需要定义一个 main()
函数:
def main(model):
model.similarity('word1','word2')
...