1、
Q:如何评定召回系统的效果?
A:例如我们预估ctr,那么直接算AUC是简单粗暴的做法,但是AUC高并不完全等价于效果就好。因为召回这个系统本身并不是要排序(并非评估逆序),而是从N个候选集合中选出topK。
A:想要形式化一下这个问题,我们就得将精排的过程加入其中。例如粗排从N个候选集中选出topK,精排再从K个候选集中选出topM展现,最后要优化这M个展现item的总点击。我们这里如果假设精排是个最优的选择器,粗排仅仅作为在线精排无法进行N个候选集全量预估来加速的方法(实际上不可能),那么我们要优化的便是粗排的recall:真实最优的M个item,在K个候选集中被召回的比例。num(recall_M) / num(real_M),num(real_M)是常数,则我们要优化的就是,粗排召回的K个候选集合中包含的real_M的个数。而获取real_M的办法,即是对全部N候选集跑一遍精排。
A:然而实际上,精排和上层rank肯定不是一个最优的选择排序器。则,就算我们按上一个回答那样计算了recall并提升之后,在线上实验的时候效果也不一定会更好。(因为可能只是将精排一些误排的item给召回了,这样可能就并没有收益)。那么,我们怎么样来确认什么样的item是精排正确排出的item呢,一个方法就是用后验数据。但是由于历史的数据曝光的数据已经确认了,我们无法判断一个在之前未被展现的item是否会被点击,所以根据后验数据去评估的方法无法用离线数据去验证。
A:既然在真实的情况下,我们无法离线评估其效果,那么就只有在线ABtest来评估。线上仅看业务指标的话,一般业务指标提升则实验转全,这是比较理想的状态。但是如果实验指标没有显著性的提升也并不能直接等价于粗排的选取能力没有提升(因为精排rerank不是完美的),所以这就又引导出一个疑问,我们修改底层选举策略的时候,是否要和上层联动优化。(见Q2)
A:类似地,在youtube recommendation的论文中,也对评估方法有如下的阐述:During development, we make extensive use of offline metrics (precision, recall, ranking loss, etc.) to guide iterative improvements to our system. However for the final determination of the effectiveness of an algorithm or model, we rely on A/B testing via live experiments.
以及更进一步对优化目标的讨论:It is important to emphasize that recommendation often involves solving a surrogate problem and transferring the result to a particular context. A classic example is the assumption that accurately predicting ratings leads to effective movie recommendations [2]. We have found that the choice of this surrogate learning problem has an outsized importance on performance in A/B testing but is very difficult to measure with offline experiments.
换句话说,我们在做推荐的时候,我们无法形式化“这个推荐好,还是不好”,无法把推荐这个问题直接变成一个公式,一个直接优化的目标,所以实践中我们去优化了很多其他的指标:观看,点击,评分等等。而选择什么样的surrogate problem去解决,这个非常重要【例如google便发现预估next watch比预估randomly held-out watch更有效】(我觉得其中一个主要原因是因为这个目标更接近真实预估的场景)。但是选择的目标是好还是坏,我们通常无法离线去评估它们,需要通过线上的ABtest去解决。
2、
Q:底层的优化需要单独实验,还是和上层配合实验,如果评估效果(分别的效果)
A:底层的优化(例如粗排优化,多目标优化),如果不配合上层的优化一起,由于上下层优化目标不一致的gap,很可能会导致效果不显著,甚至负面效果。
网友评论