1. 前言
为了缓解推荐系统内容同质化问题以及提高用户粘性, 多样性一直是推荐系统的核心指标之一。业界最经典&常用的方案是在推荐系统的重排阶段, 使用DPP或MMR这样启发式的方法来实现多样性和精准性的平衡。
只在重排阶段使用MMR这样贪心的启发式算法, 一方面是重排作为最接近用户体验的一个环节, 干预起来是最立杆见影的, 另一方面, 也是最主要的原因, 是因为这些方法的时间复杂度太高了, 比如从个候选Item中找出个Item, MMR算法的时间复杂度为, 如果在前置环节如粗排或精排也做类似处理的话, 时延是难以接受的。
但是, “巧妇难为无米之炊”, 如果前置的粗排或精排环节不做多样性干预导致多样性很差的话, 重排阶段的多样性也很难处理好。因此, 迫切需要一种能在前置链路平衡多样性和精准性的高效算法。
2. 方法
为了在前置环节实现多样性, 作者提出了上下文蒸馏模型CDM, 它以MMR算法结果为Teacher, 训练一个Student模型作为MMR的代理模型, 以实现在前置环节做多样性的干预。CDM的整体框架如下图所示:
2.1 回顾MMR多样性方法
经典的MMR多样性推荐思想是要从用户一次请求在当前阶段所对应的大小为的候选集中, 选取数量为的Item集合, 以最大化如下Reward:
其中, 表示准确性度量指标, 表示多样性度量指标, 是这两个指标做trade-off的系数。
上述优化问题其实是个NP难问题, 因此, 在实际实现时, 大家一般是使用贪心的启发式算法逐步近似求解:
其中, 表示当前第步骤, 而表示前一步骤, MMR算法的时间复杂度是, 这就限制了它很难应用于粗排或精排这样候选Item数量很多的前置环节。
2.2 兴趣感知的MMR
对于准确性, 这里是直接使用了模型的预估打分来衡量, 模型的参数记为
对于多样性, 与以往只考虑Item属性的方式不同, 作者还增加了用户侧的兴趣考虑, 将用户兴趣向量也考虑进来了, 进行了融合:
这里, 表示Hadamard积, 然后多样性就使用融合后的Item向量来计算:
其中, 为Sigmoid函数, 用于输出相似性得分。基于这种用户感知扩展后的MMR模型, 将会作为Teacher, 去蒸馏接下来要提到的Student模型。
2.3 对比上下文学习
2.3.1 Motivation
上面MMR是list-wise的启发式算法, 不妨记作, 而在前置环节如精排一般都是point-wise打分的方式。因此, 对于每个每个Target Item, 需要有效提取出list-wise感知的上下文信息, 同时作为point-wise模型的输入。
以精排为例, 粗排后的候选集可以看作是完整的上下文信息。在深入研究每个用户请求中Item的分布后, 作者发现, 对于任意随机选取的一个Target Item, 在候选集中总有与它相关的和与它对立的Item。也就是说, 对于每个Target Item, 可以从候选集中分别找出一些Item组成Positive上下文和Negative上下文, 如下图所示:
由于候选集的数量很多, 如果直接使用完整的候选集, 一方面效率会很低下, 另一方面可能会引入一些噪声。为了提高效率以及减少噪声干扰, 上下文的选取过程需要涉及采样(下文介绍)。
此外, 作者还发现这些相关Item的分布往往是密集聚类的,而对立Item的分布是比较松散的, 如下图所示:
因次, Positive上下文和Negative上下文需要分别进行采样。
这样,基于采样后的Positive和Negative上下文信息, 进而可以去预测它在MMR算法中胜出的概率, 实现模拟MMR算法。
2.3.2 Top-采样的实现
如果直接进行采样, 由于采样动作是离散的, 是不可微的,并没有梯度信息,会导致在BP反向传播时就不会对参数梯度进行更新。因此, 作者采用Gumbel-Softmax重参数方法实现不放回采样。
给定候选集和Target Item , 计算候选集内每个Item 与Target Item的注意力得分:, 如下:
其中, , 而, 这里的和为可学习参数。
这里, 定义作为的概率, 然后通过将 Gumbel 噪声添加到对数概率来获得扰动权重:
其中, 。关于Gumbel-Softmax重参数方法, 更详细的介绍可以看下苏剑林老师博客:https://kexue.fm/archives/6705。
下一步就是要基于前面扰动的权重得到一个one-hot变量, 并且满足 , 具体过程如下:
-
Step1: 初始化样本分布:
-
Step2: 迭代
首先, 计算在第次迭代过程中, one-hot变量第个位置为1的概率, 这里定义为:
其中为温度系数,当时,则是一个One-Hot松弛变量了。
如果, 再基于概率值进行更新:
-
Step3: 将每个松弛变量累加, 就可以得到:
这里, 在实际应用Gumbel Softmax时,一开始可以选择较大的(比如1),然后慢慢退火到一个接近于0的数(比如0.01),这样才能得到比较好的结果。
这样, 对于每个Target Item, 都会采样出个样本作为Positive上下文, 以及个样本作为Negative上下文。
这里, 作者没有说明正负上下文的采样概率具体是如何设置的, 笔者做一番猜测, 如有错误或其它看法欢迎评论区留言。对于正上下文, 会基于注意力得分, 计算每个候选Item的概率, 比如说, 可以设置概率, 然后进行top-采样。而对于负上下文, 也是类似的, 但会把概率设置成, 再进行top-采样。
2.3.3 对比上下文编码
在采样过程之后, 后续任务涉及对采样后的Positive上下文和Negative上下文进行序列建模, 这里使用使用对比注意方法。
首先, 对于Positive上下文的Embeddding是通过target attention得到
其中, 表示在采样阶段生成的正候选Item的扰动注意权重, 而表示候选Item的Embedding, 为可学习参数。
而对于Negative上下文的Embedding是通过target anti-attention得到:
其中, 使用了与Target Attention相同的参数。
正负上下文Embed的分离源于它们在与Target Item的不同关系,旨在精确建模Target Item的集合信息。这里的目标是确保正上下文的Embed 能准确地捕获与Target Item相关的语义本质,而负上下文的Embed 则与Target Item属性无关, 因此, 作者这里引入了InfoNCE损失去强化这样的差异:
这里的表示InfoNCE的温度系数, 为Target Item的Embed。
最后,作者引入了一种用户兴趣感知融合策略。目的是让学习到的上下文Embed具备识别其在更广泛的用户兴趣分布中的位置的能力。最终的上下文Embed可以计算如下:
2.4 上下文蒸馏模型
在这个过程中, 记从Teacher(MMR)中胜出的Item集合为, 并将候选Item是否在该集合中作为Student模型的Label, 即
而Student模型则使用Target Item的Embedding与对应的上下文Embedding的内积再取Sigmoid来预测, 即
再使用交叉熵计算得到模型蒸馏的Loss:
这样, 作者所提CDM模型总的Loss为:
其中, 和为超参。
在推理阶段,可以通过将准确度和多样性分数线性加权(参数记为)来获得最终的排序分, 如
3. 实验部分
3.1 整体效果
与baseline的对比
3.2 消融实验
验证不同作者所提不同模块的作用
3.3 超参分析
不同下, 准确率与多样性的平衡
3.4 线上AB测试
在快手App上进行的为期10天ab实验
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。