使用gensim加载一部分Glove向量

问题描述 投票:0回答:1

我有一个像['like','Python']and这样的单词列表我想加载这些单词的预训练Glove单词向量,但Glove文件太大了,有没有快速的方法呢?

我尝试了什么

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

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这样的方法,但我可以设置一个单词列表加载。

python gensim word-embedding glove
1个回答
0
投票

没有现成的gensim支持过滤通过load_word2vec_format()加载的单词。最接近的是可选的limit参数,可用于限制读取的字向量数(忽略所有后续向量)。

您可以设想创建自己的例程来执行此类过滤,使用load_word2vec_format()的源代码作为模型。实际上,您可能需要读取文件两次:第1,找出文件中有多少单词与您感兴趣的单词集相交(这样您就可以分配正确大小的数组而不信任文件前面的声明大小),然后第二次实际读取感兴趣的单词。

© www.soinside.com 2019 - 2024. All rights reserved.