当前位置: 首页 > news >正文

抖音Next-User Retrieva:生成式冷启动召回

背景

物品冷启动是推荐系统非常重要的问题,Lookalike方法是解决物品冷启动的一个思路, 因为它不依赖于ID特征和历史交互数据, 仅依赖于新内容的种子用户去找到相似用户来提升内容推荐效果。但现Lookalike方法还存在两个问题:

  • 无法有效的建模用户关系: 传统Lookalike方法(基于规则或基于模型), 通常是直接比较种子用户和所有可能用户以找到相似用户, 但这种方法无法准确建模用户间的复杂行为模式或兴趣偏好, 导致推荐效果不佳。
  • 难以利用交互信号和多样化特征: 传统Lookalike方法对交互信号和多样化特征(如用户行为序列)利用能力非常有限, 这使得它难以融入现代推荐系统中,限制了其在不同场景下的适用性。

为了解决这一问题,抖音这里提出了一种基于生成式下一用户建模的新方法Next-User Retrieval

 

方法

image

模型整体结构如上图所示,整体采用了transform的encoder-decoder架构,建模目标为根据和和物品有交互的用户序列预估一下可能和物品发生交互的用户:

\(\underset{P}{\mathrm{argmax}} \left\{ P(u, f_{u}) | \mathrm{model}\left\{(u_{1}),...,(u_{j}),...,(u_{n})\right\},(i, f_{i})\right\}\)。(1)

其中 \(P(·) \in \mathbb{R}^{|U|}\) 是所有用户上的概率分布。\(u_{j}\) 按时间顺序表示第 \(j\) 个用户(用户ID)的ID嵌入。\(f_{i}\) 和 \(f_{u}\) 分别表示给定物品 \(i\) 和真实下一个用户 \(u\) 的特征

 

模型输入

Next-User Retrieval具体的输入包括以下几个部分:

  • 正向交互的Uid序列: 正向交互指点赞或评论, 这是创作者能够直接看到且最关心的指标, 截取最近50个
  • 前缀提示Embedding: 将物品的特征(如物品ID、类别等)编码成嵌入向量, 放在Uid序列之前, 兼顾无历史交互或历史交互比较少的情况
  • 可学习的[CLS] token: 论文给的解释是由于我们仅存储已交互的顺序用户ID嵌入,而实际请求用户具有完整的上下文特征。为了将特征领域的先验知识编码到Transformer模型中,一个可学习的[CLS]标记被附加到顺序嵌入的末尾,动态引导模型为顺序用户ID嵌入或下一个用户嵌入确定合适的生成模式以进行检索(个人理解相当于一个占位符,这个位置最终的输出就是pred next user embedding)
  • Positional Encoding

 

模型结构

encoder

$o_1^p, \ldots, o_k^p, o_1^u, \ldots, o_n^u, o_1^{[CLS]} = \text{Encoder}(p_1, \ldots, p_k, u_1, \ldots, u_n, [CLS]))$, 其中, $p_i \in \mathbb{R}^d$为前缀提示Embedding, $u_i \in \mathbb{R}^d$为Uid Embedding

 

decoder

$\hat{u}_1, \hat{u}_2, \ldots, \hat{u}_{n+1}, \hat{u}_{\text{next}} = \text{Decoder}\Big(q, \big(o_1^p, \cdots, o_k^p, o_1^u, \ldots, o_n^u, o_1^{[\text{CLS}]} \big)\Big),$ decoder这里有个细节, 它会额外增加个learnable query embedding $q \in \mathbb{R}^{(n+2) \times d}$,主要目的是为了解码过程更加聚焦,从而更准确地生成下一个用户嵌入,至于$n + 2$是因为decoder的输出是$n + 2$。

 

Causal Attention

如上图所示,Next-User Retrieval在encoder和encoder部分都使用了Causal Attention(输入序列里第一个uid只能看到前缀提示信息,第n个uid能看到前n-1个uid和前缀提示信息),这是为了模拟用户行为的时序性。在短视频场景, 用户行为具有一定的单向顺序性, 例如,用户可能看到视频的一些有趣的评论后, 也点赞和评论了, 这种行为的顺序性可以通过因果注意力机制来模拟

image

 

损失函数

$\mathcal{L}_{\text{generative}} = \lambda_1 \mathcal{L}_{\text{contrastive}} + \lambda_2 \mathcal{L}_{\text{CE}} + \lambda_3 \mathcal{L}_{\text{auxiliary}}$

 

Contrastive Loss

$\mathcal{L}_{\text{contrastive}} = -\sum_{i: R_u u_i \hat{u}_i = 1} \log \frac{\exp \big(f(u_i, \hat{u}_i)/\tau\big)}{\exp \big(f(u_i, \hat{u}_i)/\tau\big) + \sum_{j \neq i} \exp \big(f(u_j, \hat{u}_i)/\tau\big)}$

其中,$R_{u_i\hat{u}_i} = 1$ 表示在第 $i$ 个样本中用户与给定物品发生了交互。$u_i$ 和 $\hat{u}_i$ 分别表示请求user embedding生成的next user embedding 。$u_j$ 表示来自第 $j$ 个样本的请求用户嵌入。$f(\cdot)$ 代表相似度函数(使用点积,与 HNSW 中的相同 ),$\tau$ 是温度参数。对比损失旨在将离散的下一用户预测转化为基于相似度的物品表示学习,使下一用户检索能够基于 HNSW 无缝集成到抖音的检索流程中

 

Cross-Entropy Loss 

前面对比学习损失只用到了对内容有产生正向行为的数据, 对于那些有曝光但并没有产生正向反馈的样本, 对比学习并没有利用到。为此, 额外引入交叉熵损失:

$\mathcal{L}_{\text{CE}} = -\left( \sum_{i: R_{u_i \hat{u}_i} = 1} \log \sigma\big(f(u_i, \hat{u}_i)\big) + \sum_{i: R_{u_i \hat{u}_i} = 0} \log\big(1 - \sigma\big(f(u_i, \hat{u}_i)\big)\big) \right)$

其中,$\sigma(\cdot)$ 是 sigmoid 函数,$R_{u_i\hat{u}_i} = 0$ 表示有曝光但无交互的样本

 

Auxiliary Loss 

$\mathcal{L}_{\text{auxiliary}}$ 作为一种数据增强方法,用于监督下一 UID(用户标识 )的生成,并强化 UID 表示学习。辅助损失定义如下: $$\mathcal{L}_{\text{auxiliary}} = \left( \sum_{i: R_{u_i \hat{u}_i} = 1} \left( \sum_{j=1}^{n+1} \| \text{sg}(u_j) - \hat{u}_j \|^2 \right) \right) \tag{7}$$ 其中,$u_j$ 分别表示第 $j$ 个真实序列 UID 嵌入,$\hat{u}_j$ 表示生成的 UID 嵌入 。$\text{sg}(\cdot)$ 表示停止向 $u_j$ 传播梯度,以避免模型崩溃 。

 

 

http://www.sczhlp.com/news/1011/

相关文章:

  • 求两个自然数a和b的最大公约数(递归算法)
  • nginx压缩字体ttf的有关配置
  • 如何选择工业电脑?
  • 教你创业SUS
  • 使用 nacos-sdk-csharp 服务订阅机制动态更新Yarp配置的简易Demo
  • Three.js 的第一个工程-创建一个场景
  • nginx配置文件生产环境优化
  • 贪心随笔
  • ubuntu系统ufw开放端口教程
  • 基础算法随笔
  • 技术跃迁!DVP AirCAMERA _1020摄像头小板赋能开发者构建顶级视觉系统
  • 小工具
  • Ubuntu20.04 安装gcc11 g++11, Ubuntu18.04
  • Forward prop in tensorflow
  • aws 上传自定义证书
  • 空间智能赋能城市低空数字底座及智能网联系统建设
  • 扫描线求矩形周长并的注意事项
  • 微店商品详情接口micro.item_get请求参数响应参数解析
  • 游戏服务器优雅关服设计与实现
  • 思通数科 AI 安监系统:工业园安全监管的 “智能防线”
  • snort入侵检测基础
  • Linux防火墙
  • SAP 后继物料简介
  • SQL注入漏洞
  • 使用mysqlshell查询数据库返回json格式数据
  • Centos中将UTC的时区改为CTS时区
  • MyEMS 开源能源管理系统核心代码解读 023
  • 详解 OpenAI 函数调用(Function Calling):让模型具备数据获取与行动能力
  • 【宝藏贴】HarmonyOS官方模板优秀案例 第1期:便捷生活-购物中心
  • 新一代对象存储 RustFS Python SDK 的使用