前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2、推荐广告算法模型之特征交叉模型

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

原创
作者头像
用户2794661
发布2022-08-04 01:03:50
6090
发布2022-08-04 01:03:50
举报
文章被收录于专栏:程序人生小记程序人生小记

自动特征交叉模型包括: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模型介绍

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • FM系列(FM、FFM、AFM)
    • FM
      • FFM
        • AFM
        • Embedding+MLP(FNN、PNN、NFM、ONN)
          • FNN
            • PNN
              • NFM
                • ONN
                • Wide&Deep
                  • DeepFM
                    • DCN
                      • xDeepFM
                        • AutoINT
                        • 参考文献:
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档