Gensim word2vec доступ к векторам ввода/вывода
В модели word2vec есть два линейных преобразования, которые берут слово в пространстве словаря на скрытый слой (вектор "in" ), а затем обратно в пространство словака ( "выход" ). Обычно этот вектор отбрасывается после тренировки. Мне интересно, есть ли простой способ доступа к вектору out в gensim python? Эквивалентно, как я могу получить доступ к исходной матрице?
Мотивация: я хотел бы реализовать идеи, представленные в этом недавнем документе: Модель двойного вложения пространства для ранжирования документов
Вот более подробная информация. Из приведенной выше справки мы имеем следующую модель word2vec:
![введите описание изображения здесь]()
Здесь входной уровень имеет размер $V $, размер словаря, скрытый слой имеет размер $d $и выходной уровень размера $V $. Две матрицы W_ {IN} и W_ {OUT}. Обычно модель word2vec сохраняет только матрицу W_IN. Это то, что возвращается туда, где после обучения модели word2vec в gensim вы получаете такие вещи, как:
модель ['potato'] = [- 0.2,0.5,2,...]
Как я могу получить доступ или сохранить W_ {OUT}? Это, скорее всего, довольно дорогостоящее вычисление, и я действительно надеюсь на некоторые встроенные методы в gensim, чтобы сделать это, потому что я боюсь, что если я закоучу это с нуля, это не даст хорошей производительности.
Ответы
Ответ 1
Хотя это может быть неправильным ответом (не могу комментировать), и никто не указал на это, посмотрите здесь. Создатель, кажется, отвечает на аналогичный вопрос. Кроме того, место, где у вас есть более высокий шанс для действительного ответа.
Копаясь в ссылке
Ответ 2
Ниже код позволит сохранить/загрузить модель. Он использует соленое внутреннее пространство, при желании, моделируя внутренние большие матрицы NumPy в виртуальную память непосредственно из файлов диска, для совместного использования между процессами.
model.save('/tmp/mymodel.model')
new_model = gensim.models.Word2Vec.load('/tmp/mymodel')
Некоторая справочная информация Gensim - бесплатная библиотека Python, предназначенная для обработки необработанных, неструктурированных цифровых текстов ( "простой текст" ). Алгоритмы в gensim, такие как латентный семантический анализ, распределение скрытых распределений Дирихле и случайные проекции, открывают семантическую структуру документов, анализируя статистические шаблоны совпадения слов в составе учебных документов.
Некоторые хорошие блоги, описывающие использование и примеры кода, чтобы начать работу над проектом
Ссылка на установку здесь
Надеюсь, это поможет!!!
Ответ 3
В файле word2vec.py вам необходимо внести это изменение
В следующей функции он в настоящий момент возвращает вектор "in". Как вам нужен "вне" вектор. "In" сохраняется в объекте syn0, а "out" сохраняется в переменной объекта syn1neg.
def save_word2vec_format(self, fname, fvocab=None, binary=False):
....
....
row = self.syn1neg[vocab.index]