Как интерпретировать форму весов word2vec? - PullRequest
0 голосов
/ 13 мая 2018

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

word_model = gensim.models.Word2Vec(sentences, size=100, min_count=1, 
                                window=5, iter=100)
pretrained_weights = word_model.wv.syn0
keras_model.add(Embedding(input_dim=vocab_size, output_dim=emdedding_size, 
                weights=[pretrained_weights]))

Я понимаю, что word2vec создает векторы для каждого слова, в данном случае размером 100.

pretrained_weights.shape возвращает (1350,100), но я не уверен, что означает число 1350.

keras_model.predict(np.array([word_model.wv.vocab['test'].index])) возвращает вектор размера 1350, который я не уверен, как интерпретировать (ответ, на котором обучалась модель, является вектором размера 7200).

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

1 Ответ

0 голосов
/ 13 мая 2018

Вы уже сказали ответ. Каждое слово встроено, чтобы зафиксировать вектор размером 100. В вашем случае 1350 - это размер словарного запаса, то есть количество слов. По крайней мере, именно этого ожидает слой Embedding. Каждая строка этой матрицы (1350, 100) соответствует одному слову. Слой Embedding просто делает weights[i] для данного индекса слова i и возвращает строку.

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

...