【发布时间】:2019-08-02 11:57:41
【问题描述】:
我正在使用 python 进行 google collab,并且我有一个 12Gb Ram。 我正在尝试使用 google 预训练的 word2vec 来用向量表示句子。 即使它们没有相同数量的单词,我也应该有相同长度的向量,所以我使用了填充(这里句子的最大长度是我的变量最大值) 问题是每次我想创建一个包含所有向量的矩阵时,我都会很快耗尽 RAM 内存(在 20k th / 128k 向量上)
这是我的代码:
final_x_train = []
l=np.zeros((max,300)) # The legnth of a google pretained model is 300
for i in new_X_train:
buildWordVector(final_x_train, i, model, l)
gc.collect() #doesn't do anything except slowing the run time
def buildWordVector(new_X, sent, model, l):
for x in range(len(sent)):
try:
l[x]= list(model[sent[x]])
gc.collect() #doesn't do anything except slowing the run time
except KeyError:
continue
new_X.append([list(x) for x in l])
我拥有的所有变量:
df: 16.8MiB
new_X_train: 1019.1KiB
X_train: 975.5KiB
y_train: 975.5KiB
new_X_test: 247.7KiB
X_test: 243.9KiB
y_test: 243.9KiB
l: 124.3KiB
final_x_train: 76.0KiB
stop_words: 8.2KiB
但我使用的是 12Gb/12Gb (RAM) 并且会话已过期
如您所见,垃圾收集器没有做任何事情,因为显然看不到变量,但我真的需要一个解决方案来解决这个问题,谁能帮帮我吗?
【问题讨论】:
-
将结果存储在文件中,并使用 del 关键字删除结果变量。
-
model的大小是多少? Word2Vec 相当大(IIRC 正确 GB)。我没有在您显示的内存分配列表中看到这一点
标签: python machine-learning nlp word2vec