Быстрый способ получить вектор документа с помощью GloVe - PullRequest
0 голосов
/ 04 июня 2019

Проблема

Я пытаюсь использовать GloVe для представления всего документа.Однако GloVe изначально предназначен для встраивания слов.Один из способов получить вложение документа - взять среднее значение для всех вложений слов в документе.

Я следую решению, опубликованному здесь , чтобы загрузить справочную таблицу GloVe.Однако, когда я попытался внедрить документ, время выполнения было крайне медленным (около 1 с на документ для более 1 миллиона документов).

Мне интересно, можно ли как-нибудь ускорить этот процесс.

Справочную таблицу GloVe можно загрузить здесь , а следующий код я используючтобы получить вложение документа.Данные хранятся в pd.DataFrame(), где есть столбец review.

Обратите внимание, что в text_processed_list могут быть некоторые слова, которых нет в справочной таблице, поэтому try...catch... вступает в игру.

import numpy as np
import pandas as pd
import string
import csv

from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords

remove_list = stopwords.words('english') + list(string.punctuation)

X = np.zeros((dataset_size, 300))
glove_model = pd.read_table("glove.42B.300d.txt", sep=" ", index_col=0, header=None, quoting=csv.QUOTE_NONE)
for iter in range(dataset_size):
    text = data.loc[iter, "review"]
    text_processed_list = [word for word in word_tokenize(text.lower()) if word not in remove_list]
    for word in text_processed_list:
        try:
            X[iter] += glove_model.loc[word].values
        except KeyError:
            pass
        X[iter] /= len(text_processed_list)

...