我也一直在想这个。我不太清楚他们在做什么,但这是我发现的。
在paper on wide and deep learning 中,他们将嵌入向量描述为随机初始化,然后在训练期间进行调整以最小化错误。
通常,在进行嵌入时,您会采用数据的一些任意向量表示(例如 one-hot 向量),然后将其乘以表示嵌入的矩阵。这个矩阵可以通过 PCA 或在训练时通过 t-SNE 或 word2vec 等工具找到。
embedding_column 的实际代码是here,它被实现为一个名为_EmbeddingColumn 的类,它是_FeatureColumn 的一个子类。它将嵌入矩阵存储在其 sparse_id_column 属性中。然后,to_dnn_input_layer 方法应用这个嵌入矩阵来生成下一层的嵌入。
def to_dnn_input_layer(self,
input_tensor,
weight_collections=None,
trainable=True):
output, embedding_weights = _create_embedding_lookup(
input_tensor=self.sparse_id_column.id_tensor(input_tensor),
weight_tensor=self.sparse_id_column.weight_tensor(input_tensor),
vocab_size=self.length,
dimension=self.dimension,
weight_collections=_add_variable_collection(weight_collections),
initializer=self.initializer,
combiner=self.combiner,
trainable=trainable)
据我所知,嵌入似乎是通过将您正在使用的任何学习规则(梯度下降等)应用于嵌入矩阵而形成的。