【概要02】
召回 -> [千]
粗排 -> [百]
精排 -> [百]
重排 -> [十]
排序依据:模型打分
用户特征+物品特征+统计特征
点击率、点赞率、收藏率、转发率
【概要03】
AB测试需要随机分桶
如果某个实验组指标显著优于对照组,则说明对应策略有效。
分层实验:同层互斥,不同层正交
每个用户不可以同时受召回桶&召回桶 / 精排桶&精排桶影响(互斥),但是可以同时受召回桶&精排桶影响(正交)
由houdout桶和实验桶计算diff衡量业务指标
如果diff显著正向则可以推全实验
推全新策略作用在10%用户 -> 推全实验 -> 推全新策略作用在90%用户
尽可能早推全有好处,推迟推全也有好处 -> 矛盾 -> 反转实验
反转实验:在新层中开启小的反转桶,当holdout桶去掉后,在反转桶继续观察新旧策略的diff
【召回01】
ItemCF
背景:如果用户喜欢A,那么可能喜欢和A相似的B
做法:Σ用户兴趣*物品相似度
物品不相似:A和B的受众交集为空集
离线建立索引
“用户 -> 物品”:用户 ->(物品ID,兴趣分数),存储最近交互过的n个
“物品 -> 物品”:物品 ->(物品ID,相似度),存储相似度最高的k个
意义:离线建立索引时间长,但线上召回索引很快
【召回02】
Swing
背景:小圈子用户有重合,比如两个链接在同一个群聊中被实际上爱好不同的人打开,误判两个链接相似
做法:ItemCF重合度过高的用户可能来自小圈子,因此减少他们对物品相似度计算的贡献
【召回03】
UserCF
背景:很多兴趣相似的网友,笔记\作者重合越多说明兴趣越相似,如果A喜欢item,和A兴趣相似的B也可能喜欢item
降低热门物品的权重,因为热门物品很多人都知道;越冷门的物品对用户相似度的权重应该更高
离线建立索引
“用户 -> 物品”:用户 ->(物品ID,兴趣分数),存储最近交互过的n个
“用户 -> 用户”:用户 ->(用户ID,相似度),存储相似度最高的k个
线上召回索引
用户 -> (用户ID,相似度)* top_k -> 用户ID * top_k -> (物品ID,兴趣分数)* top_k -> 物品ID * top_k * top_n
【召回04】
离散特征,如性别、国籍、物品ID
处理:建立字典(类别->序号),向量化(序号->向量)(One-hot编码,Embedding)
One-hot编码
至多有一个位置是1,未知是零向量,类别数量较少时使用
Embedding层
形式:矩阵,大小为(向量维度*类别数量)
输入:序号
输出:向量
Embedding = 参数矩阵 * One-hot向量
【召回05】
用户ID & 物品ID -> Embedding -> 兴趣预估值<用户向量,物品向量>
数据集:(用户ID,物品ID,真实兴趣分数)
Embedding层训练
把ID映射成向量,求解优化问题
矩阵补充
只有曝光给用户的物品才有分数
注:实践效果不好,仅了解
原因:仅用ID映射;负样本选取曝光但无交互的物品,这样的选取方式是不对的;训练方法不好
模型存储
存储用户和物品的Embedding矩阵
线上服务
逐个计算兴趣预估值并查找最近邻,但枚举的复杂度过高,主要是要加速最近邻的查找
近似最近邻查找
最近邻的标准:余弦相似度最常用于推荐系统,扇形
划分区域 -> 通过区域向量确定目标物品的所属区域 -> 在该区域中查找相似度最近邻
【召回06】
双塔模型
背景:矩阵补充的升级版,用户塔+物品塔
用户特征 -> 特征处理 -> 神经网络 -> 用户表征(向量a)
物品特征 -> 特征处理 -> 神经网络 -> 物品表征(向量b)
训练:Pointwise;Pairwise;Listwise
正负样本的选择
正样本:用户点击的物品
负样本:下一节说明
Pointwise训练
思路:把召回看作二元分类任务,(a,b)
正样本 - 鼓励cos(a,b)接近+1
负样本 - 鼓励cos(a,b)接近-1
控制正:负 = 1:2 or 2:3
Pairwise训练
思路:鼓励对正样本的兴趣大于对负样本的兴趣,(a,b+,b-)
如果cos(a,b+) > cos(a,b-)+m则没有损失,否则有损失
训练:最小化损失函数L(a,b+,b-)(Triplet hinge loss, Triplet logistic loss)
Listwise训练
思路:鼓励对一个正样本的兴趣尽量大,对多个负样本的兴趣尽量小,(a,b+,b1-,b2-,...,bn-)
激活函数:softmax
损失函数:交叉熵
不适用于召回的模型:双塔模型 -> 神经网络 -> 实数
这种前期融合模型需要一对对计算,太复杂了,这种模型通常用于排序,召回只能用双塔那种后期融合模型
【召回07】
简单负样本:全体物体内负样本
未被召回的物品≈全体物品,大概率是用户不感兴趣
做法:直接全体物体随机抽样
简单负样本:Batch内负样本
热门物品成为负样本的概率过大
一个batch有n个样本,一个用户点击一个样本,剩下n-1个样本和该用户组成n-1个负样本,总共是n*(n-1)个负样本
困难负样本
被粗排淘汰的物品,容易被错误地分类为正样本
精排分数靠后的物品,更容易被错误地分类为正样本
所以说“困难”
常见错误
内容:把曝光但没有点击的物品作为负样本
说明:这种样本会用到排序模型,但不可以用到召回模型
原因:召回的目标是快速找到用户可能感兴趣的物品
全体物品 - 绝大多数是用户不感兴趣的 - “简单”
被排序淘汰 - 用户可能感兴趣但不够感兴趣 - “困难”
有曝光没点击 - 既然到了曝光这一步,说明是匹配用户兴趣的,用户感兴趣但碰巧没有点击 - 错误
区分:召回的目标是找到可能感兴趣的物品,排序的目标是分出感兴趣和非常感兴趣的物品。
【召回08】
双塔模型的召回
离线存储(物品向量,离线存储) -> 线上召回(用户向量,最近邻查找)
说明:物品特征相对稳定,用户特征动态变化
全量更新 v.s. 增量更新
全量更新:今天凌晨用昨天全天的数据训练模型,准确,更新全连接层参数
增量更新:做online learning更新模型参数,实时,用户兴趣随时变化,更新embedding层参数
【召回09】
自监督学习改进双塔模型,把物品塔训练得更好
背景:少部分物品占据大部分点击,大部分物品的点击次数不高
自监督学习:更好地学习长尾物品的向量表征
纠偏
避免热门物品被过度打压,cos(ai,bj) - logpj
自监督学习
目的:一个物品对应两个向量特征,鼓励同一物品的向量特征有较高的余弦相似度,不同物品的向量特征有较低的余弦相似度
特征变换:Random Mask
随机选择一些离散特征做掩码
把整个特征类目丢掉
特征变换:Dropout
仅对多值离散特征生效
把特征类目其中几个丢掉
特征变换:互补特征
随机分成几组,它们的交集为空集且并集为全集,鼓励他们的余弦相似度尽量大
特征变换:Mask一组关联的特征
互信息计算两组特征两两之间的关联
效果好,性价比低
训练模型
余弦相似度 -> softmax激活函数 -> 向量表征(越接近真实的0-1标签越好) -> 交叉熵损失函数
【召回10】
地理位置召回:GeoHash召回
背景:用户可能对附近的事感兴趣
GeoHash:对经纬度的编码,长方形区域
索引:GeoHash -> 优质笔记列表
说明:没有个性化,所以召回优质的笔记
地理位置召回:同城召回
背景:用户可能对同城的事感兴趣
作者召回:关注作者召回
背景:用户对关注的作者的新作品感兴趣
作者召回:有交互的作者召回
背景:不关注,但是用户对该作者新作品感兴趣
作者召回:相似作者召回
背景:用户喜欢作者A,那么用户可能喜欢和A相似的作者B的新作品
缓存召回
思路:复用前n次推荐精排的结果
做法:精排前50的还没曝光的笔记缓存,曝光后退场,或者多次召回后退场
【排序01】
点击率、点赞率、收藏率、转发率
二元分类则使用交叉熵损失函数
权重:用AB测试调出来的
负样本降采样:只保留一小部分负样本
预估值校准
【排序02】
MMoE(Multi-gate Mixture-of-Experts)
输入向量:包括用户、物品、统计、场景特征
输出数值:业务指标,如点击率
极化现象
现象:MMoE中Softmax输出值一个接近1而其余接近0,就相当于在加权时有神经网络“专家”死掉了
解决:使用dropout,比如设置每个“专家”被丢弃的概率是10%
【排序03】
融合预估分数
简单的加权和
点击率乘以其他指标(如点赞率等)的加权和
其他工业界融分公式
【排序04】
视频播放时长的预估
经验:直接用回归拟合播放时长效果不好
训练:最小化交叉熵损失
把预估的播放时长用到融分公式
视频完播的预估
回归方法
二元分类方法:设置阈值,大于阈值完播否则不完播
不能把预估的完播率直接用到融分公式
【排序05】
排序模型的特征
用户画像:用户ID,性别年龄,账号信息,感兴趣类目等
物品画像:物品ID,发布时间,GeoHash,标题类目关键词字数,图片美学分数等
用户统计特征:用户近期曝光数等,按照笔记的类别分桶
笔记统计特征:笔记近期曝光数等,按照笔记受众的性别年龄分桶,作者特征
场景特征:用户定位,当前时刻,是否周末节假日,设备信息
特征处理
离散特征:做embedding
连续特征:做分桶把连续变成离散;曝光数、点击数等数值做数值变换log(1+x),或者做平滑
特征覆盖率
背景:不填年龄啥的,而提高特征覆盖率可以让精排准确度更高,所以要考虑缺失数据要用什么替代
数据服务
用户画像 - 较为静态
物品画像 - 静态
统计数据 - 动态 - 不能存本地,需要实时
【排序06】
粗排:给几千篇笔记打分,做初筛
精排:对粗排后获取的几百篇笔记重新打分
精排模型(精排):MMoE,n篇笔记n次推理,线上计算量大
双塔模型(召回):物品塔离线计算,用户塔计算一次,线上计算量小,预估准确性不如精排模型
三塔模型(粗排):用户塔+物品塔+交叉塔 -> 精排模型,介于前期融合和后期融合之间
用户塔 - 只做一次推理
物品塔 - 未命中缓存时需要做推理,一般不需要
交叉塔 - 1个用户n个物品就必须做n次推理
上层网络 - 做n次推理给n个物品打分,粗排模型的主要计算量集中在上层网络
【特征交叉01】04:12:19 FM
线性模型
没有特征交叉,但是特征交叉在推荐系统中是必要的,可以让预测结果更准确
二阶交叉特征
线性模型加入交叉项 -> O(d^2)参数量太大 -> 过拟合 -> 减少参数量:正交分解U = V·V^T -> FM参数量O(kd)
【特征交叉02】04:18:22 DCN
回顾召回、排序模型
双塔模型
多目标排序模型
MMoE
交叉层
x_i+1 = x0 ◦ [ Wi • xi + b ] + xi
交叉网络
x0 -> cross layer -> x1 -> cross layer -> x2 ...
深度交叉网络
特征向量 -> [ 全连接网络 & 交叉网络 ] -> 全连接层 -> 输出向量
【特征交叉03】04:25:47 LHUC
LHUC用于精排,起源于语音识别
语音识别中的LHUC
语音信号+说话者特征 -> 输出向量
【特征交叉04】04:29:54
SENet

不同离散特征的Embedding向量维度可以不同
Field间特征交叉
Field:m个离散特征 -> m个Embedding向量 -> m组向量元素 -> m个Field
把不同的Field做交叉得到新的特征
方法:内积,哈达玛乘积,Bilinear Cross - 内积,Bilinear Cross - 哈达玛乘积
【特征交叉05】04:36:51 FiBiNet
FiBiNet

【用户行为序列01】04:38:30
lastN特征
lastN:用户最近n次交互的物品ID
lastN物品交互记录 -> Embedding得到N个向量 -> 取平均得到lastN特征向量
【用户行为序列02】04:41:39 DIN
DIN模型
目的:对lastN序列建模的一种方法
DIN:用加权平均代替获得lastN的取平均
lastN物品向量&候选物品向量 -> 计算相似度作为权重 -> 加权平均得到lastN特征向量
DIN的本质是注意力机制
key和value:N个特征向量
query:候选物品向量
【用户行为序列03】04:46:19 SIM
SIM模型
背景:DIN关注短期兴趣而遗忘长期兴趣
目的:保留用户长期行为序列
分析:DIN中lastN物品与候选物品差异大时权重接近0
做法:快速排除与物品无关的lastN物品从而扩大N的同时降低计算量,即把"LastN"变成"TopK"
步骤1 - 查找:Hard Search(保留LastN候选物品中类目相同的),Soft Search(保留LastN候选物品中最相似的TopK个),
步骤2 - 注意力机制:使用时间信息,因为SIM序列长,记录用户长期行为,时间越久远,重要性越低
讨论:
长序列优于短序列
注意力机制优于简单平均
Soft Search效果比Hard Search更好但是也更耗费计算资源
【多样性01】04:55:19 物品相似性的度量
相似性的度量
基于物品属性标签:分级分类目计算相似度
基于图文内容的物品向量表征:图 - CNN;文 - BERT;图文 - CLIP
提升多样性
位置:粗排和精排的后处理
【多样性02】05:03:00 MMR
MMR多样性算法
集合分为已选中的物品S和未选中的物品R
每次把R中分数最高的物品移动到S,再重新计算分数
滑动窗口
背景:集合S越大,越难从R中找到与S相似的物品
解决:用滑动窗口W代替MMR公式中的S,即从R中找出的物品与W的∈S最相似即可,而不需要与S最相似
【多样性03】05:10:58 重排规则
【多样性04】05:15:40 DDP:数学基础
DDP:最好的多样性算法
行列式跟向量体积的关系
【多样性05】05:25:22 DPP:多样性算法
变量:1. n*物品打分;2. n*物品向量表征;-> 3. k*物品选出(reword&volume衡量多样性)
基本思想:用行列式衡量物品多样性。
本质:是一个组合优化问题,从1~n的集合中选出一个大小为k的子集。
计算:不可能直接算,是NPhard问题,通常使用贪心算法求解。
贪心算法:每轮选择一个物品i,要求有较高价值且不能与已有物品相似。
贪心算法 - 暴力算法求解05:31:30
O(n^2*d+n*k^4) - 太慢了不可行
贪心算法 - Hulu的快速算法求解05:33:17
O(n^2*d)
关键:Cholesky分解矩阵,变成三角阵相乘
优势:给矩阵添加一列和一行(每轮选择物品i),可以在之前的基础上快速算出Cholesky分解,而不需要重新计算。
DDP的扩展
滑动窗口的劣势:随着集合S增大,其中相似物品越来越多,物品向量会趋近线性相关。所得到的贪心算法中的行列式会坍缩到零,对数趋于负无穷。
规则约束:比如最多出现5篇视频,下一篇就必须是图文笔记,那么要记得结合规则约束。
【物品冷启动01】05:39:14 评价指标
什么是冷启动
UGC的物品冷启:用户新上传新分布的。
PGC的物品冷启:比如腾讯视频这种内容由平台采购的。
新笔记冷启动
原因:新笔记缺少交互,导致推荐难度大;扶持新发布低曝光的笔记有利于增强作者意愿。
优化冷启的目标
精准推荐:推给合适用户,不引起反感。
激励发布:流量向低曝光新笔记倾斜。
挖掘高潜:通过初期小流量挖掘,发现高潜力笔记,予以流量倾斜。
评价指标
作者侧指标:
发布渗透率、人均发布量。
用户侧指标:
新笔记指标:新笔记的点击率、交互率。
大盘指标:消费时长、日活、月活。
内容侧指标:
高热笔记占比。
作者侧指标
发布渗透率 = 当日发布人数 / 日活人数
人均发布量 = 当日发布笔记数 / 日活人数
作用:反映作者的发布积极性
目标:促进发布,增大内容池
用户侧指标
新笔记指标:分别考察高曝光和低曝光笔记的点击率、交互率,重点扶持低曝光笔记。
大盘消费指标:虽然低曝光笔记缺少交互,但是大量扶持低曝光笔记可能导致用户体验不好,导致日活下降,所以还要关注大盘。
内容侧指标
挖掘高热笔记占比,让高热笔记短时间内活跃起来。
冷启动的优化点
优化全链路(召回和排序)
流量调控(流量如何在新物品和老物品中分配)
【物品冷启动02】05:51:18 简单的召回通道
召回的依据
自带图片、文字、地点
算法或人工标注的标签。
新笔记没有用户点击点赞等信息。
新笔记没有ID embedding(向量刚初始化)。
召回的困难
缺少交互 -> 没学好ID embedding -> 双塔模型效果不好 -> 改造后适用
缺少交互 -> 无法根据交互计算笔记间相似度 -> ItemCF不适用
适用的:类目、关键词召回;聚类召回;Look-Alike召回
双塔模型 - ID Embedding - 改进方案
default embedding:物品塔做ID Embedding时让所有新笔记共享一个ID
相似笔记embedding:寻找topK内容最相似的高曝光笔记的平均向量
多个向量召回池
类目召回
用户画像:感兴趣的类目和关键词
建立类目/关键词到笔记列表的索引
召回流程:用户画像 -> 类目/关键词 -> 笔记列表 -> 取出最新的
缺点:
只对新发布笔记有效,笔记列表最新的放前面
弱个性化,不够精准,比如喜欢鱼,标签是动物,但是被推荐了猫猫狗狗不感兴趣。
【物品冷启动03】06:02:05 聚类召回
基本思想
如果用户喜欢一篇笔记,那么他会喜欢内容相似的笔记。
基于类目和内容得到笔记向量,向量相似即笔记相似。
聚类索引
新笔记图文内容 -> 神经网络 -> 特征向量
索引:cluster -> 笔记ID列表(按时间倒序
聚类召回
把用户last_n交互的笔记列表作为种子笔记
种子笔记映射到向量,寻找最相似的cluster(知道用户兴趣
从每个cluster中取回最新的m篇笔记
最多取回n*m篇笔记
缺点:只对新发布的笔记有效
提取图文特征
CNN(图片特征)+BERT(文本特征)-> 全连接层 -> 特征向量 -> 通过两个特征向量计算两篇笔记的相似度
训练模型
a.正样本笔记、b.种子笔记、c.负样本笔记
鼓励(a,b)相似度尽量大,(c,b)相似度尽量小
<种子笔记,正样本笔记>
人工标注
基于筛选条件,用算法自动选正样本
<种子笔记,负样本笔记>
从全体笔记中选出字数较多、质量较高的笔记
【物品冷启动04】06:10:32 look-like人群扩散召
起源:互联网广告
种子用户(基本信息满足用户画像的用户) -> 人群扩散 -> look-alike用户
新笔记召回
把有点击点赞等行为的用户作为新笔记的种子用户
用look-alike在相似用户中扩散
用户双塔模型计算特征向量作为query -> 从向量数据库(存储新笔记特征向量)召回
【物品冷启动05】06:16:21 流量调控
扶持新笔记的目的
促进发布,增大内容池
挖掘优质笔记
如何扶持
在推荐结果中强插新笔记(落后)
对新笔记排序分数做提权(boost)(性价比高)
通过提权对新笔记保量(如保证前期至少多少曝光)(略复杂)
差异化保量(质量越好的保量更高)(更复杂)
新笔记提权
干涉粗排和重排,给新笔记提权
优点:容易实现,投入产出比好
缺点:曝光量对提权系数敏感,过高导致劣质笔记过度曝光,过低导致优质笔记得不到充分曝光
新笔记保量
无论质量高低,都保证24小时内至少100次曝光
如果一定时间后曝光次数未达到阶段性目标,则提权,否则保持权重1
动态提权保量
输入变量:目标时间、目标曝光、发布时间、已有曝光
由此四个值计算提权系数
发布时间/目标时间越大,已有曝光/目标曝光越小,则对应的提权系数要更大。
保量的难点
保量成功率远低于100%
给新笔记的分数boost的平衡
差异化保量
基础保量
内容质量
作者质量
有保量的上限,比如达到500的曝光了即不再曝光
【物品冷启动06】06:31:16 AB测试
AB测试需要考察作者侧指标和用户侧指标
用户侧实验
新笔记CTR的diff
用户消费时长的diff
思考:推全后的指标跌落没有AB实验的明显
解答:推全后
作者侧实验
新旧策略在作者发布指标上的diff
方案一缺点:新笔记之间会抢流量

思考:推全后的作者发布指标却无变化
解答:如果新笔记都提权,那么diff就没有变化
但是又会出现新老笔记抢流量的问题
方案二缺点:新老笔记之间抢流量,而且内容池减少了,因此含有部分更低级的笔记,略微损害大盘。

思考:推全后的指标增长没有AB实验的明显
方案三缺点:把xhs切成了两个app,严重损害大盘。

设计方案
实验组、对照组新笔记会不会抢流量?
新笔记、老笔记怎么抢流量?
同时隔离笔记、用户,会不会让内容池变小?
如果对新笔记做保量,会发生什么?
【涨指标01】06:46:28 涨指标的方法
推荐系统评价指标
日活用户数(GAU)和留存是最核心的指标
留存的衡量:LT7(今天登录后未来7天登陆天数∈1~7),LT30
LT的增长意味着用户体验的提升
涨指标的方法
改进召回模型,添加新的召回模型。
改进粗排和精排模型。
提升召回、粗排、精排中的多样性。
特殊对待新用户、低活用户等特殊人群。
利用关注、转发、评论这三种交互行为。
【涨指标02】06:51:44 召回
召回模型 & 召回通道
双塔模型
item-to-item
其他小众召回模型
改进双塔模型
优化正样本、负样本
简单正样本,简单负样本,困难负样本
改进神经网络结构
Baseline:用户塔和物品塔分别是全连接网络
改进:用户塔和物品塔分别用DCN代替全连接网络
改进:用户塔中使用用户行为序列
改进:多向量模型代替单向量模型
改进模型的训练方法
Baseline:做二分类,让模型学会区分正负样本
改进:结合二分类、batch内负采样
改进:自监督学习,让冷门物品的embedding更好
改进Item-to-Item
是一大类基于相似物品做召回的模型
很成熟了,可以改进的空间比较小
常见用法是U2I2I
计算物品相似度
ItemCF及其变体
基于物品向量表征计算向量相似度
改进其他小众召回模型
U2U2I(user -> user -> item)
U2A2I(user -> author -> item)
U2A2A2I(user -> author -> author -> item):已知用户u喜欢作者a,且a与az相似,a2发布物品i,那么给用户u推荐物品i。
【涨指标03】07:05:11 排序模型
Loading...