Класс модели word2vec (Python) - PullRequest
3 голосов
/ 07 марта 2019

Задача

Я хочу создать класс для word2vec модели и вызвать его, чтобы процесс был быстрее и эффективнее.

Сценарий

from docsim import DocSim
from gensim.models.keyedvectors import KeyedVectors

word2vec_model = 'w2vec_wiki_id_case_doc'

model = KeyedVectors.load(word2vec_model, mmap='r')
ds = DocSim(model)

Проблема

С моим кодом, процесс считывания модели word2vec занимает много времени. Как я могу решить проблему?

Ответы [ 2 ]

1 голос
/ 07 марта 2019

При gensim нет способа обойти начальное время загрузки модели. Вы можете использовать меньшую модель для сокращения времени загрузки, но большие файлы модели неизбежно потребуют несколько секунд для загрузки при инициализации приложения. Однако, если вы правильно разработали свое приложение, это должна быть цена, которую вы платите только один раз (при первом запуске вашей программы).

Если действительно важно сохранить эти несколько секунд при запуске, вы можете подумать о переключении с реализации gensim word2vec на magnitude, который имеет начальное время загрузки менее одной секунды, а также улучшения скорости / удобства использования во многих других областях (например, улучшения скорости в сотни-тысячи раз быстрее, чем gensim для многих задач). Если вам интересно немного почитать о фоне, вы можете прочитать академическую статью ее авторов (бесплатно для чтения на arXiv):

Величина: быстрый, эффективный универсальный пакет для встраивания векторов

0 голосов
/ 07 марта 2019

Операция .load() по своей сути требует времени, особенно для чтения ввода-вывода, и больше времени для больших моделей.

Вы можете ускорить ввод-вывод, используя более быстрый том - например, SSD вместо вращающегося диска или тома удаленной сети.В некоторых случаях может помочь сохранение сжатой модели.(Но это помешает вашему mmap='r' получить желаемый эффект, потому что сжатый массив на диске не может быть отображен в память. Обратите внимание, что отображение памяти может сохранить некоторую оперативную память, особеннов случае, когда несколько процессов загрузили один и тот же файл, но не могут в конечном итоге сэкономить время загрузки, в отличие от простой отсрочки времени загрузки до момента первого использования.)

Пока вы еще не сказалиразмер вашей модели или медленная загрузка, о которой вы даже упомянули, заставляет задуматься, настолько ли велика модель, а объем ОЗУ сравнительно небольшой, чтобы вызывать подкачку виртуальной памяти во время загрузки модели (и, следовательно, также накаждая последующая most_similar() -подобная операция).С такими моделями вы никогда не захотите полагаться на виртуальную память - поэтому, если это так, то основным способом «ускорить процесс» будет работа в системе с большим объемом оперативной памяти.

...