广告推荐模型3:域感知因子分解机(Field-aware Factorization Machine, FFM)
一、FFM模型的核心思想:引入“域”的概念,实现更精细的特征交叉
FFM的核心洞察是:在FM中,一个特征在与任何其他特征交叉时都使用同一个隐向量,这是不合理的。一个特征在与不同“类别”的特征交叉时,应该有不同的表现。
FFM通过引入 “域(Field)” 的概念来解决这个问题。
什么是“域”(Field)? 一个“域”是指包含多个特征的一个类别或分组。
例如,所有描述“用户”的特征(如性别、年龄)属于
User Field
。所有描述“广告”的特征(如类别、广告主)属于
Ad Field
。所有描述“上下文”的特征(如时间、设备)属于
Context Field
。
在FFM中,每个特征不再只有一个隐向量,而是针对每一个其他“域”,都有一个专门的隐向量。这就是“域感知”(Field-aware)的含义。
二、一个详细的例子:预测用户点击游戏广告的概率
我们继续使用之前的场景,但这次用FFM模型。用户是23岁的男性Alice,广告是《王者荣耀》游戏。
第一步:定义特征与域(Feature & Field Design)
这是FFM模型成功的关键。我们需要先为所有特征划分“域”。
特征名称 | 原始特征值 | 特征符号 | 所属域 (Field) |
---|---|---|---|
用户性别 | 男 | x₁ | User Field (F_u) |
用户年龄 | 23 | x₂ | User Field (F_u) |
历史游戏点击 | 3 | x₃ | User Behavior Field (F_ub) |
广告类别 | 游戏 | x₄ | Ad Field (F_a) |
时间段 | 晚上 | x₅ | Context Field (F_c) |
操作系统 | iOS | x₆ | Context Field (F_c) |
第二步:FFM的隐向量——数量爆炸的艺术
在FM中,每个特征只有一个隐向量(例如,v₄
代表“广告类别=游戏”)。
在FFM中,每个特征会有 (总域数 - 1)
个隐向量,因为它需要针对每一个其他域,都有一个专属的向量。
假设我们的隐向量维度 k=2
。那么特征 x₄
(广告类别=游戏)将拥有多个隐向量:
v₄, User
:当与User Field
的特征(如x₁性别
,x₂年龄
)交叉时,使用这个向量。v₄, Behavior
:当与User Behavior Field
的特征(如x₃历史点击
)交叉时,使用这个向量。v₄, Context
:当与Context Field
的特征(如x₅时间
,x₆系统
)交叉时,使用这个向量。
注意:它不需要为自己所在的域准备向量,因为同域内的特征一般不进行交叉。
第三步:FFM如何计算特征交叉权重?
FFM模型的方程如下:
与FM的公式对比,你会发现唯一的变化在二阶项的内积部分:
这个公式非常关键:当计算特征 i
和特征 j
的交叉权重时:
特征
i
使用其针对特征j
所属域(Field(j)) 的隐向量。
特征
j
使用其针对特征i
所属域(Field(i)) 的隐向量。
计算这两个向量的点积。
让我们看一个具体的交叉计算:计算特征 x₄
(广告类别=游戏,属于 F_a
) 和 x₁
(用户性别=男,属于 F_u
) 的组合效应。
对于特征
x₄
(广告游戏),它要交互的对象x₁
属于User Field (F_u)
。因此,它使用针对User Field
的隐向量
。假设
。= [0.5, 0.7]
对于特征
x₁
(用户男性),它要交互的对象x₄
属于Ad Field (F_a)
。因此,它使用针对Ad Field
的隐向量
。假设
。= [0.3, 0.9]
它们的交叉权重为:
。= (0.5*0.3) + (0.7*0.9) = 0.15 + 0.63 = 0.78
再对比一下FM的计算:
在FM中,无论跟谁交叉,x₄
只用 v₄ = [0.5, 0.7]
,x₁
只用 v₁ = [0.2, 0.6]
,得到的权重是 <v₄, v₁> = 0.52
。
FFM的计算结果(0.78)和FM(0.52)完全不同! FFM的模型容量更大,能学习到更精细的组合模式。它认为“游戏广告”在面对“用户属性”时,其贡献度应该比一个全局的向量所表达的要更高。
第四步:再看一个例子——理解“域感知”的优势
现在计算另一个组合:x₄
(广告游戏,F_a
) 和 x₅
(时间晚上,F_c
)。
特征
x₄
看到交互对象x₅
属于Context Field (F_c)
,于是使用。假设
= [0.1, 0.2]
。特征
x₅
看到交互对象x₄
属于Ad Field (F_a)
,于是使用。假设
= [0.4, -0.1]
。交叉权重:
= (0.1*0.4) + (0.2*(-0.1)) = 0.04 - 0.02 = 0.02
。
这个权重非常小,说明模型从数据中学到:“广告类别”和“时间段”这个组合关系,远不如“广告类别”和“用户属性”的关系重要。
这正是FFM的强大之处:它能为不同类型的特征组合,学习到截然不同的交互强度,表征能力远超FM。
三、FFM在广告系统中的优缺点总结
优点:
建模能力更强:通过引入“域”的概念,模型对特征交叉的学习变得无比精细,效果通常显著优于FM。
可解释性(宏观):虽然参数变多,但我们仍然可以通过分析不同域间交互的总体强度,来理解哪些域的组合对业务目标更重要。
缺点:
参数量爆炸:这是FFM最致命的缺点。参数总量从FM的
n*k
个暴增到n * f * k
个(f
是域的个数)。对于特征量大、域多的场景,模型体积会变得非常庞大。训练速度慢:由于参数增多和计算变得复杂,FFM的训练时间通常比FM长一个数量级。
对特征Field设计敏感:模型效果很大程度上依赖于如何划分“域”。不合理的域划分可能导致效果下降或过拟合。
不适合深度学习化:其复杂的参数结构难以像FM那样轻松地嵌入到深度神经网络中作为一层使用(这也是DeepFM选择使用FM而不是FFM作为 Wide 部分的原因)。
FM与FFM的对比:
特性 | FM (因子分解机) | FFM (场感知因子分解机) |
---|---|---|
核心思想 | 每个特征一个隐向量,用于所有交互。 | 每个特征为每个其他Field准备一个隐向量,交互时按Field取用。 |
参数量 |
|
|
计算复杂度 |
|
|
表达能力 | 强 | 更强,能学习更精细的特征交互模式 |
数据要求 | 对一般稀疏数据有效 | 需要大量数据,否则容易过拟合 |
适用场景 | 通用推荐、CTR预估 | 特征Field区分度高的场景(如广告推荐,其特征天然可划分为用户、广告、上下文等Field) |
正则化 | 需要 | 极度需要,否则性能会下降 |
FFM通过引入Field-aware的概念,增强了模型的表达能力,在特征场划分清晰的问题上(如广告推荐)效果通常显著优于FM。但其代价是巨大的参数量和计算开销,需要精心调整正则化和使用早停(Early Stopping)等技巧来防止过拟合。它是CTR预估领域一个非常经典且重要的模型。