keras.layers.Embedding(input_dim, output_dim, embeddings_initializer='uniform', embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None)
这是Keras中文文档中的解释,给新手理解,不是我想讲的,有基础的同学可直接看后面。
将正整数(索引值)转换为固定尺寸的稠密向量。 例如: [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]
该层只能用作模型中的第一层。
- input_dim: int > 0。词汇表大小, 即,最大整数 index + 1。
- output_dim: int >= 0。词向量的维度。
- embeddings_initializer:
embeddings
矩阵的初始化方法。 - embeddings_regularizer:
embeddings
matrix 的正则化方法 。 - embeddings_constraint:
embeddings
matrix 的约束函数 。 - mask_zero: 是否把 0 看作为一个应该被遮蔽的特殊的 "padding" 值。 这对于可变长的 循环神经网络层 十分有用。 如果设定为
True
,那么接下来的所有层都必须支持 masking,否则就会抛出异常。 如果 mask_zero 为True
,作为结果,索引 0 就不能被用于词汇表中 (input_dim 应该与 vocabulary + 1 大小相同)。 - input_length: 输入序列的长度,当它是固定的时。 如果你需要连接
Flatten
和Dense
层,则这个参数是必须的 (没有它,dense 层的输出尺寸就无法计算)。
输入尺寸
尺寸为 (batch_size, sequence_length)
的 2D 张量。
输出尺寸
尺寸为 (batch_size, sequence_length, output_dim)
的 3D 张量。
如,
None表示batch大小。
我主要想记录一下Embeding层数据处理过程,即输入输出是什么,形状见上面。
Kares框架中的Embeding层究竟干了什么?
简单来说就是一个查表操作,输入一串词id,输出一串对应的词向量。
比如你输入一个2,他就输出他现在状态下的Embeding矩阵的第二行的那个词向量。所以要加载预训练的Embeding矩阵的话,需要将词id和Embeding矩阵的行对应好,比如,预训练的词id:2,对应的词向量为V2,则初始化Embeding矩阵的时候要把V2放在矩阵第2行。大约就是这个样子,具体细节可以参考这篇文章中一个非常简单的例子:https://www.jianshu.com/p/a3f3033a7379
下面留一个笔记自用,以后忘了回来看看,字迹有些潦草,仅供自用,需要的同学也可大体看看。