NOTE这是 b 站王树森推荐系统课程的笔记,记录到了重排,之后的物品冷启动和提分部分我没有学,所以也没有笔记。索引如下:
https://www.bilibili.com/video/BV19t4y1p7UM
排序主要依据:用户——物品交互,点击率、点赞率、收藏率、转发率……将这些分数进行融合
预估分数
多目标模型

使用神经网络预估多个分数(0 - 1 之间),通过这些分数进行排序。训练时需要让这些预估值尽可能接近真实值,可以用交叉熵。
训练中会遇到类别不平衡的问题,即正样本少但负样本多。解决方法是
- 使用负样本降采样,抛弃一部分负样本,让正负样本数量平衡。
- 预估值校准,因为降采样后,(期望)预估点击率 Epred=n+/(n++α⋅n−) 会高于(期望)真实点击率 Etrue=n+/(n++n−),校准公式为:Etrue=α⋅Epred/((1−Epred)+α⋅Epred)
Multi-gate MoE (MMoE)
很典型的 MoE 结构

实际使用时,存在极化问题,即权重过于集中在某一个 expert 上。可以在训练时对 softmax 的输出使用 dropout
融合预估分数
简单加权和:
pclick+w1⋅plike+w2⋅pcollect+⋯点击率乘其他项的加权和:
pclick⋅(1+w1⋅plike+w2⋅pcollect+⋯)等等
视频播放建模
除了一般物品的特征,还有播放时长、完播率等特征。
播放时长
对一个用户,训练时,实际播放时长记为 t,神经网络输出为 z,不是直接期望 t 和 z 相近,而是进行一个变换
p=sigmoid(z)=1+exp(z)exp(z),y=1+tt再对 p 和 y 做交叉熵损失:
−(ylogp+(1−y)log(1−p))去掉分母 1+t 也是可以的。训练好之后将 exp(z) 用于融合预估分数
视频完播率
有多种建模方法,如:
- 视频长度为 10,实际播放 4,则记为 104=0.4
- 视频长度为 10,只要超过 8,就为正样本,然后计算正样本占比
不能将预估的完播率用于融分,因为不利于长视频,需要进行调整。
排序模型的特征
- 用户画像:ID,性别、年龄,账号信息,感兴趣的东西等等
- 物品画像:ID,发布时间,GeoHash,类目、关键词,字数,信息量……
- 用户统计特征:近 30 天的活动(曝光、点击、点赞、收藏),物品种类分桶统计
- 物品统计特征:近 30 天(曝光、点击、点赞、收藏)、用户性别/年龄分桶、作者特征
- 场景特征:用户定位、当前时刻、周末节假日、手机品牌型号操作系统
特征处理:
- 离散特征:做 embedding
- 连续特征:分桶,变成离散特征;或其他变换,如 log 处理等
特征缺失:很多特征无法覆盖所有的样本(如用户没有提供信息等)
粗排
上面的内容主要用于精排,下面是粗排相关的
粗排一次需要处理几千篇笔记,必须要推理速度快;而精排不需要
回忆:精排可以使用前期融合(特征拼接),精度较高但是推理速度较慢;召回可以使用后期融合(双塔模型后期计算余弦相似度),计算量小但不够精确
粗排可以使用三塔模型:用户塔、物品塔、交叉塔

将静态特征(用户特征、场景特征、物品特征)和动态特征(统计特征、交叉特征)分离,并缓存计算量大的物品塔输出向量,可以极大提升计算速度

此时模型的计算量集中在上层。