like(user, item)。例如:点击、点赞、收藏、转发各算一分Jaccard相似度,没有考虑不同行为的偏好程度
item1和item2的用户交集.
j为用户历史交互商品集合
用索引,离线计算量大,线上计算量小
1. 事先做离线计算,建立两个索引
user ——> item的索引:记录每个用户最近点击、交互过的物品ID
id,可以找到他近期感兴趣的物品列表user_id: [(item_id, score兴趣分)item ——> item的索引: 给定任意item_id,可以快速找到它最相似的k个items
k个物品item_id:topK个最相似的[items_id, 相似度]2. 线上做召回,用于实时推荐
query用户id,通过user--> item索引,找到用户近期感兴趣的物品列表last-n。last-n列表中每个item,通过item--> item的索引,找到top-k相似物品nk个),用公式预估用户对物品的相似分数itemCF通道的返回结果。重复的把分数加起来,去重
nl: 用户喜欢物品l的用户数量,反应物品的热门程度, I 为用户u1和u2喜欢物品集合的交集user对候选物品item的兴趣:
1. 事先做离线计算
user--> item 的索引:
IDID,可以找到他近期感兴趣的物品listuser_id:[(item_id, 兴趣分数),......]user-->user的索引:
k个用户id,可以快速找到他最相似的k个用户user_id: 最相似的k个【(user_id, 相似度),…】2. 线上做召回
ID,通过user_id--->user_id索引,找到top-k相似用户top-k相似用户,通过user_id-->item索引,找到用户最近感兴趣的物品列表last-nnk个相似物品,用公式预估用户对每个物品的兴趣分数背景:假如重合的用户是一个小圈子,当两件物品的受众完全不一样,圈子里很多人交互,这时就需要降低小圈子的权重,希望两个物品重合的用户广泛且多样。
模型原理:给用户设置权重,解决小圈子问题
物品相似度计算:


overlap越大,用户u1和u2的重合度越高,则他们可能来自一个小圈子,要降低他们的权重
本质上讲是将召回建模成在向量空间内的近邻搜索问题,将用户和物品均由向量表示,离线构建索引,在serving时模糊近邻查找。
user和group侧分别用NN网络来拟合,最上层的神经元可认为是user和group的向量表征。CTR召回可以直接用点积+sigmod得到loss,时长模型可以用cos距离+mse计算lossgroup_emd,线上计算user_emd再近邻查找。One-hot编码:把序号映射成高维稀疏向量Embedding:把序号映射成低维稠密向量key-value表Milvus、Faiss、HnswLibL2距离cosine相似度):工业界最常用。key:每个区域的向量,value:区域中所有点的列表embedding Layer映射成embeddingne-hot —> embedding LayerPointwise: 把召回看作二元分类任务
cos(a,b)接近于 +1cos(a,b)接近于-11:2或者1:3Pairwise:
cos(a,b+) 以及cos(a,b-) 基本想法:鼓励cos(a,b+) 大于cos(a,b-)cos(a,b+) 大于cos(a,b-) +m,则没有损失cos(a,b-)+m - cos(a,b+)Triplet hinge loss:

Triplet logistic loss:

Listwie:

cos值通过softmax激活函数,得到n个预测值s,和为1CrossEntropyLoss(y,s): y取1或0,所以也是最大化正样本的余弦相似度选择负样本的原理:
召回目标:快速找到用户可能感兴趣的物品
排序目标:区分比较感兴趣和非常感兴趣的物品
正样本
负样本:
简单负样本:

Batch 内负样本
batch内有n个正样本,一个用户和n-1个物品组成负样本,这个batch内一共有(n-1)个负样本0.75次方,导致热门物品成为负样本的概率过大。pi,则在做训练的时候,调整为cos(a,bi) - logpi。但线上做召回的时候仍旧使用cos(a,b)困难负样本:
对于双塔模型做召回,二元分类任务,让模型区分正负样本:
工业界训练数据:混合几种负样本,50%的负样本是全体物品,50%的负样本是没通过排序的物品。对于曝光但是没有点击,训练召回模型不能用这类负样本,训练排序模型会用这类负样本。
离线存储
<特征向量,item_id>保存到向量数据库Milvus、Faiss用户塔:用户的兴趣动态变化,而物品特征相对稳定(可以离线储存用户向量,但不利于推荐效果)
a作为query调用向量数据库做检索查找k个物品,作为召回结果增量更新
online learning更新模型参数,用户的兴趣会随时发生变化TFRecord文件online learning, 增量更新ID embedding参数。(不更新神经网络其他部分的参数)全量更新
random shuffle,训练1 epoch,即每天的数据只用一遍随机打乱优于按顺序排列数据,全量训练优于增量训练
GeoHash: 对经纬度的编码,地图上一个长方形区域GeoHash-->优质物品列表(按照时间倒排)城市---> 优质内容列表背景:精排输出几百个物品,送入重排,重排做多样性抽样,选出几十篇,精排结果一大半没有曝光,被浪费。
想法:复用前n次推荐精排的结果,精排前50,但是没有曝光的,缓存起来,作为一条召回通道,缓存大小固定,需要退场机制
新笔记的点击率、交互率:
分别考察高曝光、低曝光新笔记
双塔模型做id embedding是,让所有新专辑共享一个id,而不是使用自己真正的id。default embedding
改进: 使用相似物品的embeddding ,取topk个高曝光的相似物品
类目召回、关键词召回:按照刚刚发布的时间顺序召回
基本思想:如果用户喜欢一件物品,那么那会喜欢内容相似的物品
1000cluster,记录每个cluster的中心方向。(k-means聚类,用余弦相似度)last-n交互的专辑列表,把这写专辑作为种子专辑,把每篇种子专辑映射到向量,寻找最相似的cluster。(知道了用户对哪些cluster感兴趣)cluster的专辑列表中,取回最新的m张专辑cnn提取图片,bert提取文本特征流量怎么在新、老物品中分配,目的:
工业界的做法:PID技术
30天的专辑24h)的曝光占比为1/301/30流量调控技术的发展:
boost:在排序阶段加上或乘上一个系数指标:
5%的用户侧实验
限定:保量100次曝光
假设:新笔记曝光越多,用户使用APP时长越低
新策略:把新专辑排序时的权重增大两倍。
结果(只看用户消费指标):AB测试的diff是负数,实验组不如对照组,如果推全,diff会缩小