CTR 预备知识:从逻辑回归到 FFM
2024-01-12 21:29:00
在深度学习大行其道的今天,许多人可能忽略了经典机器学习模型在 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 预估的复杂性并构建更有效的模型。