我正在尝试使用GloVe表示整个文档。但是,GloVe最初旨在进行单词嵌入。获取文档嵌入的一种方法是获取文档中所有单词嵌入的平均值。
我正在跟踪发布的here解决方案来加载GloVe查找表。但是,当我尝试嵌入文档时,运行时非常慢(超过100万个文档,每个文档大约需要1秒)。
我想知道是否有什么方法可以加快这个过程。
可以下载here,下载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)