4. 精排

4.1 推荐算法的五个维度

  • 记忆与扩展

  • Embedding

  • 高维稀疏的类别特征

  • 交叉结构

  • 用户行为序列建模

4.2 交叉结构

FTRL:传统时代的记忆大师

  • 技术要求:online learning、特征稀疏

  • FTRL:为了减少单个样本的随机扰动,最优参数,是让之前所有步骤的损失之和最小

    • 引入代理损失函数:wt+1=argminw[g1:tw+12(s=1tσswws22)+λ1w1+12λ2w22]\mathbf{w}_{t+1}=\operatorname{argmin}_{\mathbf{w}}\left[\mathbf{g}_{1: t} \cdot \mathbf{w}+\frac{1}{2}\left(\sum_{s=1}^t \sigma_s\left\|\mathbf{w}-\mathbf{w}_s\right\|_2^2\right)+\lambda_1\|\mathbf{w}\|_1+\frac{1}{2} \lambda_2\|\mathbf{w}\|_2^2\right]

    • 每个特征独立设置步长:ηt,i=αβ+s=1tgs,i2\eta_{t, i}=\frac{\alpha}{\beta+\sqrt{\sum_{s=1}^t \mathbf{g}_{s, i}^2}}

FM:半脚迈入 DNN 的门槛

  • Embedding + 自动二阶交叉:logitFM=b+i=1nwixi+i=1nj=i+1n(vivj)xixjlogit_{FM}=b+\sum_{i=1}^n w_i x_i+\sum_{i=1}^n \sum_{j=i+1}^n\left(v_i \cdot v_j\right) x_i x_j

    • 参数 n2n^2nknk,数据利用率高、训练充分

    • 提升了模型的扩展性

Wide & Deep:兼顾记忆与扩展

  • Deep(DNN):Embedding + MLP,高阶隐式交叉(扩展性、多样性)

  • Wide(LR):强于记忆,防止 Deep 过分扩展影响精度,类似正则(查缺补漏)

  • 共同训练:CTRpredict=sigmoid(logitwide+logitdeep)CTR_{predict}=sigmoid(logit_{wide}+logit_{deep})

    • Wide - FTRL,Deep - Adagrad / Adam / ...

DeepFM:融合二阶交叉

  • 自动特征交叉,Wide 侧增加 FM

  • DeepFM:CTRpredict=sigmoid(logitlr+logitfm+logitdnn)CTR_{predict}=sigmoid(logit_{lr}+logit_{fm}+logit_{dnn})

    • Deep:logitdnn=DNN(Concat(Embedding(xdnn)))logit_{dnn}=DNN(Concat(Embedding(\mathbf{x}_{dnn})))

    • FM:logitfm=FM(x,Embedding(xdnn))logit_{fm}=FM(\mathbf{x},Embedding(\mathbf{x}_{dnn})),与 Deep 共享 / 独立

    • LR:logitlr=wlrxlrlogit_{lr}=\mathbf{w}_{lr}\cdot\mathbf{x}_{lr},强于记忆,防止过分扩展的正则化

DCN:不再迷信 DNN

  • DCN (Deep & Cross Network) :隐式交叉结构

    • DCN V1:对于 L 层,相当于所有元素 L+1\le L+1 阶的交叉

      • 每个 cross layer,xl+1=x0xlTwl+bl+xl\mathbf{x}_{l+1}=\mathbf{x}_0 \mathbf{x}_l^T \mathbf{w}_l+\mathbf{b}_l+\mathbf{x}_l

    • DCN V2:原始输入长度大,只做信息交叉(而不是压缩和提炼)

      • 参数容量有限,wlw_l 替换为 d×dd\times d 矩阵 WlW_lxl+1=x0(Wlxl+bl)+xl\mathbf{x}_{l+1}=\mathbf{x}_0 \odot\left(\mathbf{W}_l \mathbf{x}_l+\mathbf{b}_l\right)+\mathbf{x}_l

      • 原始输入 x0x_0 长度很大,还提出将大矩阵 WlW_l 分解成两个 d×ld\times l 的矩阵相乘

  • DCN 与 DNN 融合

    • 串联:DCN → DNN

    • 并联:DCN + DNN

AutoInt:借用 Transformer 特征交叉

  • Transformer:Attention(Q,K,V)=softmax(QKTdk)V\operatorname{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V})=\operatorname{softmax}\left(\frac{\mathbf{Q K}^T}{\sqrt{d_k}}\right) \mathbf{V},采用 multi-head 机制增强表达能力

    • 将一系列 Value 压缩成一个 Embedding,压缩方式根据 Query

    • 对 Value 序列加权求和,权重就是 Query 和 Key 的相关程度

  • AutoInt

    • 步骤

      • 准备各 field 的 embedding

      • 组成 [B,M,d] 的矩阵 X,套用 transformer

      • 多层 transformer 的结果仍然是 [B,M,d] 矩阵,拼接喂给浅层 DNN

    • 缺点

      • 为了使用 self-attention,要求 field embedding 长度相等

      • 对信息只交叉不压缩,每层输出都是 [B,M,d],时间开销不小

    • 实践:不独立预测,而只是作为一个模块,嵌入更大的模型(只选择部分重要特征)

4.3 用户行为序列建模

  • 行为序列信息的构成

    • 每个视频 id 的 embedding

    • 时间差信息:距离现在时间差,分桶为整数,方便模型刻画时间衰减

    • 视频元信息(作者、来源、分类、标签等),动作程度(观看时长、观看完成度)

  • 简单 pooling:sum / average / weighted-sum

DIN:千物千面

  • Deep Interest Network (DIN):UEu,t=j=1Hwjhj=j=1HA(hj,t)hjUE_{u, t}=\sum_{j=1}^H w_j h_j=\sum_{j=1}^HA\left(h_j, t\right) h_j

    • 候选物料 t 作为 query,对用户历史序列做 attention(相似度权重)

    • 召回、粗排场景,user / item 解耦,可以用行为序列最后的 item 作为 query

建模序列内的依赖关系

  • 双层 attention

    • self-attention:与前后历史行为交叉、关联

    • target-attention:套用 DIN,建模相关性,得到用户兴趣向量

建模长序列

  • 在线提取用户兴趣:Search-based Intereset Model (SIM)

    • DIN 软过滤 ~O(L),SIM 改用硬过滤,得到相关短序列 SBS

      • Hard Search:搜索相同属性的序列,数据库缓存(userId - category - SBS)

      • Soft Search:根据 item embedding 查找 ANN,组成 SBS

        • Embedding:用候选 item 和长期行为序列,构建小模型预测 CTR,得到 embedding

    • 缺点:实现复杂,耗时增加,工程难度大(维护缓存)

  • 离线预训练用户兴趣

    • 人工统计长期兴趣,e.g. 某个标签过去 1 周/月的 CTR

    • 离线预训练辅助模型,提取用户长期兴趣

      • 预训练模型:输入长期行为序列,输出 embedding 代表用户长期兴趣

      • 行为序列较长的用户,都过一遍模型,将 embedding 存入 KV 数据库

      • 天级更新即可,短期兴趣留给 DIN、双层 attention 等模型学习

    • 预训练模型:双塔结构,cos(A用户长期, A用户短期) 越小越好,cos(A用户长期, B用户短期)

    • 优点:不会增加线上耗时,实现简单

    • 缺点:长期兴趣,不会随着候选无聊而变化

Last updated