本文需要有对pairwise及pointwise的基础概念
搜索排序和推荐虽然属于两个不同的领域,但却有许多共同之处。李航老师的《Deep Learning for Matching in Search and Recommendation》更是将search及recommendation统一归纳到Matching框架中来讲解。
搜索排序,一个典型的场景是淘宝的商品列表页。你需要输入一个搜索词作为query,然后系统返回商品排序列表。搜索排序常用的模型是基于pairwise的。而推荐,典型的场景是淘宝的首页,会有一些商品的展示,这就是推荐场景。推荐与搜索排序不同,是没有显式query的。但是,其实用户的行为、偏好等信息其实可以理解为隐式的query,根据这些信息我们才能有的放矢的推荐用户可能感兴趣的物品。
那么既然推荐有隐式query,为什么推荐模型都用pointwise类型的,为什么不采用pairwise类型的呢?关于这个感兴趣的问题,对其进行了一些总结:
- 搜索排序是pull的过程,推荐是push的过程。 搜索排序中,用户显式给定搜索词,明确表达自己的需求,然后从海量商品库内pull出符合自己需求的商品。这样导致的特点就是商品的相似度比较高。推荐中,维度更加发散,相较于搜索排序中用户主动去搜索,推荐中系统是主动的一方。而推荐结果与搜索排序结果的显著差异就是在物品的多样性上。可以回想一下,各位在搜索排序场景中和推荐场景中的心理状态。在商品列表页,根据你的需求展示了很多同质化的商品,这时候你就会边浏览,心中边比较对不对。而在推荐场景中,例如抖音,你会看到很多不一样的视频,觉得这个视频好好玩,那个视频好搞笑,这时候你在乎的就不是同质商品的比较了。所以,基于pairwise的模型天生就适用于搜索排序场景,因为pull出的结果都是同质化的商品;而push的结果由于差异很大,无法也没必要去做pair比较;
- pointwise模型预测的分数具有实际意义。
在计算广告领域,为什么用pointwise模型?因为pointwise模型的输出具有实际物理意义,即点击率。而pairwise模型输出的分数除了用于排序,是没有具体的物理含义的。
这里顺便聊一聊pairwise和pointwise模型吧。随便聊,聊到哪儿算哪儿。
pointwise模型认为样本之间是相互独立的,而pairwise模型则更加关注item之间相互的比较。所以,在re-rank阶段,可以利用pairwise模型做更进一步的排序,如在阿里已经落地的工作《Personalized Re-ranking for Recommendation》。
pairwise模型的样本也需要更加谨慎。因为pointwise模型认为样本是独立的,就算有一个label异常了,只是影响这单个训练样本。而pairwise模型如果有一个label异常,会对很多item pairs造成影响,所以要保证label的质量。
关于pairwise模型训练的问题,其基本结构可以与常见的pointwise模型保持一致,只是将Loss形式变为pairwise loss即可,如BPR loss。但是呢,pairwise模型在训练时,因为item pair数量的原因,计算量更大。而且,在pointwise中,可以指定fixed number的batch_size去训练。而在pairwise中,指定batch_size是就不再是样本个数的概念了,而应该是query个数的概念。所以,这也会导致在每个iteration中,训练样本数据不一致,不可控。
这里只是聊聊pairwise及pointwise的一些开放性问题,欢迎大家各抒己见。
最后,欢迎大家加入免费知识星球《算法精进之路》,希望大家互通有无,多多交流经验~