加载预计算向量Gensim

2024-05-20 23:33:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Gensim Python包学习一个神经语言模型,我知道您可以提供一个学习该模型的训练语料库。但是,已经存在许多文本格式的预计算字向量(例如http://www-nlp.stanford.edu/projects/glove/)。有没有什么方法可以初始化一个Gensim Word2Vec模型,它只使用一些预计算的向量,而不必从头学习向量?

谢谢!


Tags: 文本格式模型语言httpnlpwww神经向量
3条回答

斯坦福网站的globe dump格式与word2vec格式略有不同。您可以使用以下命令将手套文件转换为word2vec格式:

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

据我所知,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提供的脚本将手套格式(每行:word+vector)转换为通用格式。

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

import gensim
model_file = path/to/model/file

1)加载二进制word2vec

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

2)加载二进制快速文本

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

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

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

如果您只打算使用单词embeddings,而不打算继续在Gensim中训练它们,那么您可能需要使用keyedvvector类。这将大大减少加载向量所需的内存量(detailed explanation)。

下面将把二进制word2vec格式作为keyedvorters加载:

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

您可以从这里下载经过预训练的单词向量(获取文件“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)

相关问题 更多 >