Мне тоже интересно об этом. Мне не совсем ясно, что они делают, но это то, что я нашел.
В paper on wide and deep learning они описывают векторы внедрения как случайно инициализированные, а затем корректируются во время обучения, чтобы минимизировать ошибку.
Обычно, когда вы делаете вложения, вы произвольно произвольное векторное представление данных (таких как однострунные векторы), а затем умножаете его на матрицу, представляющую вложение. Эта матрица может быть найдена с помощью 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)
Так, насколько я могу видеть, похоже, вложения формируется путем применения правила независимо от обучения, который вы используете (градиентный спуск и т.д.) к матрице вложения.