Model

class MonolithModel(params=None)

模型开发的基类,用户自定义模型应该继承该类。

create_embedding_feature_column(**kwargs)

创建嵌入特征列(embedding feature column)

Parameters:
  • feature_name (str) – 特征列的名字

  • occurrence_threshold (int) – 用于低频特征过滤,如果出现次数小于 occurrence_threshold,则这个特征将大概率不会进入模型

  • expire_time (int) – 特征过期时间,如果一个特征超过 expire_time 没有更新,则这个特征可能从 hash 表中移除

  • max_seq_length (int) – 默认为 0,表示非序列特征,如果设为正数,则表示序列特征的长度

  • combiner (str) –

    对于 multi-hot 特征(如用户 7 天内看过的视频,可以有多条)指定聚合方式。

    • reduce_sum: 默认聚合方式,将特征项(FID)对应的 embedding 执行 sum pooling 后当成特征的 embedding

    • reduce_mean: 将特征项(FID)对应的 embedding 执行 avg pooling 后当成特征的 embedding

    • first_n: 直接保留前 N 个特征项(FID)对应的 embedding,输出一个3D Tensor(序列 Embedding),方便后面做 Attention 等操作

Warning

  • 不要将 3D(序列)特征与普通的 sum/mean pooling 特征放在一个 lookup_embedding_slice 中获取,否则会出错,原因是 lookup_embedding_slice 一般会接一种 out_type=[None, stack, concate] 等操作, 如果 3D 与 2D 特征混在一起,后面的 concate/stack 会出错

  • combiner='first_n'max_seq_length > 0 需要绑定出现

Returns:

FeatureColumn, 特征列

lookup_embedding_slice(**kwargs)

Monolith 中 embedding 是分切片的,每个切片可以有独立的初始化器、优化器、压缩器、学习率等。切片的引入使 Embedding 更加强大。如某些情况 下要共享 Embedding,另一些情况下要独立 Embedding,与一些域交叉要用一种 Embedding,与另一些域交叉用另一种 Embedding 等。切片的引入可以方便 解上以上问题。切片与完整 Embedding 的关系由 Monolith 自动维护,对用户透明。

Parameters:
  • slice_name (str) – 切片名称

  • features (List[str], Dict[str, int]) –

    支持三种形式

    1. List[str]: 特征名列表,此时每个切片的长度相同,由 slice_dim 确定,不能为 None

    2. List[Tuple(str, int)]: (特征名,切片长度) 列表,此时每个切片的长度可以不同,全局的 slice_dim 必须为 None

    3. Dict[str, int]: 特征字典,特征名 -> 切片长度,此时每个切片的长度可以不同,全局的 slice_dim 必须为 None

  • slice_dim (int) – 切片长度

  • initializer (Initializer) – 切片的初始化器,Monolith 中定义初的始化器

  • optimizer (Optimizer) – 切片的优化器,Monolith 中定义的优化器

  • compressor (Compressor) – 切片的压缩器,推理阶段加载模型时以何种方式压缩模型,压缩器会影响 Embedding Hash Table 在内存中的大小

  • learning_rate_fn (tf.Tensor) – 切片的学习率