加载预先计算的向量Gensim

时间:2014-11-26 01:35:42

标签: python nlp gensim word2vec

我正在使用Gensim Python软件包来学习神经语言模型,我知道你可以提供一个训练语料库来学习模型。然而,已经存在许多以文本格式可用的预先计算的单词向量(例如http://www-nlp.stanford.edu/projects/glove/)。有没有办法初始化一个只使用一些预先计算的向量的Gensim Word2Vec模型,而不是从头开始学习向量?

谢谢!

3 个答案:

答案 0 :(得分:31)

斯坦福网站的GloVe转储格式与word2vec格式略有不同。您可以使用以下方法将GloVe文件转换为word2vec格式:

python -m gensim.scripts.glove2word2vec --input  glove.840B.300d.txt --output glove.840B.300d.w2vformat.txt

答案 1 :(得分:22)

您可以从此处下载预先训练过的单词向量(获取文件' GoogleNews-vectors-negative300.bin'): word2vec

提取文件然后你可以在python中加载它,如:

model = gensim.models.word2vec.Word2Vec.load_word2vec_format(os.path.join(os.path.dirname(__file__), 'GoogleNews-vectors-negative300.bin'), binary=True)

model.most_similar('dog')

编辑(2017年5月): 由于上面的代码现已弃用,现在就是你加载向量的方法:

model = gensim.models.KeyedVectors.load_word2vec_format(os.path.join(os.path.dirname(__file__), 'GoogleNews-vectors-negative300.bin'), binary=True)

答案 2 :(得分:0)

据我所知,Gensim可以加载两种二进制格式,即word2vec和fastText,以及可以由大多数单词嵌入工具创建的通用纯文本格式。普通的纯文本格式如下所示(在此示例中,单词的大小为20000,矢量的长度为100)

20000 100
the 0.476841 -0.620207 -0.002157 0.359706 -0.591816 [98 more numbers...]
and 0.223408  0.231993 -0.231131 -0.900311 -0.225111 [98 more numbers..]
[19998 more lines...]

Chaitanya Shivade在他的回答中解释了如何使用Gensim提供的脚本将Glove格式(每行:word + vector)转换为通用格式。

加载不同的格式很容易,但也很容易混淆它们:

import gensim
model_file = path/to/model/file

1)加载二进制word2vec

model = gensim.models.word2vec.Word2Vec.load_word2vec_format(model_file)

2)加载二进制fastText

model = gensim.models.fasttext.FastText.load_fasttext_format(model_file)

3)加载通用纯文本格式(由word2vec引入)

model = gensim.models.keyedvectors.Word2VecKeyedVectors.load_word2vec_format(model_file)

如果您仅打算使用单词嵌入,而不打算继续在Gensim中对其进行训练,则可能要使用KeyedVector类。这将大大减少加载向量(detailed explanation)所需的内存量。

以下将把二进制word2vec格式作为keyedvectors加载:

model = gensim.models.keyedvectors.Word2VecKeyedVectors.load_word2vec_format(model_file, binary=True)