Обратите внимание, что эффект экономии памяти init_sims(replace=True)
не сохраняется во время циклов сохранения / загрузки, потому что при сохранении всегда сохраняются «сырые» векторы (из которых можно пересчитать нормализованные на единицу векторы). Таким образом, даже после повторной загрузки, когда вы вызываете most_similar()
в первый раз, init_sims()
будет вызываться за кулисами, и использование памяти будет удвоено.
Кроме того, набор данных GoogleNews довольно велик: для загрузки требуется более 3 ГБ даже до того, как нормализация единиц, возможно, удвоит использование памяти. Итак, в зависимости от того, что еще у вас запущено, и от ОЗУ машины, вы можете использовать память подкачки к моменту выполнения most_similar()
вычислений - что очень медленно для схожести результатов вычислений с каждым вектором и сортировки. опс. (Тем не менее, любые most_similar()
проверки после 1-го не нуждаются в повторном заполнении кэша векторных нормализованных единиц, поэтому должны выполняться быстрее, чем 1-й вызов.)
Учитывая, что вы сохранили модель после init_sims(replace=True)
, ее необработанные векторы уже нормализованы по единицам. Таким образом, вы можете вручную исправить модель, чтобы пропустить пересчет, сразу после вашего load()
:
model.syn0norm = model.syn0
Тогда даже ваш первый most_similar()
будет просто обращаться к (одиночному, отображенному в памяти) набору векторов, не вызывая init_sims()
.
Если это все еще слишком медленно, вам может потребоваться больше памяти или обрезать векторы до подмножества. Кажется, что векторы GoogleNews отсортированы так, чтобы наиболее часто встречающиеся слова помещались раньше, поэтому, если отбросить последние 10%, 50% или даже 90%, вы все равно можете получить полезный набор наиболее часто используемых слов. (Вам нужно будет выполнить эту обрезку самостоятельно, посмотрев на объект модели и исходный код.)
Наконец, вы можете использовать индексирование ближайших соседей, чтобы получить более быстрые совпадения с топ-N, но за счет дополнительной памяти и приблизительных результатов (которые могут пропустить некоторые из истинных совпадений с топ-N). В последних версиях gensim есть руководство по записной книжке IPython по адресу annoytutorial.ipynb Блокнот IPython демонстрационных блокнотов IPython в gensim docs/notebooks
каталог.
person
gojomo
schedule
27.09.2016