某些背景信息: 我正在准备一个大型输入数组,用于机器学习算法。我使用word嵌入(使用gensim和Word2Vec)来表示一个5字的句子作为矢量输入。在我的5个单词的句子上调用Word2Vec模型后,我将有一个500长度的浮动列表。
问题: 我遍历我的句子,并将单词嵌入函数应用于它们,形成一个带有新单词嵌入表示的新数组。 1个字= 100长度向量的花车。我有120万个句子要编码,当我达到百万行标记时,我的16GB内存最大化了。有没有办法可以避免这种情况发生?我读过发电机可以帮助提高内存效率吗?我的第一个解决方案使用numpy数组 - 我改为列表以帮助提高内存效率,但我仍然无法完成任务。我是否必须使用云服务来实现这一目标?或者可以将一些魔法应用于代码,以便能够在具有16Gb内存的笔记本电脑上执行此操作?
代码:
prev_time = time.time()
l_encodings = []
for k, sentence in enumerate(l_vocab): # l_vocab is a list of lists where the inner list is the 5-word-sentence
#print k, sentence
if k % 100000 == 0:
print k
print time.time() - prev_time
prev_time = time.time()
# form list of 5-word-embedding to append to l_encodings
for i, word in enumerate(sentence):
if i == 0:
l_array = model[word].tolist() # model[word] generates a 1d numpy array of length 100
elif i < 5:
l_array2 = model[word].tolist()
l_array += l_array2
# normalise sentence lengths
if len(l_array) != 500:
diff = 500 - len(l_array)
l_array += [0 for _ in range(diff)]
print l_array
print len(l_array)
l_encodings.append(l_array)
任何帮助表示赞赏 -