2、推荐广告算法模型之特征交叉模型

2022-08-04 01:03:50 浏览数 (2)

自动特征交叉模型包括:FM系列(FM、FFM、AFM)、Embedding MLP(FNN、PNN、NFM、ONN)、双路并行(Wide&Deep、DeepFM、DCN、xDeepFM、AutoINT)

FM系列(FM、FFM、AFM)

FM

  • 原理

将特征映射为K维向量,然后两两组合,旨在解决稀疏数据下的特征组合问题。

两两特征组合的方式最简单的方式为多项式组合,在数据稀疏的情况下,使用多项式组合预估的准确性会大大降低,FM提出一种先将特征映射为K维向量,然后两两组合的方式,由于学习到的参数更多,会提高预估的准确性。

  • 公式

  • 损失函数

(交叉熵损失函数)

  • 使用细节

(同LR)

  • 实现方法
代码语言:javascript复制
def model_fn(features, labels, mode, params):
    """
    FM model
    """
    feature_columns = build_features()

    input = tf.feature_column.input_layer(features, feature_columns)

    input_dim = input.get_shape().as_list()[-1]

    with tf.variable_scope('linear'):
        init = tf.random_normal(shape=(input_dim, 1))
        w = tf.get_variable('w', dtype=tf.float32, initializer=init, validate_shape=False)
        b = tf.get_variable('b', shape=[1], dtype=tf.float32)

        linear_term = tf.add(tf.matmul(input, w), b)

    with tf.variable_scope('fm_interaction'):
        init = tf.truncated_normal(shape=(input_dim, params['factor_dim']))
        v = tf.get_variable('v', dtype=tf.float32, initializer=init, validate_shape=False)
        sum_square = tf.pow(tf.matmul(input, v), 2)
        square_sum = tf.matmul(tf.pow(input, 2), tf.pow(v, 2))
        interaction_term = 0.5 * tf.reduce_sum(sum_square - square_sum, axis=1, keep_dims=True)

    with tf.variable_scope('output'):
        y = tf.math.add(interaction_term, linear_term)

    return y
  • 论文

Fast context-aware recommendations with factorization machines

  • 相关文章

张俊林:推荐系统召回四模型之:全能的FM模型

FFM

  • 原理

将特征映射为(Field*K),然后对特征进行两两组合,FFM认为一个特征和其他特征进行组合时,对不同特征应该对应个不同的向量。

  • 公式
  • 损失函数

(交叉熵损失函数)

  • 使用细节

(同LR)

  • 实现方法
代码语言:javascript复制
def model_fn(features, labels, mode, params):
    """
    FFM model
    """
    feature_columns, field_dict = build_features()
    field_dim = len(np.unique(list(field_dict.values())))
    input = tf.feature_column.input_layer(features, feature_columns)
    input_dim = input.get_shape().as_list()[-1]

    with tf.variable_scope('linear'):
        linear_term = tf.layers.dense(input, units=1)

    with tf.variable_scope('field_aware_interaction'):
        init = tf.truncated_normal(shape=(input_dim, field_dim, params['factor_dim']))
        v = tf.get_variable('v', dtype=tf.float32, initializer=init, validate_shape=False)

        interaction_term = tf.constant(0, dtype=tf.float32)
        for i in range(input_dim):
            for j in range(i   1, input_dim):
                interaction_term  = tf.multiply(
                    tf.reduce_mean(tf.multiply(v[i, field_dict[j], :], v[j, field_dict[i], :])),
                    tf.multiply(input[:, i], input[:, j])
                )
        interaction_term = tf.reshape(interaction_term, [-1, 1])

    with tf.variable_scope('output'):
        y = tf.math.add(interaction_term, linear_term)

    return y
  • 论文
  • 相关文章

张俊林:推荐系统召回四模型之二:沉重的FFM模型

AFM

  • 原理

FM会让一个特征固定一个特定的向量,当这个特征与其他特征做交叉时,都是用同样的向量去做计算。这个是很不合理的,因为不同的特征之间的交叉,重要程度是不一样的。如何体现这种重要程度,之前介绍的FFM模型是一个方案。另外,结合了attention机制的AFM模型,也是一种解决方案。

  • 公式

  • 损失函数

(交叉熵损失函数)

  • 使用细节

(同LR)

  • 实现方法
  • 论文

《Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks》

  • 相关文章

梁勇:推荐系统遇上深度学习(八)--AFM模型理论和实践

Embedding MLP(FNN、PNN、NFM、ONN)

FNN

  • 原理

FNN是2016年提出的一种基于FM预训练Embedding的NN模型,其思路也比较简单;FM本身具备学习特征Embedding的能力,DNN具备高阶特征交叉的能力,因此将两者结合是很直接的思路。FM预训练的Embedding可以看做是“先验专家知识”,直接将专家知识输入NN来进行学习。注意,FNN本质上也是两阶段的模型,与Facebook在2014年提出GBDT LR模型在思想上一脉相承。

  • 公式

FM MLP

  • 损失函数

(交叉熵损失函数)

  • 使用细节

(同LR)

  • 实现方法
  • 论文
  • 相关文章

PNN

  • 原理

PNN是2016年提出的一种在NN中引入Product Layer的模型,其本质上和FNN类似,都属于Embedding MLP结构。作者认为,在DNN中特征Embedding通过简单的concat或者add都不足以学习到特征之间复杂的依赖信息,因此PNN通过引入Product Layer来进行更复杂和充分的特征交叉关系的学习。PNN主要包含了IPNN和OPNN两种结构,分别对应特征之间Inner Product的交叉计算和Outer Product的交叉计算方式。

  • 公式

product layer 中每个节点是两两Field的embedding对应的“product”结果,而非所有Field的。根据 product 函数的不同选择,PNN也有不同实现,这里的想象空间就很多了。文中尝试了相对常见的向量内积(inner product)和外积(outer product),对应 IPNN 和OPNN。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

  • 损失函数
  • 使用细节
  • 实现方法
  • 论文

NFM

  • 原理

特征交叉方式:NFM将PNN的Product Layer替换成了Bi-interaction Pooling结构来进行特征交叉的学习。

  • 公式

Bi-interaction Pooling:

编辑

添加图片注释,不超过 140 字(可选)

编辑

添加图片注释,不超过 140 字(可选)

  • 损失函数
  • 使用细节
  • 实现方法
  • 论文

ONN

  • 原理

ONN是2019年发表的CTR预估,我们知道PNN通过引入不同的Product操作来进行特征交叉,ONN认为针对不同的特征交叉操作,应该用不同的Embedding,如果用同样的Embedding,那么各个不同操作之间就会互相影响而最终限制了模型的表达。

  • 公式

编辑切换为居中

添加图片注释,不超过 140 字(可选)

  • 损失函数
  • 使用细节
  • 实现方法
  • 论文

Wide&Deep

  • 原理

Wide And Deep是2016年Google提出的用于Google Play app推荐业务的一种算法。其核心思想是通过结合Wide线性模型的记忆性(memorization)和Deep深度模型的泛化性(generalization)来对用户行为信息进行学习建模。

  • 公式

编辑切换为居中

添加图片注释,不超过 140 字(可选)

  • 损失函数
  • 使用细节
  • 实现方法
  • 论文

DeepFM

  • 原理

我们知道FM只能够去显式地捕捉二阶交叉信息,而对于高阶的特征组合却无能为力。DeepFM就是在FM模型的基础上,增加DNN部分,进而提高模型对于高阶组合特征的信息提取。DeepFM能够做到端到端的、自动的进行高阶特征组合,并且不需要人工干预。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

  • 公式
  • 损失函数
  • 使用细节
  • 实现方法
  • 论文

DCN

  • 原理

特征交叉方式:Deep&Cross其实也属于双路并行的模型结构,只不过提出了一种新的模型叫做Cross Net来替代DeepFM中的FM部分。DNN本身虽然具备高阶交叉特征的学习能力,但其对于特征交叉的学习是隐式的、高度非线性的一种方式,因此作者提出了Cross Net,它可以显式地进行特征的高阶交叉,CrossNet相比于DNN的优势主要在于:

公式:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

  • 公式
  • 损失函数
  • 使用细节
  • 实现方法
  • 论文

xDeepFM

  • 原理

xDeepFM全称为eXtreme Deep Factorization Machine,可以看出其是在DeepFM基础上进行了改进。xDeepFM的贡献主要在于提出了压缩交互网络(Compressed Interaction Network),与DCN相同的是,都提出了要cross feature explicitly;但不同的是,DCN中的特征交叉是element- wise的,而CIN中的特征交叉是vector-wise的。

  • 公式

编辑切换为居中

添加图片注释,不超过 140 字(可选)

  • 损失函数
  • 使用细节
  • 实现方法
  • 论文

AutoINT

  • 原理

将self_attention机制引入到推荐场景中。

  • 公式

编辑切换为居中

添加图片注释,不超过 140 字(可选)

编辑切换为居中

添加图片注释,不超过 140 字(可选)

  • 损失函数
  • 使用细节
  • 实现方法
  • 论文

参考文献:

深入FFM原理与实践

万字长文梳理CTR预估模型发展过程与关系图谱

https://www.bookstack.cn/read/huaxiaozhuan-ai/README.md

阿里妈妈技术:WSDM 2022 | 点击率模型特征交叉方向的发展及CAN模型介绍

0 人点赞