搜广推校招面经八十一

OPPO搜广推一面面经

一、介绍一下PLE模型

在多任务学习(Multi-Task Learning, MTL)中,多个任务共享部分模型结构,以提升整体效果。然而,不同任务间存在 任务冲突(Task Conflict) 问题,即不同任务对参数的优化方向不一致,导致性能下降。

论文:Tang, Hongyan, et al. "Progressive Layered Extraction (PLE): A Novel Multi-Task Learning (MTL) Model for Personalized Recommendations." RecSys 2020.

PLE 的核心思想是:

通过引入多个专家网络(Experts)并区分共享专家与特定任务专家 ,结合门控机制(Gating Network)实现任务间知识共享与隔离的平衡

1.1. 核心架构

  • 专家网络(Experts)
    • Shared Experts:供所有任务共享
    • Task-Specific Experts:只供特定任务使用
  • 门控网络(Gating Network)
    • 每个任务都有自己的门控网络,决定该任务在当前层中应从哪些专家中获取信息
    • 输出为每个专家的加权系数
  • 塔结构(Tower)
    • 每个任务最终仍保留独立的塔(MLP),用于完成最终预测

1.2. CGC(Customized Gate Control)结构

  • 为了解决任务之间的"跷跷板"效应或负迁移效应,MMoE引入了任务独有的gate(expert是共享的,但gate是任务独有的,即不同任务通过gate共享相同的expert)
  • CGC在共享expert之外,新增了task specific expert,即每个任务单独的expert,这些expert是专门用于对应任务的优化的。CGC既能享受到共享特征带来的好处,也有专有的expert为不同任务提供独自的优化空间。每一个任务的Tower网络都获取相应任务独享的专家网络输出和共享的专家网络输出

1.3. PLE就是Extraction Network + 多层CGC的架构

CGC中门控网络的个数等于任务的个数,而Extraction Network中除了对应任务的门控网络外,还有一个共享的门控网络。高层Extraction Network的输入不是原始的输入,而是包含更抽象语义的底层Extraction Network的门控融合输出。
Extraction Network结构 + CGC结构 如下图:

二、模型一般用什么优化器来训练,Adam优化器的原理,用过哪些优化器,有过对参数的调整吗?

感觉用得最多的必然是Adam了,原理介绍见【搜广推校招面经十三

三、深度学习怎么防止过拟合,L1和L2正则化的区别

见【搜广推校招面经二十搜广推校招面经十四搜广推校招面经三十一

四、排序模型和分类模型输入是一样的吗,输出有什么差别

4.1. 输入:基本一致

排序模型(Ranking Model)和分类模型(Classification Model)在输入特征方面是类似的,通常都是一组结构化的特征向量,反正都是二维的表格。这些特征可以包括数值型、类别型、文本向量化表示等,经过处理(如归一化、Embedding)后送入模型。

4.2. 输出:存在本质差异

项目 分类模型(Classification) 排序模型(Ranking)
输出形式 各类别的概率或标签 候选项的排序分数或排名
任务目标 预测所属类别 判断多个样本之间的相对排序
应用示例 图片识别:猫 / 狗 / 鸟 推荐系统:为用户排序商品
损失函数常用 CrossEntropyLoss、FocalLoss Pairwise:Hinge loss、BPR Listwise:Softmax Cross Entropy、LambdaRank
预测方式 选最大概率的类别 根据得分排序候选项

4.3. pointwise、pairwise、listwise建模排序模型

见【搜广推校招面经二十九

排序任务可以根据建模的方式分为三类:Pointwise、Pairwise 和 Listwise,主要区别在于它们如何构造训练样本以及如何定义损失函数。

4.3.1. Pointwise 方法

  • 思想:将排序任务看作回归或分类问题,分别对每个样本预测一个相关性得分或标签。
  • 建模方式
    • 每个样本是一个独立的 query-document 对
    • 预测其与 query 的相关性得分或是否点击(0/1)
  • 常用模型/损失函数
    • 回归:MSE(Mean Squared Error)
    • 分类:CrossEntropyLoss、LogLoss
  • 缺点
    • 忽略了样本之间的相对关系,排序效果可能不佳

4.3.2. Pairwise 方法

  • 思想:将排序任务转化为二分类问题,学习成对样本的相对顺序(谁排在前面)。
  • 建模方式
    • 输入为两个文档对 (di, dj),同属于一个 query
    • 模型学习 di 是否比 dj 更相关
  • 常用模型/损失函数
    • RankNet:使用 s i g m o i d ( s c o r e i − s c o r e j ) sigmoid(score_i - score_j) sigmoid(scorei−scorej)
    • BPR(Bayesian Personalized Ranking)
    • Hinge loss(如 SVMRank)
  • 缺点
    • 样本数量为 O(n²),训练成本高

4.3.3. Listwise 方法

  • 思想:直接以整个候选列表为输入,优化整个排序列表的质量。
  • 建模方式
    • 训练样本为一个 query 对应的多个文档列表
    • 模型学习整个列表的最优排列顺序
  • 常用模型/损失函数
    • ListNet、ListMLE(优化列表似然)
    • LambdaRank、LambdaMART(基于 NDCG 等指标的优化)
  • 优点:更适合优化排序指标(如 NDCG、MAP)

4.3.4. 三种方法对比表

方法 输入粒度 损失目标 优点 缺点
Pointwise 单个样本 回归/分类损失 实现简单,易于训练 无法建模样本间排序关系
Pairwise 样本对 相对顺序损失 引入相对信息,排序效果好 样本量大,训练时间较长
Listwise 整个样本列表 列表级排序指标 排序效果最佳 实现复杂,训练成本高

五、NDCG(Normalized Discounted Cumulative Gain)计算方法

NDCG 是一种常用的排序评估指标,衡量推荐结果的相关性和排序位置。值越高,说明模型越好。其核心思想是:

  • 相关性越高的项排在越前面越好
  • 靠前位置的重要性更高(打折)

🔸Step 1: 计算 DCG(Discounted Cumulative Gain)

对于前 k 个推荐结果,DCG 的定义如下:
公式一(使用等级评分):
D C G @ k = ∑ i = 1 k r e l i log ⁡ 2 ( i + 1 ) DCG@k = \sum_{i=1}^{k} \frac{rel_i}{\log_2(i + 1)} DCG@k=i=1∑klog2(i+1)reli
公式二(使用指数评分,更重视高相关性):
D C G @ k = ∑ i = 1 k 2 r e l i − 1 log ⁡ 2 ( i + 1 ) DCG@k = \sum_{i=1}^{k} \frac{2^{rel_i} - 1}{\log_2(i + 1)} DCG@k=i=1∑klog2(i+1)2reli−1

其中:

  • rel_i:第 i 个位置的真实相关性评分(如:点击=1,未点击=0,或等级评分1~5)
  • i:排序位置,从 1 开始

🔸 Step 2: 计算 IDCG(Ideal DCG)

IDCG 是将相关性从高到低理想排序后得到的 DCG,即最优情况下的 DCG:
I D C G @ k = DCG@k of ideal (sorted) list IDCG@k = \text{DCG@k of ideal (sorted) list} IDCG@k=DCG@k of ideal (sorted) list

🔺 Step 3: 计算 NDCG(归一化 DCG)

N D C G @ k = D C G @ k I D C G @ k NDCG@k = \frac{DCG@k}{IDCG@k} NDCG@k=IDCG@kDCG@k

如果 IDCG@k = 0(全是 0 分相关性),通常设定 NDCG@k = 0。

示例

直接看公式可能不够清晰,搞个例子。假设模型返回的文档真实相关性为:

text 复制代码
predicted ranking:  [D1, D2, D3, D4, D5]
rel_scores:         [3, 2, 3, 0, 1]   ← rel_i

计算 DCG@5(使用公式二):

text 复制代码
DCG@5 = (2^3 - 1)/log2(1+1) + (2^2 - 1)/log2(2+1) + 
        (2^3 - 1)/log2(3+1) + (2^0 - 1)/log2(4+1) +
        (2^1 - 1)/log2(5+1)
      ≈ 7/1 + 3/1.5849 + 7/2 + 0/2.3219 + 1/2.5849
      ≈ 7 + 1.892 + 3.5 + 0 + 0.387
      ≈ 12.779

理想排序的相关性:[3, 3, 2, 1, 0],计算 IDCG@5(同样方法):

text 复制代码
IDCG@5 ≈ 7/1 + 7/1.5849 + 3/2 + 1/2.3219 + 0/2.5849
       ≈ 7 + 4.417 + 1.5 + 0.430 + 0
       ≈ 13.347

根据Step3

text 复制代码
NDCG@5 = 12.779 / 13.347 ≈ 0.957
相关推荐
✿ ༺ ོIT技术༻几秒前
笔试强训:Day2
开发语言·c++·笔记·算法
Jackson@ML1 小时前
如何快速高效学习Python?
开发语言·python
小oo呆2 小时前
【自然语言处理与大模型】模型压缩技术之量化
人工智能·自然语言处理
Magnum Lehar2 小时前
ApophisZerg游戏引擎项目目录展示
人工智能·vscode·编辑器·游戏引擎
飞桨PaddlePaddle2 小时前
Wan2.1和HunyuanVideo文生视频模型算法解析与功能体验丨前沿多模态模型开发与应用实战第六期
人工智能·算法·百度·音视频·paddlepaddle·飞桨·deepseek
西瓜本瓜@2 小时前
在Android中如何使用Protobuf上传协议
android·java·开发语言·git·学习·android-studio
绿算技术2 小时前
存储新势力:助力DeepSeek一体机
人工智能·科技·缓存·fpga开发
UFIT2 小时前
Python函数与模块笔记
开发语言·python
机智的人猿泰山2 小时前
java kafka
java·开发语言·kafka