Deep Retrieval 简介
Deep Retrieval 是一种推荐系统框架,它将物品表示为路径(path),并在线上查找与用户最匹配的路径。
这种方法与传统的双塔模型不同,后者通常将用户和物品表示为向量,并在线上进行最近邻查找。Deep Retrieval 与阿里的 TDM(Tree-based Deep Model)有相似之处。
基本概念
-
候选项目:在DR模型中,候选项目指推荐系统中可供推荐的所有项目,例如商品、视频或文章等。
-
离散潜在空间:DR将所有候选项目编码进一个离散的维度空间。离散潜在空间的结构是由多个层组成的,每一层包含多个节点。
-
节点:节点是DR模型中离散潜在空间中的基本单元,它们构成了模型的多层结构。每个节点可以看作是一个位置标识,而不是直接代表一个项目。
-
路径:路径是由多个节点组成的序列,它穿过模型的多层结构,每一层选择一个节点,从而形成一个从第一层到最后一层的完整序列。每条路径可以看作是一组项目的聚类,这些项目在路径上被赋予相似的特征或属性。
- DR模型由D层组成,每一层都有K个节点。因此,每条路径可以表示为一个D维的向量,其中每个维度的值范围从1到K
- 例如,如果D=3且K=10,那么一条可能的路径可以是[2, 4, 1],其中2是第一层的节点索引,4是第二层的节点索引,1是第三层的节点索引。
-
项目到路径的映射:每个候选项目不是直接映射到一个节点,而是映射到一条或多条路径上。这意味着一个项目可以通过多条路径来表示,每条路径捕捉项目的不同方面或特征。
两个索引
- Item to Paths:每个物品对应多条路径,例如每条路径由三个节点表示, path = [a, b, c]。
- Path to Items:每条路径对应多个物品,这样可以快速检索与特定路径相关的所有物品。
Item to Paths(物品到路径)
训练神经网络时用到这个索引
-
多对多映射:在DR模型中,每个项目(Item)可以被映射到多个路径(Paths)。路径可以有重合的节点。
-
这种设计允许模型捕捉项目的多方面属性,因为一个项目可能与多个不同的类别或特征相关联。
-
概率分布:DR的预估模型学习一个概率分布,用于给定用户输入时预测项目所属的路径。这个概率分布是模型参数的一部分,与其他神经网络参数一起被学习,以最大化用户-项目交互数据的目标函数。
Path to Items(路径到物品)
召回时用到这个索引
-
检索过程:在检索阶段,DR模型使用束搜索(beam search)算法来找到最可能包含用户感兴趣项目的路径。一旦找到这些路径,模型就可以检索与这些路径相关联的项目。
-
物品的检索和重排:虽然DR模型可以有效地检索与特定路径相关的项目,但同一个路径可能包含多个物品。因此,需要一个额外的重排模型(如softmax模型)来对这些项目进行排序,以确定最终推荐给用户的项目。
预估模型
预估模型是基于用户特征和项目路径通过逐层预估用户对每个节点的兴趣,并将这些概率相乘来预估用户对整个路径的兴趣。
- 预估模型的核心任务是学习一个概率分布,这个分布能够根据给定的用户输入(特征)预测用户对不同路径的兴趣。
- 概率分布定义了从用户特征到路径的映射,是模型参数的一部分,与其他神经网络参数一同被优化。
步骤
- 给定用户特征 X,预估用户对节点 a 的兴趣 p ( a ∣ X ) p(a|X) p(a∣X)。通过MLP和softmax层来实现的,MLP基于用户特征输出一个概率分布,softmax层根据分布输出选择节点 a 的概率。
- 在选择了节点 a 之后,预估用户对下一个节点 b 的兴趣 p ( b ∣ a , X ) p(b|a,X) p(b∣a,X)。MLP接收用户特征 X 和节点 a 的嵌入作为输入,softmax输出选择节点 b 的概率。
- 在选择了节点 a 和 b 之后,预估用户对最终节点 c 的兴趣 p ( c ∣ a , b , X ) p(c|a,b,X) p(c∣a,b,X)。MLP输入用户特征 X 和之前选择的节点 a 和 b 的嵌入,softmax输出选择节点 c 的概率。
4.将上述每个节点的概率相乘得到预估的用户对整个路径 [a, b, c] 的兴趣:
p ( [ a , b , c ] ∣ X ) = p ( a ∣ X ) × p ( b ∣ a , X ) × p ( c ∣ a , b , X ) p([a, b, c]|X) = p(a|X) × p(b|a, X) × p(c|a, b, X) p([a,b,c]∣X)=p(a∣X)×p(b∣a,X)×p(c∣a,b,X)
Beam Search算法
Beam Search算法是一种启发式的图搜索算法,常用于解决优化问题,主要是寻找最优序列或者路径的问题
基本思想
在每个搜索步骤中,不是扩展所有可能的候选解,而是只扩展最有前景的有限数量的候选解
步骤
- 从初始状态开始,通常设置一个包含所有可能的后续状态的候选集,但只保留分数最高的前 k 个状态进入下一轮,其中 k 是超参数beam宽度(beam size)。
- 在每一步中,算法根据当前beam中的每个状态生成所有可能的下一个状态。对于每个状态,计算其评分或概率
- 根据beam宽度 k,从所有候选状态中选择评分最高的 k 个状态,这些状态构成了下一轮的beam。
- 重复扩展和修剪步骤,直到满足终止条件。
- 输出beam中评分最高的路径作为最终结果。
例如:如果一层有K个节点,设beam size为 k,则第一层取四个,然后每层计算kK个评分(k个上一层取的K个这一层的),然后从所有候选状态中选择评分最高的 k 个状态,这些状态构成了下一轮的beam。
离线训练
先进行离线训练,再进行线上召回
同时学习神经网络参数和物品表征
deep Retrieval训练时只用正样本 (user,item): click(user, item) = 1
学习神经网络参数
神经网络参数决定了模型如何根据用户特征 X 预估对不同路径的兴趣,主要学习多层感知机(MLP)的权重和偏置等。
这个神经网络的作用是判断用户对路径是否感兴趣。如果用户点击过物品,且物品对应路径path,则更新神经网络参数使p(pathlx)变大
学习物品表征
步骤
用贪心算法更新路径
- 假设已经把物品表征为 J 条路径 П = p a t h 1 , … , p a t h J П={path1,…,path_J} П=path1,…,pathJ
- 每次固定 { p a t h i } \{path_i\} {pathi}_{i \neq l},并从未被选中的路径中,选出一条作为新的 p a t h l path_l pathl
p a t h l ← a r g m i n p a t h l l o s s ( i t e m , П ) + α ⋅ r e g ( p a t h l ) path_l← argmin_{path_l}loss(item, П)+ \alpha · reg(path_l) pathl←argminpathlloss(item,П)+α⋅reg(pathl) - 选中的路径有较高的分数 s c o r e ( i t e m , p a t h l ) score(item,path_l) score(item,pathl),而且路径上的物品数量不会太多。
线上召回
召回:用户 − > 路径 − > 物品 召回:用户->路径->物品 召回:用户−>路径−>物品
- 线上召回先使用用户特征和神经网络来预估用户对路径的兴趣,然后使用Beam Search来找到最感兴趣的一批路径
- 之后通过
path to item
索引召回这些路径上的物品 - 对召回的物品进行初步排序,最终返回分数最高的物品作为推荐。
步骤
输入:用户特征 X
- 使用神经网络(如MLP)来预估用户对特定路径 path=[a,b,c] 的兴趣,详见上面预估模型那一节。
- 神经网络输出一个分数 p(path|X),表示用户对路径的整体兴趣程度。这个分数是基于用户特征 X 和路径 [a,b,c] 计算得出的。
- 使用Beam Search算法来寻找分数 p(path|X) 最高的 s 条路径。
- Beam Search返回 s 条分数最高的路径,这些路径被认为是用户最可能感兴趣的。
- 对于每条选中的路径,模型利用
path to item
索引来召回该路径上的 n 个物品。这个索引将路径映射到它们包含的物品列表。- 若有 s 条路径,每条路径召回 n 个物品,则总共召回 s×n 个物品。
- 对召回的 s×n 个物品进行初步排序,然后从排序后的物品列表中返回分数最高的若干物品作为推荐结果
输出:推荐物品的列表
完整流程
离线训练流程
离线训练要解决两个问题:
- 怎么让物品更好的表征成路径,用用户优化物品-路径的关系
- 怎么让用户对物品的兴趣转化成用户对路径的兴趣,用物品优化用户-路径的关系
方法:以用户为中介,把路径和物品关联起来。
- 数据准备
- 收集用户与物品之间的正样本交互数据,即用户对物品的点击行为,表示为 click(user, item) = 1。
- 模型初始化
- 初始化神经网络参数,主要包括多层感知机(MLP)的权重和偏置。
- 初始化物品到路径的表征,即每个物品被表示为 J 条路径 П = {path1, …, path_J}。
- 学习神经网络参数
- 神经网络作用:预估给定用户特征 X 时,用户对不同路径的兴趣。
- 参数更新:如果用户点击过某个物品,且该物品表征为路径 path,则更新神经网络参数,使得兴趣分数 p(path|X) 增大。
- 学习物品表征
- 物品和路径之间的相关性 = 用户对路径的兴趣 * 用户是否点击
- 贪心算法更新路径:
- 先计算物品和路径之间的相关性,让每个物品被表示为 J 条路径 П = {path1, …, path_J}
- 每次固定除 p a t h l path_l pathl 之外的所有路径 p a t h i path_i pathi,并从未被选中的路径中选出一条作为新的 $path_l¥。
- 选择 path_l 的标准是最小化损失函数 loss(item, П) 加上正则化项 reg(path_l):
p a t h l ← arg min p a t h l l o s s ( i t e m , П ) + α ⋅ r e g ( p a t h l ) path_l \leftarrow \arg\min_{path_l} loss(item, П) + \alpha \cdot reg(path_l) pathl←argpathlminloss(item,П)+α⋅reg(pathl) - 选择的路径应具有较高的分数 s c o r e ( i t e m , p a t h l ) score(item, path_l) score(item,pathl),并且路径上的物品数量不会太多。
注意: 3,4两步交替进行
线上召回流程
- 路径兴趣预估
- 输入用户特征 X,使用训练好的神经网络(如MLP)预估用户对特定路径 path=[a,b,c] 的兴趣。
- 神经网络输出一个分数 p(path|X),表示用户对路径的整体兴趣程度。
- 使用Beam Search寻找感兴趣路径
- 使用Beam Search算法找到分数 p(path|X) 最高的 s 条路径。
- Beam Search返回 s 条分数最高的路径,这些路径被认为是用户最可能感兴趣的。
- 召回路径上的物品
- 对于每条选中的路径,利用 path to item 索引召回该路径上的 n 个物品。
- 若有 s 条路径,每条路径召回 n 个物品,则总共召回 s×n 个物品。
- 初步排序和返回推荐结果
- 对召回的 s×n 个物品进行初步排序。
- 从排序后的物品列表中返回分数最高的若干物品作为推荐结果。