返回

CTR 预备知识:从逻辑回归到 FFM

人工智能

在深度学习大行其道的今天,许多人可能忽略了经典机器学习模型在 CTR 预估中的重要性。然而,像逻辑回归 (LR)、因子分解机 (FM) 和字段感知因子分解机 (FFM) 这样的模型仍然在该领域发挥着关键作用,甚至作为现代深度模型的组成部分。

逻辑回归:CTR 的基石

逻辑回归是 CTR 预估中最简单的模型之一。它将一组特征映射到一个概率值,表示用户点击广告的可能性。尽管简单,但 LR 仍然是许多在线广告平台的基准模型,因为它易于实现、计算高效且可解释。

因子分解机:捕捉隐式交互

FM 通过引入隐向量来扩展 LR,从而捕捉特征之间的隐式交互。隐向量是一个与每个特征相关的低维向量,允许模型学习特征之间的非线性关系。FM 已被证明比 LR 在 CTR 预估中具有更好的性能。

字段感知因子分解机:考虑特征字段

FFM 进一步扩展了 FM,它考虑了特征之间的字段关系。在 FFM 中,特征被分组到不同的字段(例如,用户 ID、广告 ID 和上下文特征),模型学习这些字段之间的交互。通过这种方式,FFM 能够捕获比 FM 更高级别的特征交互。

代码实现

自定义 Keras 层

我们可以使用 Keras 自定義層來實現這些模型。例如,以下是一個使用 Keras 定義 FFM 層的代碼示例:

import tensorflow as tf

class FFM(tf.keras.layers.Layer):

    def __init__(self, num_fields, field_dims, num_factors):
        super(FFM, self).__init__()
        self.num_fields = num_fields
        self.field_dims = field_dims
        self.num_factors = num_factors
        self.embeddings = []
        for i in range(num_fields):
            self.embeddings.append(tf.keras.layers.Embedding(field_dims[i], num_factors))

    def call(self, inputs):
        field_vecs = []
        for i, embedding in enumerate(self.embeddings):
            field_vecs.append(embedding(inputs[:, i]))
        field_vecs = tf.stack(field_vecs, axis=1)  # (batch_size, num_fields, num_factors)
        out = tf.reduce_sum(tf.einsum('bij,bik->bij', field_vecs, field_vecs), axis=1)
        out = out + tf.reduce_sum(inputs[:, self.num_fields:], axis=1)  # 拼接其他非类别型特征
        return out

Estimator

Estimator 是 TensorFlow 提供的高级 API,它簡化了模型的訓練和評估。我们可以使用 Estimator 来实现 LR、FM 和 FFM 模型。例如,以下是一个使用 Estimator 定义 LR 模型的代码示例:

import tensorflow as tf

# 定义特征列
feature_columns = [tf.feature_column.numeric_column('age')]

# 定义 LR 模型
model = tf.estimator.LinearRegressor(feature_columns=feature_columns)

结语

LR、FM 和 FFM 模型在 CTR 预估中扮演着重要角色,即使在深度学习时代也是如此。通过了解这些模型的基本原理和实现,我们可以更好地理解 CTR 预估的复杂性并构建更有效的模型。