【问题标题】:Cant comprehend the meaning of keras.layers.Embedding()无法理解 keras.layers.Embedding() 的含义
【发布时间】:2019-08-22 12:52:39
【问题描述】:

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

谁能说得清楚点?

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

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

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

    此列表中的向量在训练期间进行了优化。

    【讨论】:

      【解决方案2】:

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

      嵌入背后的想法是将稀疏向量压缩为低维密集向量。让我们考虑一个 100k 单词的字典。每个单词可以表示为大小为 100000 的向量,其中所有 0 和单个 1 取决于单词位置/索引。直接用它的索引来表示一个词是无效的(考虑对索引进行排序或数学运算)。但是大型稀疏向量不太适合在 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]
      

      【讨论】:

      • 您能否使用问题中显示的示例使其实际全面?
      • @voo_doo 我为您添加了一个示例。没有太多的东西。嵌入向量从随机分布中采样,然后通过反向传播进行更新。
      猜你喜欢
      • 2019-11-11
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-05
      • 2015-12-25
      • 2011-09-23
      相关资源
      最近更新 更多