python - 如何解释 word2vec 权重的形状?
问题描述
我正在尝试使用我的 word2vec 模型中的权重作为我在 keras 中的神经网络的嵌入层的权重。我正在关注的示例代码使用:
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 的向量)。
我可以运行示例代码并获得很好的结果,但我想知道它为什么有效。
解决方案
你已经说了答案。每个单词都被嵌入以固定大小为 100 的向量。在您的情况下,1350 是词汇的大小,即单词的数量。至少这是该Embedding
层所期望的。该矩阵的每一行 (1350, 100) 对应于一个单词。该Embedding
层只是weights[i]
为给定的单词索引执行i
并返回该行。
当您预测模型的输出时,单个单词可能是您的词汇表中的 1350 个单词之一,因此您得到一个大小为 1350 的向量,很可能是来自 softmax 的概率分布,告诉它可能是哪个单词。
推荐阅读
- google-chrome - Chrome(和 chromecast)播放在几秒钟后停止
- django - 从 django 模型字段中检索整数并将其添加到字典中,如果它符合条件
- c# - 如何在 Crystal Report 中显示从 mysql 检索为 blob 的图像?
- javascript - Zapier 中的 JavaScript - “IF”语句的不正确行为
- ionic-framework - 无法使用离子载玻片方法(没有 ChangeDetectorRef 提供者)
- php - 在 WooCommerce 商店主页和类别列表中显示 ACF 自定义字段
- java - Kafka Streams DSL 抑制操作似乎不起作用
- jenkins - Jenkins 使用 groovy 脚本添加 Git 行为
- oracle - 我在 Oracle Apex 的“创建页面”对话框中看不到我的插件
- character-encoding - 字符编码,debian 上的语言环境问题