Загрузка только необработанных векторов займет ...
3 000 000 слов * 300 измерений * 4 байта / измерение = 3,6 ГБ
... адресуемой памяти (плюс некоторые накладные расходы дляслово-ключ к карте положения индекса).
Кроме того, как только вы захотите выполнить операцию типа most_similar()
, будут созданы нормализованные версии векторов с единичной длиной, для чего потребуется еще 3,6 ГБ.(Вместо этого вы можете засорять необработанные векторы на месте, сохраняя эту дополнительную память, если вы будете только сравнивать косинусоподобие между единичными нормированными векторами, выполнив 1-е вынужденное явное model.init_sims(replace=True)
.)
Таким образом, вы, как правило, хотите выполнять полные операции только на машине с ОЗУ не менее 8 ГБ.(Любой обмен во время поиска в полном массиве most_similar()
сделает операции очень медленными.)
Если бы что-то еще использовало пространство кучи Python, это могло бы составить MemoryError
, которое вы видели.
Метод load_word2vec_format()
также имеет необязательный аргумент limit
, который будет загружать только указанное число векторов - так что вы можете использовать limit=500000
, чтобы сократить требования к памяти примерно на 5/6.(И, поскольку GoogleNews
и другие наборы векторов обычно упорядочены от наиболее редко встречающихся слов, вы получите наиболее часто встречающиеся слова размером 500 Кбайт. Слова с более низкой частотой обычно имеют гораздо меньшее значение и даже не так, как слова.хорошие векторы, поэтому их игнорирование может не повредить.)