不能理解keras.layers.Embedding()的含义

时间:2019-04-01 11:08:18

标签: python tensorflow keras

在此documentation中,它表示“将正整数(索引)转换为固定大小的密集向量。例如[[4],[20]]-> [[0.25,0.1],[0.6 ,-0.2]]“

任何人都可以说清楚些吗?

该函数如何将整数转换为密集向量?

2 个答案:

答案 0 :(得分:0)

您可以将其作为列表。此列表中的每个项目都是固定大小的向量。 调用此层时,它将输入作为索引并返回相应的向量。

此列表中的向量在训练过程中得到了优化。

答案 1 :(得分:0)

您可以在Date.parse的出版物中了解更多信息,其中他介绍了称为Word2Vec的向量嵌入。

嵌入背后的想法是将稀疏向量压缩为低维密集向量。让我们考虑一个10万个单词的字典。每个单词都可以表示为大小为100000的向量,其中的全0和一个1(取决于单词位置/索引)。直接用单词的索引表示单词是无效的(考虑对idexe的排序或数学运算)。但是,大的稀疏向量不适用于NN。嵌入尝试将单词封装在一个较低维的连续空间(例如k = 100)中,其中相似的单词之间的距离会更短。米科洛夫曾经通过单词出现的频率来定义相似性。 Mikolov以这样的方式训练/调整嵌入矩阵E:E(i)* E(j)可以大致表示单词 i和j 出现在附近的概率。后来的出版物表明,可以通过在多层网络中随机初始化嵌入层来获得相似的结果,并且经过训练,嵌入将表现出某种相似性

粗略地说:NN将每个索引随机投影到低维空间中的某个点。在进行反向传播训练期间,这些预测以某种松散的结构进行组织,有助于完成当前的任务。

Index   Sparse N=6  ->  Embedding K=3
----------------------------------------
0      [1 0 0 0 0 0]  [0.425 0.233 0.556]
1      [0 1 0 0 0 0]  [0.046 0.975 0.058]
2      [0 0 1 0 0 0]  [0.306 0.424 0.651]
3      [0 0 0 1 0 0]  [0.293 0.12  0.546]
4      [0 0 0 0 1 0]  [0.236 0.657 0.046]
5      [0 0 0 0 0 1]  [0.907 0.321 0.882]