gensim word2vec доступ в / из векторов
в модели word2vec есть два линейных преобразования, которые принимают слово в пространстве vocab в скрытый слой (вектор" in"), а затем обратно в пространство vocab (вектор" out"). Обычно этот вектор отбрасывается после тренировки. Мне интересно, есть ли простой способ доступа к вектору out в gensim python? Точно так же, как я могу получить доступ к матрицы?
мотивация: я хотел бы реализовать идеи, изложенные в этой недавней статье: Двойное Вложение Модель пространства для ранжирования документов
здесь больше деталей. Из приведенной выше ссылки мы имеем следующую модель word2vec:
здесь входной слой имеет размер $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, такие как скрытый семантический анализ, скрытое выделение Дирихле и случайные проекции обнаруживают семантическую структуру документов, исследуя статистические закономерности встречаемости слов в корпусе учебных документов.
некоторый хороший блог, описывающий использование и образец базы кода для запуска проект
- http://mccormickml.com/2016/04/12/googles-pretrained-word2vec-model-in-python/
- https://rare-technologies.com/making-sense-of-word2vec/
- https://rare-technologies.com/word2vec-tutorial/
- https://rare-technologies.com/deep-learning-with-word2vec-and-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.