Преобразование кадра данных в список списков разрывает мою память - Python - PullRequest
0 голосов
/ 11 февраля 2020

У меня проблемы с памятью, и мне было интересно, есть ли у кого-нибудь представление о том, что может произойти. Я пытаюсь сделать следующее: я обрабатываю некоторые тексты, поэтому я создаю словарь и удаляю все слова в корпусе, которых нет в словаре.

Итак, у меня есть две большие 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 для создания векторов для каждого слова)

...