Word Embedding in Tensorflow

嵌入层可以理解为一个查询表,它从整数索引(表示特定单词)映射到稠密向量(它们的嵌入向量)。嵌入的维数是一个超参数,您可以用它来试验看看什么对您的问题有效,这与您在稠密层中试验神经元的数量非常相似。
Word Embedding in Tensorflow
注意: 嵌入层只能当做输入层.

创建嵌入层时,嵌入的权重是随机初始化的(与任何其他层一样)。在训练过程中,通过反向传播逐步调整。一旦训练好了,习得的单词嵌入将大致编码单词之间的相似性(因为它们是针对您的模型所训练的特定问题而学习的)。

对于文本或序列问题,嵌入层采用整数的二维张量,输入的形状为(samples,sequence_length),其中每一行都是整数序列, 每个整数代表一个单词, 返回的张量比输入多一个轴 (samples, sequence_length, embedding_dimensionality). 比如, 传递一个 (2,3) 的二维张量,输出则为 (2,3,n) 的三维张量
其中, n 为超参数, 表示每个嵌入向量的维数.这里定义为 5, 如下图所示.
Word Embedding in Tensorflow

要将这种可变长度序列转换为固定的表示形式,有多种标准方法。在将RNN、Attention或pooling层传递给稠密层之前,可以使用它。本教程使用最简单的polling.

  1. 在输入的时候, 设定最长序列的长度为输入序列的维度, 不足这个长度的序列后面元素填充0, 如下图所示
    Word Embedding in Tensorflow
  2. 在 池化层 传递给 全连接层 时候, GlobalAveragePooling1D 层通过对序列维数进行平均,为每个 sample 返回一个固定长度的输出向量。

Create a simple model

we will use the Keras Suquential API to define out model. In this case it is a “Continuous bag of words” style model.(另一种是skip-gram 方法)

  • 接下来,嵌入层获取整数编码的词汇表并查找每个单词索引的嵌入向量。这些向量在模型训练过程中被学习得到.返回的向量比输入多一个轴 (samples或batch, sequence_length, embedding_dimensionality)
  • 然后,GlobalAveragePooling1D 层通过对序列维数进行平均,为每个 sample 返回一个固定长度的输出向量。这允许模型以最简单的方式处理可变长度的输入。
  • 这个固定长度的输出向量通过一个具有16个隐藏单元的全连接(密集)层。
  • 最后一层与单个输出节点紧密连接。使用sigmoid**函数,这个值是一个介于0和1之间的浮点数,表示评审结果为正的概率(或置信水平)。标签为1(正面感情)和0(负面感情)
  1. 本篇文章不讨论嵌入层具体是如何学习, 即如何优化参数的
  2. 本篇文章训练的模型用于情感分类, 输入句子, 输出为1(正面感情), 0(负面感情)
  3. 模型结构: 嵌入层 \longrightarrow GlobalAveragePooling1D \longrightarrow 全连接层(单个神经元-sigmoid)