文章亮点:
1.提出“曝光未点击”在召回场景中的鸡肋作用
2.提出筛选负样本的方案(主要是筛选hard负样本的三种方案)
3.将hard负样本训练模型并行、串行运用到场景中
召回和排序在场景中的作用:
1.排序:可用高复杂模型
2.召回:可用低复杂模型,且有很多模型竞争
简述Facebook EBR模型
1.模型的优化:
使用FAISS计算User和Item向量
2.Loss的优化:
loss=max(0,margin-<u,d_+>+<u,d_->);
<u,d_+>,<u,d_->分别代表正负样本与user计算的score
BPR loss=$log(1+exp(<u,d_->-<u,d_+>))要比一般的Hinge loss好;即鼓励margin优势越大越好。
3.离线评估
出现线下不明显,线上提升明显的模型,一个置信度高的离线评测手段仍然是召回工作中的痛点。
重中之重是"筛选(负)样本"(本文的重点)
1.破除了“召回照搬排序”的迷信,明确指出,不能(只)拿“曝光未点击”做负样本
2.提出了easy negative/hard negative的样本分级思路
3.提出了增强hard negative的思路(也不算首创了,和百度Mobius的思路几乎一模一样,也算英雄所见略同了)
为什么不能(只)拿"曝光未点击"做负样本?
排序模型:在比较优质的数据中挑选更加优质的数据
召回模型:在好坏混杂的数据中分离出好/坏样本,并进行筛选;
如果只用曝光未点击的数据,有以下缺点:
1.该数据较优质,已经经过上一次排序,召回筛选,只能在较优质与优质文章中筛选;
2.未见过坏样本数据,导致训练强度不够,导致训练出结果偏差较大。
本质为线上和线下样本分布不一致。
拿随机采样做负样本
为防止热门绑架个性化数据
1.热门点做正样本,降采样;做负样本,过采样;
挖掘Hard Negative增强样本
样本分三类:
1.正样本(用户点击),
2.easy 负样本(随机筛选,可很好鉴别出来),
3.hard负样本(能够增加模型训练难度,可提升模型关注细节能力的负样本)
筛选hard负样本方式:
1.增加属性相似负样本(例如同城Item);
2.增加被拒绝的负样本;
3.自己挖掘负样本:
利用上一版本模型召回算出101-500的文章作为负样本;
Online样本集:
一个batch中所有user与所有的cross join
Offline样本集:上一版本的召回模型过一遍历史数据。
easy:hard=100:1
不同难度的模型相互融合:
用不同难度的negative训练不同难度的模型,再做多模型的融合。
并行融合
不同难度的模型独立打分,最终取Top K的分数依据是多模型打分的加权和。
线上召回用Fassis时:embedding = model_weight1 * embedding1 :+ model_weight2 * embedding2 :+ model_weight3 * embedding3 (拼接)
挖掘数据出的hard负样本训练的模型+easy负样本训练的模型加起来评判效果最好
串行融合
通过easy模型初选,hard模型进行再次筛选
全链路优化
需要优化排序的结果
"曝光未点击"就是鸡肋
曝光未点击在召回作为正、负样本、并行、串行模型都无效果,在召回中十分鸡肋;
原因:推荐系统认为用户会喜欢,但用户却不喜欢;