Проблема
Я пытаюсь использовать 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)