Загрузить часть векторов Glove с помощью gensim - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть список слов вроде ['like','Python'], и я хочу загрузить предварительно обученные векторы слов Glove этих слов, но файл Glove слишком велик, есть ли быстрый способ сделать это?

Что я пробовал

Я перебрал каждую строку файла, чтобы посмотреть, есть ли слово в списке, и добавил его в слово, если 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 голосов
/ 21 апреля 2019

Не существует gensim поддержки фильтрации слов, загруженных через load_word2vec_format(). Ближайшим является необязательный параметр limit, который можно использовать для ограничения количества считываемых векторов слов (игнорируя все последующие векторы).

Вы можете создать собственную подпрограмму для выполнения такой фильтрации, используя исходный код load_word2vec_format() в качестве модели. На практике вам, возможно, придется прочитать файл дважды: во-первых, чтобы точно узнать, сколько слов в файле пересекается с вашим набором слов интересов (так что вы можете выделить массив правильного размера, не доверяя объявленный размер в начале файла), затем второй раз, чтобы фактически прочитать слова интереса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...