У меня проблемы с памятью, и мне было интересно, есть ли у кого-нибудь представление о том, что может произойти. Я пытаюсь сделать следующее: я обрабатываю некоторые тексты, поэтому я создаю словарь и удаляю все слова в корпусе, которых нет в словаре.
Итак, у меня есть две большие pandas серии (train_x и test_x), которые занимают около 4,3 ГБ вместе (train_x составляет около 75%).
>>>train_x.head()
1 list of blank space
2 separated words that
3 represent my processed text
>>>type(train_x)
pandas.core.series.Series
Затем я создаю словарь из из этих текстов с моей собственной функцией. Это увеличивает потребление памяти до 4,75 ГБ. (Не собираюсь публиковать функцию, так как она длинная и не очень актуальна для проблемы)
>>>vocab
{"list", "of", "blank", "space",...}
>>>type(vocab)
set
Наконец, я просто хочу создать список списков, где каждый элемент - это слово, которое появляется в словаре. (размер словарного запаса составляет всего 20 Кб, поэтому на самом деле много слов, которые будут удалены). Поэтому я использовал следующую функцию:
def fitVocabulary(corpus, vocabulary):
return [[w for w in line.split() if w in vocabulary] for line in corpus]
>>>train_words = fitVocabulary(train_x, vocab)
>>>test_words = fitVocabulary(test_x, vocab)
>>>del train_x, test_x, vocab
>>>train_words
[["list", "of", "blank", "space"], ["separated", "words",...],...]
from sys import getsizeof
>>>getsizeof(train_words)
25105992 #I think this is bytes??
Однако, когда я выполняю эту операцию, мое потребление памяти увеличивается до 11,5 ГБ. Я не уверен, что может быть причиной такого большого потребления, так как я пытаюсь удалить переменные, которые я больше не использую (я знаю, Python не обязательно собирает мусор), и на данный момент в среде больше нет кода, поэтому больше нет ссылок на эти переменные.
Приветствуются любые идеи о том, что происходит, или предложения о лучших способах выполнения этих операций. (В идеале конечный результат - это список списков, поскольку мне нужно использовать его как вход для модели Gensim Word2Ve c для создания векторов для каждого слова)