Нормализовать векторы в модели Генсима - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть предварительно обученное вложение слов с векторами разных норм, и я хочу нормализовать все векторы в модели.Я делаю это с помощью цикла for, который повторяет каждое слово и нормализует его вектор, но модель у нас огромная и занимает слишком много времени.Gensim включает какой-нибудь способ сделать это быстрее?Я не могу найти его.

Спасибо !!

1 Ответ

0 голосов
/ 29 декабря 2018

Экземпляры Gensim KeyedVectors (общий интерфейс наборов слов-векторов) содержат метод init_sims(), который внутренне вычисляет нормализованные векторы единичной длины, используя собственную векторную операцию для скорости.

Когда определенные операции, которые обычно выполняются с нормализованными по единицам векторами, предпринимаются в первый раз, автоматически вызывается init_sims(), и модель кэширует нормализованные векторы в свойстве модели (vectors_norm) - примерно вдвое больше потребления оперативной памяти.

После вызова вы можете получить нормированные векторы, используя метод .word_vec():

normed_wv = kv_model.word_vec(word, use_norm=True)

Если вы уверены, что вам не понадобятся необработанные ненормированные векторы,Вы также можете вызвать init_sim() самостоятельно с помощью необязательного параметра replace.Затем нормированные векторы будут засорять необработанные векторы на месте, сохраняя дополнительную оперативную память.Например:

kv_model.init_sims(replace=True)

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

...