gensim word2vec доступ в / из векторов

в модели word2vec есть два линейных преобразования, которые принимают слово в пространстве vocab в скрытый слой (вектор" in"), а затем обратно в пространство vocab (вектор" out"). Обычно этот вектор отбрасывается после тренировки. Мне интересно, есть ли простой способ доступа к вектору out в gensim python? Точно так же, как я могу получить доступ к матрицы?

мотивация: я хотел бы реализовать идеи, изложенные в этой недавней статье: Двойное Вложение Модель пространства для ранжирования документов

здесь больше деталей. Из приведенной выше ссылки мы имеем следующую модель word2vec:

enter image description here

здесь входной слой имеет размер $V$, размер словаря, скрытый слой имеет размер $d$ и выходной слой размером $V$. Две матрицы - W_{IN} и W_{OUT}. обычно, модель word2vec сохраняет только матрицу W_IN. Это то, что возвращается, когда после обучения a модель word2vec в gensim, вы получаете такие вещи, как:

модель ['картофель']=[-0.2,0.5,2,...]

Как я могу получить доступ или сохранить W_{OUT}? Это, вероятно, довольно дорого для вычислений, и я действительно надеюсь, что некоторые встроенные методы в gensim сделают это, потому что я боюсь, что если я закодирую это с нуля, это не даст хорошей производительности.

4 ответов


хотя это может быть не правильный ответ (пока не могу комментировать), и никто не указал на это, взгляните здесь. Создатель, кажется, отвечает на подобный вопрос. Также это место, где у вас есть более высокий шанс на правильный ответ.

копаться в ссылке он опубликовал в исходном коде word2vec вы можете изменить удаление syn1 в соответствии с вашими потребностями. Просто не забудьте удалить его после того, как вы закончите, так как это окажется свиньей памяти.


ниже кода позволит сохранить / загрузить модель. Он использует pickle внутренне, необязательно mmap'ING внутренние большие матрицы NumPy модели в виртуальную память непосредственно из файлов диска, для обмена межпроцессной памятью.

model.save('/tmp/mymodel.model')
new_model = gensim.models.Word2Vec.load('/tmp/mymodel')

справочная информация Gensim - бесплатная библиотека Python, предназначенная для обработки необработанных, неструктурированных цифровых текстов ("обычный текст"). Алгоритмы в gensim, такие как скрытый семантический анализ, скрытое выделение Дирихле и случайные проекции обнаруживают семантическую структуру документов, исследуя статистические закономерности встречаемости слов в корпусе учебных документов.

некоторый хороший блог, описывающий использование и образец базы кода для запуска проект

ссылка на установку здесь

надеюсь, что это помогает!!!


в word2vec.py файл, который вам нужно изменить В следующей функции он в настоящее время возвращает вектор "in". Как вы хотите, вектор" out". "In" сохраняется в объекте syn0, а " out " - в объектной переменной syn1neg.

def save_word2vec_format(self, fname, fvocab=None, binary=False):
  ....
  ....
  row = self.syn1neg[vocab.index]

чтобы получить syn1 любого слова, это может сработать.

model.syn1[model.wv.vocab['potato'].point]

где модель-это обученная модель word2vec.