文章目录
前言
之前一直用word2vec,今天在用gensim加载glove时发现gensim只提供了word2vec的接口,如果我们想用gensim加载Glove词向量怎么办呢?
word2vec和Glove都可以以文本格式呈现,打开文本文件发现,两者区别在于word2vec第一行注明词向量的数量和维度。
Glove词向量格式:
word1 0.134 0.254 0.354
word2 0.245 0.335 0.377
word3 0.345 0.488 0.553
word4 0.564 0.234 0.564
word2vec词向量格式:
4 3
word1 0.134 0.254 0.354
word2 0.245 0.335 0.377
word3 0.345 0.488 0.553
word4 0.564 0.234 0.564
所以,如果想用gensim加载预训练的glove词向量,只需要在glove第一行添加词向量数量和维度就可以了。
针对glove加载的问题,gensim官方也提供了转换脚本。
gensim转换脚本
转换原理非常简单,把官方代码贴过来大家一看就明白了。
主要涉及两个函数。get_glove_info统计词向量数量和维数,glove2word2vec进行转换。
def get_glove_info(glove_file_name):
"""Get number of vectors in provided `glove_file_name` and dimension of vectors.
Parameters
----------
glove_file_name : str
Path to file in GloVe format.
Returns
-------
(int, int)
Number of vectors (lines) of input file and its dimension.
"""
with smart_open(glove_file_name) as f:
num_lines = sum(1 for _ in f)
with smart_open(glove_file_name