【第六章:项目实战之推荐/广告系统】3.精排算法-(2)精排算法模型精讲: DNN、deepFM、ESMM、PLE、MMOE算法精讲与实现- DNN 精排模型

第六章:项目实战之推荐/广告系统

第三部分:精排算法

第二节:精排算法模型精讲: DNN、deepFM、ESMM、PLE、MMOE算法精讲与实现

1.DNN 精排模型


一、精排为什么需要 DNN?(问题出发)

在推荐系统中,精排模型的核心目标是:

对候选集合中的每一个 item 进行精准打分,预测用户点击/转化概率,例如 CTR 或 CVR。

召回阶段更多是 粗粒度语义匹配(user embedding vs item embedding),而精排面对的是:

对象 粒度 输入特征 行为预测
召回 用户/物品 embedding 语义相关
精排 用户全量特征 + 物品全量特征 + 上下文特征 CTR/CVR 精细化预测

因此,精排模型必须具备两种能力:

  1. 非线性表达特征交互能力

  2. 适应多模态/多场景业务特征能力

=> 简单线性模型(如 LR)只能做特征加权,无法拟合用户兴趣这种复杂分布

=> DNN(多层感知机 MLP)成为精排模型最基础的骨架


二、DNN 精排模型结构图(核心形态)

复制代码
[User Sparse Feature] → Embedding ┐
                                   ├→ concat → MLP → sigmoid → CTR 预测
[Item Sparse Feature] → Embedding ┘
[Dense Feature] ───────────────────┘

特征分为三类:

特征类别 举例 处理方式
Sparse(稀疏特征) user_id、item_id、tag_id Embedding 转低维向量
Dense(数值特征) age、watch_time、ctr_stat 归一化后直接输入
Cross / Context hour、device、geo 与 user/item 拼特征

最终输入网络:

优化目标(CTR 用 BCE):


三、DNN 精排模型 PyTorch 实现(可运行)

python 复制代码
import torch
import torch.nn as nn
import torch.nn.functional as F

class DNNRankModel(nn.Module):
    def __init__(self, user_vocab, item_vocab, emb_dim=32, hidden=[128, 64, 32]):
        super(DNNRankModel, self).__init__()
        self.user_emb = nn.Embedding(user_vocab, emb_dim)
        self.item_emb = nn.Embedding(item_vocab, emb_dim)

        input_dim = emb_dim * 2 + 10  # 假设 dense feature = 10 维
        layers = []
        for h in hidden:
            layers.append(nn.Linear(input_dim, h))
            layers.append(nn.ReLU())
            input_dim = h
        self.mlp = nn.Sequential(*layers)
        self.out = nn.Linear(hidden[-1], 1)

    def forward(self, user_id, item_id, dense_feature):
        u = self.user_emb(user_id)
        i = self.item_emb(item_id)
        x = torch.cat([u, i, dense_feature], dim=-1)
        x = self.mlp(x)
        x = torch.sigmoid(self.out(x))
        return x

四、TensorFlow 版本(结构完全对齐)

python 复制代码
import tensorflow as tf
from tensorflow.keras import layers, Model

class DNNRankModelTF(Model):
    def __init__(self, user_vocab, item_vocab, emb_dim=32, hidden=[128, 64, 32]):
        super().__init__()
        self.user_emb = layers.Embedding(user_vocab, emb_dim)
        self.item_emb = layers.Embedding(item_vocab, emb_dim)
        self.mlp = tf.keras.Sequential(
            [layers.Dense(h, activation='relu') for h in hidden]
        )
        self.out = layers.Dense(1, activation='sigmoid')

    def call(self, inputs):
        user_id, item_id, dense_feature = inputs
        u = self.user_emb(user_id)
        i = self.item_emb(item_id)
        x = tf.concat([u, i, dense_feature], axis=-1)
        x = self.mlp(x)
        return self.out(x)

五、适用性分析与优缺点

维度 评价
优点 结构简单、可拟合任意特征、训练稳定,是所有精排模型基础骨架
缺点 无显式特征交互能力(与 FM/DeepFM 对比)
应用场景 早期精排、线上 baseline、工业可控场景
相关推荐
IT古董6 小时前
【第六章:项目实战之推荐/广告系统】3.精排算法-(2)精排算法模型精讲: DNN、deepFM、ESMM、PLE、MMOE算法精讲与实现- PLE 模型
人工智能·神经网络·dnn
Serverless 社区6 小时前
吉利汽车携手阿里云函数计算,打造新一代 AI 座舱推理引擎
人工智能·阿里云·汽车
没有梦想的咸鱼185-1037-16637 小时前
AI大模型支持下的:ArcGIS数据处理、空间分析、可视化及多案例综合应用
人工智能·arcgis·chatgpt·数据分析
青春不败 177-3266-05207 小时前
AI+ArcGIS:数据处理、空间分析、可视化前沿技术应
人工智能·arcgis·gis·生态学·可视化·数据处理
新智元7 小时前
老黄亲自站台,英伟达编程神器!Cursor 2.0 自研模型狂飙 4 倍
人工智能·openai
新智元7 小时前
AI是「天才」还是「话术大师」?Anthropic颠覆性实验,终揭答案!
人工智能·openai
TG:@yunlaoda360 云老大7 小时前
2025云栖大会举行:阿里云旗舰模型Qwen3-Max、下一代架构Qwen3-Next重磅发布,加速构建“云智一体”AI超级计算机
人工智能·阿里云·架构
华为云开发者联盟7 小时前
【新特性】 版本速递 | 华为云Versatile智能体平台 新增特性介绍(2025年10月发布)
人工智能·华为云开发者联盟·ai agent·mcp·华为云versatile
Francek Chen7 小时前
【自然语言处理】预训练02:近似训练
人工智能·pytorch·深度学习·自然语言处理