阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

推荐系统应该如何保障推荐的多样性?

  • 2019-09-30
  • 本文字数:2491 字

    阅读完需:约 8 分钟

推荐系统应该如何保障推荐的多样性?

首先,推荐系统的多样性并不应该是一个推荐系统追求的终极目标。


多样性,是手段,不是目标!


多样性,是手段,不是目标!


多样性,是手段,不是目标!

重要的事情重复三遍,为什么不能作为目标呢?因为:

  1. 多样性很难量化。3 个体育新闻+7 个小姐姐和 7 个小姐姐+3 个体育新闻,哪个更加多样呢?

  2. 多样性不是越多越好,一次推荐 list 10 篇文章,各是不同的话题的,显然比较多样,但是你确定是更好的推荐结果吗?你肯定会说,多样性要“合适”就好,问题就在这里,合适的点在哪里呢?那一定是通过其他真正的结果指标来告诉你的。

  3. 多样性对于每个人,每个场景来说,是不一样的,好坏的点不同。比如说我最近刚有了宝宝,那么我恨不得淘宝给我推荐的商品全都是母婴用品,多样性并不是一个特别重要的事情。

哪些指标是合理的呢?

  1. 用户反馈(喷产品经理)后台里关于多样性的反馈数量,别笑,这个指标至少是越少越好的,是一个非常可以量化的指标。不过这个信号太稀疏了,不足以从中提取有统计意义的信息。倒是有可能发现一些明显的 bad case 或者 bug。

  2. 用户的点击率、阅读时长、留存、分享、互动数据。这是推荐系统的 ground truth,如果你可以建立这些 ground truth 和多样性之间的关系,那显然可以去做一些工作。

记住,用一个真正的指标为准绳和目标去优化多样性,不要为了多样性而多样性!

比如如果你的推荐系统的优化目标是阅读时长,如果增加多样性可以提升时长,就去做,如果增加多样性不能够提升时长,那你就不要这么做。


多样性真正的背后的问题,在于点击率预估模型也好、时长或者什么 xx 预估模型也好,预测的是一个 point-wise 的问题。就是你给某个具有 x 属性的用户在 c 的上下文下看一个叫做 i 的内容,他的点击率、时长、xx 可能会是多少。


而实际中的问题叫做,你给某个具有 x 属性的用户在 c 的上下文下看一串叫做 <i1,i2,i3,i4…> 的内容列表,他的点击率、时长、xx 可能会是多少。


所以多样性的问题就在于你的业务实际要优化一个排列组合,你优化的只是某一个点,那么因为你的模型和你使用模型的业务场景不同,你拿到的结果自然不是最优。更通俗地说,你喜欢吃虾,给你上一桌全是虾的菜,大概率是一个失败的菜单,而一桌有鱼有虾有鸡有鸭的菜可能会更好。因为你每个都不喜欢的概率大大降低了。


你肯定会问,为什么不直接去建立一个模型,样本就用 list,然后直接对所有候选集的可能排列组合进行打分然后选出最优的内容排列组合呢?


不妨先假设你已经训练出了这样一个模型,假设你是做短视频推荐信息流的,当前推荐有 100 个可选候选集,那么你推出一刷 5 个短视频,需要遍历 100*99*98*97*96 这么多种可能性才能找到最优的组合,这显然是没有计算可行性的。


而实际上,你训练出这样的一个模型,也对你的样本量和计算基础设施有非常高的要求。

那么怎么办呢?

  1. 老专家规则。比如说你一拍脑门,说一次推荐 5 条内容里必须有至少 1 个视频,至少来自于 3 个不同的分类。接着你 abtest 了一下,这么做的情况下,用户的负反馈减少了、时长提升了。其实这是大多数推荐系统在使用的一个 good practice。老专家规则有很多,无非是一些启发式的策略,你拍拍脑袋或者抄一抄别的推荐系统,就能得到答案,然后通过大量快速的 abtest 迭代测试找到对你的业务场景来说靠谱可行的策略(集合)。

  2. 使用更长更丰富的召回拉链,保证更多样的内容可以进入排序阶段。只要系统不会挂,这往往是没有什么坏处的,除了你的云服务器账单会增长得更快。但是仅仅增加召回拉链的数量,并不能彻底解决多样性问题,因为你并没有改变预估模型的逻辑,只是提供了更多的候选集。

  3. 建立一个模型,用一些贪心的方法,比如要么减少搜索空间,要么对这个空间的性质做一些理想假设来降维,来预测什么样的 list 组合是最优的。这里有很多牛逼的方法,比如最近 youtube 的一篇论文,比如阿里现在在采用的一些 list-wise 模型策略。几种朴素的方法:


① 分类的空间比 item 小多了,比如说你的内容一共也就 10 个分类,一刷 10 个,不考虑顺序,再删除掉一些完全不可能的组合,那么组合的空间可以降低到几十 - 几百个,又回到了一个典型的机器学习在线预估问题。你可以先预测这一刷要给这个人看哪些分类的内容,各几个。然后再有一个模型从这些分类里取他可能更喜欢的内容。


② 对多样性进行一个度量,比如说每个 item 通过模型或者某种东西 embedding 成一个 64 维向量,然后再设法降维到 10。每一刷 10 个,那么 10 行 10 维向量长成的空间的体积或者说这个矩阵的行列式就表达了这 10 个 item 的多样性。你可以把这当成一个特征去算每个人对这个多样性的偏好。对于不同偏好的人,在最后 rerank 的时候设定一个阈值去进行裁剪。


③ 构造一个特别的样本,特征包含展示在每个 item 之前的几个 item 的可以泛化的特征 ( 比如说类目、term、tag ),列表生成的时候对候选集的 item 使用这个模型来从上到下打分生成。每个列表第一个就放全局最后的 item1,第二个就用这个模型预测当第一个位置是 item1 ( 这样的 item ) 的时候,item2 应该选哪个最好,以此类推。


④ 更多骚气而你能想到的 idea,都可以去实验。

简单总结一下:

  1. 多样性不是你追求的目标,但是多样性确实可以帮助你提升你真的应该关注的指标:比如说更少的用户投诉、更多的时长、点击。

  2. 多样性问题的本质是 ctr 或类似预估问题是对单点最优进行预测,而我们真实业务实际上往往给出的是一个列表。求列表最优的问题计算空间过大,所以我们会用一些歪门邪道,要么直接拍个老专家规则,要么降低空间的维度或者复杂度来取巧解决。


作者介绍


周开拓,第四范式推荐系统架构专家,先荐业务团队负责人。本科毕业于北京大学数学系,在 University Of Virginia 获得统计学硕士,曾任职于世界最大的农业机械生产商 John Deere、负责利用机器学习技术进行农业经济预测,后加入阿里巴巴,负责手机淘宝推荐系统。


本文来自 DataFun 社区


原文链接


https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247493934&idx=1&sn=9b58f070854bf02139d9e157ed955c14&chksm=fbd75b42cca0d254c73b2511f324b3474649fc106dc46b321326d93446feeae8cd04d3ac58f1&scene=27#wechat_redirect


2019-09-30 08:001847

评论

发布
暂无评论
发现更多内容

Android R给自家UA工具挖坑

霍格沃兹测试开发学社

技术分享 | web自动化测试-文件上传与弹框处理

霍格沃兹测试开发学社

​小长假要到了,来偶遇吗?

腾讯云数据库

数据库 腾讯云 tdsql 腾讯云数据库

彻底搞懂nodejs事件循环

coder2028

node.js

【Java深入学习】并发常见方法的注意事项

钟奕礼

Java 面试 java;

深入剖析nodejs中间件

coder2028

node.js

EMQ荣获工信部第五届“绽放杯”5G应用征集大赛智慧金融专题一等奖

EMQ映云科技

5G 物联网 IoT 数智化 9月月更

Java开发5年,复习1个月成功上岸京东物流,面试和复习思路分享

钟奕礼

Java 面试 java;

想从事运维岗位应该学习什么技能?谁能告诉一下?

行云管家

运维 网络运维 IT运维

字节半天*3面/5天拿offer,全凭自身硬实力和这份Java面试笔记

钟奕礼

Java 面试 java;

APISIX的安装和简单使用

飞翔

公司用的堡垒机叫什么?多少钱?

行云管家

网络安全 堡垒机 等级保护 过等保

Jenkins实践——创建Pipeline的两种方式

霍格沃兹测试开发学社

BUG 修复预估模型

霍格沃兹测试开发学社

前端代码优化小技巧

霍格沃兹测试开发学社

组装式交付-云巧 知多少

六月的雨在InfoQ

9月月更 云巧 组装式交付 云巧资产 云巧工坊

idea 远程开发 client

黄敏

利用 zabbix 监控服务端口

霍格沃兹测试开发学社

天了噜,原来有效的复盘要这样做,微妙!

博文视点Broadview

GitHub无抗手!MySQL DBA攻坚指南一出,阿里数据库专家都解脱了

Geek_0c76c3

Java 数据库 开源 程序员 架构

Java程序员不得不会的124道面试题(含答案)

钟奕礼

Java 面试 java;

600+ 道 Java面试题及答案整理(建议收藏)

钟奕礼

Java 面试 java; Java 面试题

50道Java集合高频面试题,看完面试成功率99%

钟奕礼

Java 面试 java;

总览 Java 容器--集合框架的体系结构

钟奕礼

Java 面试 java;

玩转 Flowable 流程实例

江南一点雨

Java springboot workflow flowable

图像匹配几种常见算法与实践

霍格沃兹测试开发学社

8年经验面试官详解 Java 面试秘诀

钟奕礼

Java 面试 java;

狂刷《Java权威面试指南(阿里版)》,冲击“金九银十”有望了

程序知音

Java 阿里 后端技术 Java面试题 Java面试八股文

2022届秋招Java岗高频面试题盘点,老司机也未必全会,真的太卷了

钟奕礼

Java 面试 java;

时隔一年多 jQuery 再度发布 3.6.1 新版本,你还在用JQ吗?

茶无味的一天

JavaScript 前端 框架 ​jQuery

2022第三届云原生编程挑战赛--Serverless VSCode WebIDE使用体验

六月的雨在InfoQ

Serverless 边缘容器 9月月更 Serverless VSCode WebIDE 线上ide

推荐系统应该如何保障推荐的多样性?_文化 & 方法_DataFunTalk_InfoQ精选文章