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 后当成特征的 embeddingreduce_mean
: 将特征项(FID)对应的 embedding 执行 avg pooling 后当成特征的 embeddingfirst_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]
) –支持三种形式
List[str]
: 特征名列表,此时每个切片的长度相同,由slice_dim
确定,不能为 NoneList[Tuple(str, int)]
: (特征名,切片长度) 列表,此时每个切片的长度可以不同,全局的slice_dim
必须为 NoneDict[str, int]
: 特征字典,特征名 -> 切片长度,此时每个切片的长度可以不同,全局的slice_dim
必须为 None
slice_dim (
int
) – 切片长度initializer (
Initializer
) – 切片的初始化器,Monolith 中定义初的始化器optimizer (
Optimizer
) – 切片的优化器,Monolith 中定义的优化器compressor (
Compressor
) – 切片的压缩器,推理阶段加载模型时以何种方式压缩模型,压缩器会影响 Embedding Hash Table 在内存中的大小learning_rate_fn (
tf.Tensor
) – 切片的学习率