首先,推荐系统的多样性并不应该是一个推荐系统追求的终极目标。
多样性,是手段,不是目标!
多样性,是手段,不是目标!
多样性,是手段,不是目标!
比如如果你的推荐系统的优化目标是阅读时长,如果增加多样性可以提升时长,就去做,如果增加多样性不能够提升时长,那你就不要这么做。
多样性真正的背后的问题,在于点击率预估模型也好、时长或者什么 xx 预估模型也好,预测的是一个 point-wise 的问题。就是你给某个具有 x 属性的用户在 c 的上下文下看一个叫做 i 的内容,他的点击率、时长、xx 可能会是多少。
而实际中的问题叫做,你给某个具有 x 属性的用户在 c 的上下文下看一串叫做 <i1,i2,i3,i4…> 的内容列表,他的点击率、时长、xx 可能会是多少。
所以多样性的问题就在于你的业务实际要优化一个排列组合,你优化的只是某一个点,那么因为你的模型和你使用模型的业务场景不同,你拿到的结果自然不是最优。更通俗地说,你喜欢吃虾,给你上一桌全是虾的菜,大概率是一个失败的菜单,而一桌有鱼有虾有鸡有鸭的菜可能会更好。因为你每个都不喜欢的概率大大降低了。
你肯定会问,为什么不直接去建立一个模型,样本就用 list,然后直接对所有候选集的可能排列组合进行打分然后选出最优的内容排列组合呢?
不妨先假设你已经训练出了这样一个模型,假设你是做短视频推荐信息流的,当前推荐有100个可选候选集,那么你推出一刷5个短视频,需要遍历100*99*98*97*96这么多种可能性才能找到最优的组合,这显然是没有计算可行性的。
而实际上,你训练出这样的一个模型,也对你的样本量和计算基础设施有非常高的要求。
① 分类的空间比 item 小多了,比如说你的内容一共也就10个分类,一刷10个,不考虑顺序,再删除掉一些完全不可能的组合,那么组合的空间可以降低到几十 - 几百个,又回到了一个典型的机器学习在线预估问题。你可以先预测这一刷要给这个人看哪些分类的内容,各几个。然后再有一个模型从这些分类里取他可能更喜欢的内容。
② 对多样性进行一个度量,比如说每个 item 通过模型或者某种东西 embedding 成一个64维向量,然后再设法降维到10。每一刷10个,那么10行10维向量长成的空间的体积或者说这个矩阵的行列式就表达了这10个 item 的多样性。你可以把这当成一个特征去算每个人对这个多样性的偏好。对于不同偏好的人,在最后 rerank 的时候设定一个阈值去进行裁剪。
③ 构造一个特别的样本,特征包含展示在每个 item 之前的几个 item 的可以泛化的特征 ( 比如说类目、term、tag ),列表生成的时候对候选集的 item 使用这个模型来从上到下打分生成。每个列表第一个就放全局最后的 item1,第二个就用这个模型预测当第一个位置是 item1 ( 这样的 item ) 的时候,item2 应该选哪个最好,以此类推。
④ 更多骚气而你能想到的idea,都可以去实验。
作者介绍:
周开拓,第四范式推荐系统架构专家,先荐业务团队负责人。本科毕业于北京大学数学系,在 University Of Virginia 获得统计学硕士,曾任职于世界最大的农业机械生产商 John Deere、负责利用机器学习技术进行农业经济预测,后加入阿里巴巴,负责手机淘宝推荐系统。
本文来自 DataFun 社区
原文链接:
领取专属 10元无门槛券
私享最新 技术干货