用gensim加载手套矢量的一部分

时间:2019-04-19 15:25:32

标签: python gensim word-embedding glove

我有一个像['like','Python']这样的单词列表,我想加载这些单词的经过预先训练的Glove单词向量,但是Glove文件太大,有什么快速的方法吗?

我尝试过的事情

我遍历文件的每一行以查看单词是否在列表中,并将其添加到dict(如果为True)中。但是这种方法有点慢。

def readWordEmbeddingVector(Wrd):
    f = open('glove.twitter.27B/glove.twitter.27B.200d.txt','r')
    words = []
    a = f.readline()
    while a!= '':
        vector = a.split()
        if vector[0] in Wrd:
            words.append(vector)
            Wrd.remove(vector[0])
        a = f.readline()
    f.close()
    words_vector = pd.DataFrame(words).set_index(0).astype('float')
    return words_vector

我也在下面尝试过,但是它加载了整个文件,而不是我需要的矢量

gensim.models.keyedvectors.KeyedVectors.load_word2vec_format('word2vec.twitter.27B.200d.txt')

我想要的

类似gensim.models.keyedvectors.KeyedVectors.load_word2vec_format的方法,但是我可以设置要加载的单词列表。

1 个答案:

答案 0 :(得分:0)

目前尚无gensim支持过滤通过load_word2vec_format()加载的单词。最接近的是可选的limit参数,该参数可用于限制读取多少个单词向量(忽略所有后续向量)。

可以想象,您可以使用load_word2vec_format()的源代码作为模型来创建自己的例程来执行此类过滤。实际上,您可能需要阅读两次文件:1,确切地找出文件中有多少个单词与您感兴趣的单词相交(因此您可以分配大小合适的数组而无需信任文件顶部的声明大小),然后第二次实际读取感兴趣的单词。