Размер учебного текста слишком велик для загрузки в память - PullRequest
0 голосов
/ 25 июня 2018

Я создал двухслойную модель LSTM, которую я хочу обучить на недавнем свалке статей из английской Википедии (15,1 ГБ текста). Я не могу загрузить корпус в текстовую переменную для встраивания слова. Как модели Keras RNN обычно обучаются на таких огромных текстовых корпусах, чтобы избежать ошибок памяти?

После попытки открыть 15,1 ГБ файл с помощью:

text = open('/home/connor/Desktop/wiki_en.txt').read().lower()

Я получаю это сообщение об ошибке:

(результат, израсходован) = self._buffer_decode (data, self.errors, final) MemoryError

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Вы можете преодолеть ограничение встроенной памяти с помощью библиотеки tds, которая позволяет создавать более или менее эквивалентные структуры, которые не ограничены ограничением памяти.Это не поможет с ограничениями вашего оборудования, но вы сможете иметь такие вещи, как таблицы размером более 2 ГБ.

https://github.com/torch/tds

0 голосов
/ 25 июня 2018

Я имел дело с той же проблемой для моего проекта Deep Learning. Я могу предложить 2 варианта:

  1. РЕДАКТИРОВАТЬ: Вы должны рассмотреть возможность пакетирования ваших данных путем преобразования их в небольшие двоичные фрагменты с помощью некоторых библиотек сериализатора (этот блог может помочь при выборе библиотеки) . Поскольку вы имеете дело с текстовыми данными, вы можете разбить данные на небольшие значащие фрагменты (например, если данные содержат разные типы новостей, их можно разделить на политику, спорт, здоровье и т. Д. В виде различных текстовых файлов - пакетов). Затем вы можете читать созданные текстовые файлы в пакетном режиме и подходить вашей модели для обучения. Поскольку я ничего не знаю о ваших текстовых данных, просто пытаюсь осветить путь! Я только что удалил двоичный случай, потому что это был неправильный подход к решению.

  2. Keras имеет свой собственный метод fit_generator, проверьте его с здесь . Метод просто принимает аргумент, который является функцией, которая генерирует пакеты и обучает модели сгенерированными пакетами. Это позволяет использовать процессор для генерации пакетов, пока графический процессор обрабатывает процесс обучения параллельно

Кстати, я использовал второй, который намного быстрее;) Надеюсь, это поможет.

Привет

0 голосов
/ 25 июня 2018

Вы на самом деле ответили на свой вопрос самостоятельно. Файл слишком большой, чтобы поместиться в оперативную память.

Вместо того, чтобы пытаться прочитать все в память сразу, попробуйте обрабатывать это, например, построчно. например

with open('....') as wiki_en: 
   for line in wiki_en: 
       line.lower()
       #do some more processing
...