Модель больше не из-за необработанного размера корпуса, а из-за количества уникальных слов / тегов документов, которые вы хотите, чтобы модель обучалась.
Если вы используете 37 миллионов уникальных документов, каждый со своим собственным идентификатором в качестве doc-тега, и вы используете общий размер вектора, например 300 измерений, только для этих doc-векторов потребуется:
37 million * 300 dimensions * 4 bytes/dimension = 44.4 GB
Для уникальных слов и внутренних весов модели потребуется больше ОЗУ, но не столько, сколько для этих doc-векторов со словарем нормального размера и разумным выбором min_count
, чтобы отбросить более редкие слова.
Gensim поддерживает потоковое обучение, которое не требует больше памяти для более крупного корпуса, но если вы хотите получить 47 миллионов 300-мерных векторов в той же модели, этот объем адресуемой памяти все равно потребуется.
Лучше всего обучить модель на некотором меньшем репрезентативном подмножестве - возможно, просто на случайном подмножестве - которое умещается в адресуемой памяти. Затем, когда вам понадобятся векторы для других документов, вы можете использовать infer_vector()
, чтобы вычислять их по одному, а затем сохранять их в другом месте. (Но у вас все равно не будет их всех в памяти, что может иметь решающее значение для достаточно быстрого сканирования для most_similar()
или других сравнений с полным корпусом).
Использование машины с большим количеством оперативной памяти значительно упрощает работу с такими большими наборами векторов.
(Еще один возможный трюк включает использование параметра mapfile_path
, но если вы не знакомы с тем, как ваша операционная система обрабатывает файлы с отображением памяти, и не понимаете, как в дальнейшем используется / преобразовывается большой массив docvecs для ваших последующих операций, он может будет больше проблем, чем оно того стоит. Это также повлечет за собой снижение производительности, что, вероятно, будет терпимо только в том случае, если ваши документы имеют один уникальный тег идентификатора, так что шаблон доступа к файлу mmapped всегда находится в обучении и поиске сходства простая загрузка спереди назад в том же первоначальном порядке. Вы можете увидеть этот ответ, чтобы получить более подробную информацию.)
person
gojomo
schedule
26.07.2018