Требуемый размер модели в адресуемой памяти во многом зависит от количества требуемых весов, от количества уникальных слов и уникальных тегов документов.
Имея 145 000 000 уникальных тегов документов, независимо от того, сколько слов вы ограничиваете, только для необработанных векторов документов потребуется:
145,000,000 * 300 dimensions * 4 bytes/dimension = 174GB
Вы можете попробовать меньшийнабор данных.Вы можете уменьшить размер вектора.Вы могли бы получить больше памяти.
Сначала я бы попробовал один или несколько из них, просто чтобы убедиться, что вы можете заставить все работать и некоторые начальные результаты.
Существует один прием, который лучше всего рассматривать как экспериментальный, который может помочь в обучении больших наборов документов-векторов при некоторой стоимости дополнительной сложности и более низкой производительности: параметр docvecs_mapfile
Doc2Vec
.
Обычно вы не хотите, чтобы сеанс обучения в стиле Word2Vec
/ Doc2Vec
использовал какую-либо виртуальную память, потому что любое обращение к более медленному вводу-выводу на диск делает обучение чрезвычайно медленным.Однако для большого набора документов, который повторяется только в одном порядке, снижение производительности может быть выжившим после создания массива документа-векторов, который будет поддерживаться файлом с отображением в памяти.По сути, каждый проход обучения проходит по файлу от шрифта к концу, читая каждый раздел один раз и разбирая его по страницам один раз.
Если вы укажете аргумент docvecs_mapfile
, Doc2Vec
выделит массив doc-vectors, который будет поддерживаться этим файлом на диске.Таким образом, у вас будет файл размером в сотни ГБ на диске (в идеале SSD), диапазоны которого выгружаются в / из ОЗУ по мере необходимости.
Если вы попробуете это, сначала поэкспериментируйте с этой опцией на небольших прогонах, чтобы ознакомиться с ее работой, особенно в отношении сохранения / загрузки моделей.
Также обратите внимание, что если вы когда-либо сделаете значение по умолчанию most_similar()
для векторов документов, из необработанного массива должен быть создан еще один массив нормализованных векторов 174 ГБ.(Вы можете принудительно выполнить это на месте, сузив существующие необработанные значения, явно вызвав вызов init_sims(replace=True)
перед вызовом любого другого метода, требующего векторов с единичной нормой.)