我正在尝试使用我的word2vec模型中的权重作为keras中神经网络嵌入层的权重。我下面介绍的example code使用:
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的向量)。
我可以运行示例代码并获得良好的结果,但我想知道它为什么工作。
发布于 2018-05-13 07:04:44
你已经说过答案了。每个单词被嵌入以固定大小为100的向量。在你的例子中,1350是词汇量,即单词的数量。至少这是Embedding层所期望的。该矩阵(1350,100)的每一行对应于单个字。Embedding层只是对给定的单词索引i执行weights[i]并返回行。
当你预测模型的输出时,一个单词可能是你词汇表中的1350个单词中的一个,因此你得到了一个大小为1350的向量,很可能是来自softmax的概率分布,告诉你它可能是哪个单词。
https://stackoverflow.com/questions/50311253
复制相似问题