25

I am using the Gensim Python package to learn a neural language model, and I know that you can provide a training corpus to learn the model. However, there already exist many precomputed word vectors available in text format (e.g. http://www-nlp.stanford.edu/projects/glove/). Is there some way to initialize a Gensim Word2Vec model that just makes use of some precomputed vectors, rather than having to learn the vectors from scratch?

Thanks!

4

3 回答 3

45

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

python -m gensim.scripts.glove2word2vec --input  glove.840B.300d.txt --output glove.840B.300d.w2vformat.txt
于 2017-02-01T22:26:53.460 回答
24

您可以从此处下载预训练的词向量(获取文件“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)
于 2014-12-13T19:33:39.110 回答
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 格式(每行:单词 + 矢量)转换为通用格式。

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

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 类。这将大大减少加载向量所需的内存量(详细说明)。

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

model = gensim.models.keyedvectors.Word2VecKeyedVectors.load_word2vec_format(model_file, binary=True)
于 2018-12-15T00:16:31.567 回答