tf.feature_column.shared_embedding_columns 是 TensorFlow 中用于创建共享相同嵌入权重的嵌入列列表的函数。这个功能特别适用于当你有多个稀疏输入且它们是同一类型(例如观看视频ID和印象视频ID共享相同的词汇表),并且你希望将它们转换为密集表示(例如,输入到深度神经网络DNN)时使用。

函数定义

tf.feature_column.shared_embedding_columns 的定义如下:

tf.feature_column.shared_embedding_columns(
    categorical_columns,
    dimension,
    combiner='mean',
    initializer=None,
    shared_embedding_collection_name=None,
    ckpt_to_load_from=None,
    tensor_name_in_ckpt=None,
    max_norm=None,
    trainable=True,
    use_safe_embedding_lookup=True
)
  • categorical_columns:一个由 categorical_column_* 函数创建的分类列的列表。这些列必须全部属于同一类型并具有相同的参数,除了 key。例如,它们可以是具有相同词汇文件的 categorical_column_with_vocabulary_file。部分或全部列也可以是 weighted_categorical_column

  • dimension:嵌入向量的维度。

  • combiner:多个向量组合的方式,默认为 'mean'。

  • initializer:嵌入矩阵的初始化器,默认为 tf.truncated_normal_initializer

  • ckpt_to_load_fromtensor_name_in_ckpt:用于从checkpoint文件中加载预训练的嵌入矩阵。

  • max_norm:如果设置,则使用L2归一化。

  • trainable:是否允许嵌入权重被训练。

  • use_safe_embedding_lookup:是否使用安全的嵌入查找。

使用示例

以下是一个使用 shared_embedding_columns 的示例:

watched_video_id = tf.feature_column.categorical_column_with_vocabulary_file(
    'watched_video_id', video_vocabulary_file, video_vocabulary_size)
impression_video_id = tf.feature_column.categorical_column_with_vocabulary_file(
    'impression_video_id', video_vocabulary_file, video_vocabulary_size)
columns = tf.feature_column.shared_embedding_columns(
    [watched_video_id, impression_video_id], dimension=10)
estimator = tf.estimator.DNNClassifier(feature_columns=columns, ...)
在这个例子中,watched_video_idimpression_video_id 共享相同的词汇表文件,并且它们将共享相同的嵌入权重。这些嵌入权重可以用于深度学习模型,如DNNClassifier。

注意事项

  • 确保所有输入的分类列都是同一类型并且具有相同的参数,除了 key
  • 如果使用预训练的嵌入矩阵,确保提供正确的checkpoint路径和张量名称。
  • 嵌入权重可以被训练,也可以设置为不可训练,这取决于你的模型需求。

这个函数是构建深度学习模型中特征工程的重要工具,特别是在处理具有相同语义的多个稀疏特征时。