大型Python列表最大化内存(Word2Vec)

时间:2018-01-17 09:10:03

标签: python memory memory-management machine-learning word2vec

某些背景信息: 我正在准备一个大型输入数组,用于机器学习算法。我使用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)

任何帮助表示赞赏 -

0 个答案:

没有答案