1. 为什么CTR预估需要新范式?
在推荐系统和广告投放领域,点击率(CTR)预估就像是一个"读心术"游戏。我们需要预测用户在看到某个内容时,有多大可能性会点击它。这个看似简单的任务背后,藏着两个关键挑战:
特征重要性差异就像是在做菜时,盐和胡椒的作用完全不同。在CTR预估中,不同特征的重要性差异可能达到几个数量级。比如在电商场景中,"用户最近浏览记录"这个特征的重要性,可能比"用户注册年份"高出上百倍。传统模型往往平等对待所有特征,这就像把盐和胡椒等量放入菜肴,结果可想而知。
特征交叉的复杂性则像是调酒师调配鸡尾酒。简单的内积或Hadamard积特征交叉(类似把两种酒直接混合),难以捕捉到"用户性别×商品类别"这种特定组合产生的化学反应。实际业务中,有效的特征组合往往具有强烈的场(Field)特异性,需要更精细的交互方式。
我曾在实际项目中遇到过这样的案例:当使用传统FM模型时,某个重要特征的权重被大量噪声特征稀释,导致整体效果不佳。后来引入动态加权机制后,模型AUC提升了1.2%,这在千万级用户的场景下意味着数百万的收入增长。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. SENET:让模型学会"抓重点"的动态加权术
2.1 SENET的三步魔法
SENET模块的运作就像是一位经验丰富的编辑审阅稿件,整个过程分为三个精妙的步骤:
挤压(Squeeze)阶段相当于编辑快速浏览全文。模型通过全局平均池化(GAP)将每个特征域的嵌入向量压缩为一个标量统计量。比如对于一个128维的商品类别嵌入向量,这一步会计算所有维度的平均值,得到一个代表该特征整体重要性的数字。
公式表示为:z_i = (1/k)∑{j=1}^k e 其中k是嵌入维度,e_{i,j}是第i个特征的第j维嵌入值。
激发(Excitation)阶段则是编辑评估各部分价值的过程。这里使用了两层全连接网络构成的瓶颈结构:
python复制# PyTorch实现示例
self.excitation = nn.Sequential(
nn.Linear(num_fields, num_fields // reduction_ratio),
nn.ReLU(),
nn.Linear(num_fields // reduction_ratio,
