【问题标题】:How to save word2vec model to redis?如何将word2vec模型保存到redis?
【发布时间】:2021-06-26 12:31:09
【问题描述】:

在每次搜索请求期间,都会使用此功能,需要 2 秒的时间:

def get_model(config:dict):
    return gensim.models.Word2Vec.load(config['path_model']).wv

是否可以打开一次,保存在缓存或redis中,然后再次使用以加快搜索速度?

我已经尝试过这个选项:

model = get_model(config)
pickled_object = pickle.dumps(model)
key = 'model_object'
redis_instance.set(key, pickled_object)

比我明白的:

 t0 = time.time()
 get_object = redis_instance.get('model_object')
 t1 = time.time()
 total = t1-t0
 print('Get object', total)
 t0 = time.time()
 model = pickle.loads(get_object)
 t1 = time.time()
 total = t1-t0
 print('Pickle loads', total)

但处理时间没有改变。

Mar 30 09:47:54 ip-172-31-25-211 gunicorn[27354]: Get object 1.2066564559936523
Mar 30 09:47:54 ip-172-31-25-211 gunicorn[27354]: Pickle loads 0.854522705078125

【问题讨论】:

  • 检查 Redis 模块 redisai.io 可能与您的情况相关。支持存储模型并在 Redis 上运行,减少加载时间。

标签: python caching redis word2vec


【解决方案1】:

您想将模型保存在内存中是正确的,因此加载成本不会在每个请求中都被多余地支付。

但将其混入 Redis 并不是最好的方法。

请参阅这个较旧的答案以获取相关想法:

How to speed up Gensim Word2vec model load time?

但请注意,在刚刚发布的 Gensim-4.0.0 中,事情变得更容易了 - 您无需进行 init_simssyn0norm 修补。只需使用mmap='r' 加载它就足够了,并且通常的相似性操作不会使用太多额外的内存或步骤。

【讨论】:

    猜你喜欢
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    相关资源
    最近更新 更多