我正在构建一个聊天机器人,所以我需要使用Word2Vec向量化用户的输入。
我使用的是Google提供的一个有300万字的预训练模型(GoogleNews-vectors negative300)。
因此,我使用Gensim加载模型:
import gensim
model = gensim.models.KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)
问题是加载模型大约需要2分钟。我不能让用户等那么久。
那么,我可以做些什么来加快加载时间呢?
我考虑将300万个单词及其对应的向量放入一个MongoDB数据库中。这当然会加快速度,但直觉告诉我这不是一个好主意。
发布于 2018-01-24 07:10:54
我真的很喜欢vzhong的嵌入库。https://github.com/vzhong/embeddings
它将词向量存储在SQLite中,这意味着我们不需要加载模型,而只需从DB :D中获取相应的向量
发布于 2017-03-26 08:00:42
每当我使用谷歌新闻数据集时,我都会遇到这个问题。问题是数据集中的单词比你所需要的要多得多。有大量的打字错误等等。我所做的是扫描我正在处理的数据,建立一个字典,比如50k个最常用的单词,用Gensim获取向量并保存字典。加载此词典需要半秒,而不是2分钟。
如果您没有特定的数据集,您可以使用大型数据集中最常见的50或100k个单词,例如来自WMT的news dataset。
其他选项是始终保持Gensim运行。您可以对运行Gensim的脚本执行create a FIFO。该脚本就像一个“服务器”,可以读取“客户端”写入的文件,监视向量请求。
我认为最优雅的解决方案是运行一个提供单词嵌入的web服务。以word2vec API为例进行查看。安装后,获取"restaurant“的嵌入非常简单:
curl http://127.0.0.1:5000/word2vec/model?word=restaurant
发布于 2019-07-10 12:38:58
成功方法:
model = Word2Vec.load_word2vec_format('wikipedia-pubmed-and-PMC-w2v.bin',binary=True)
model.init_sims(replace=True)
model.save('bio_word')
稍后加载模型
Word2Vec.load('bio_word',mmap='r')
有关更多信息,请访问:https://groups.google.com/forum/#!topic/gensim/OvWlxJOAsCo
https://stackoverflow.com/questions/42986405
复制相似问题