You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
8.4 KiB
Markdown

2 years ago
# 067 | 推荐的Exploit和Explore算法之一EE算法综述
上周,我们聊了一些比较高级的模型,包括张量分解和协同矩阵分解,讨论这些模型如何能够抓住更多的用户和物品之间的关系。最后,我们还讨论了如何优化更加复杂的目标函数。
这周,我们来看一个完全不同的话题,那就是 Exploitation利用和 Exploration探索的策略俗称“**EE策略**”。
一个推荐系统如果片面优化用户的喜好很可能导致千篇一律的推荐结果。其实EE策略是推荐系统里很有意思但也非常有争议的一个话题。一方面大家都明白这类算法的目的每年有很多相关论文发表。但另一方面工业界对于部署这类算法非常谨慎有的产品经理甚至视之为“洪水猛兽”。我们今天就来分析一下导致这个现象的一些因素。
## 走一步看一步的策略
这里再简单阐述一下什么是EE。简单来说就是我们在优化某些目标函数的时候从一个时间维度来看当信息不足或者决策不确定性Uncertainty很大的时候我们需要平衡两类决策
* 选择现在可能是最佳的方案;
* 选择现在不确定,但未来可能会有高收益的方案。
在做这两类决策的过程中,我们也逐渐更新对所有决策不确定性的认识。最终,从时间的维度上来看,我们在不确定性的干扰下,依然能够去优化目标函数。
也就是说,**EE可以看作是一个优化过程需要多次迭代才能找到比较好的方案**。
## EE的应用历史
早期把EE应用于新闻推荐系统的文章主要关注在雅虎的今日新闻Today Module这一产品上这也基本上是EE最早在互联网应用的尝试目的是为了优化点击率CTR。而更早的一些奠基性的文章则是在广告的数据集上展示实验结果。
雅虎的今日新闻其实为EE提供了一些被很多学者和工业界人士忽视了的条件和成功因素。如果不考虑这些因素鲁莽地在其他场景中使用这些文献中相似的算法很可能会产生相当差的效果。那么是哪些因素呢主要有两点。
1. **相对少量的优质资源**。今日新闻每天的内容池Content Pool其实并不大。这里面都是网站编辑精选了的大概100篇文章。这些文章原本的质量就非常高无论是这里面的任何一组用户体验都没有明显变差。内容池每天都人为更换。
2. **非常大的用户量**。有亿万级的用户最终可能是从算法随机产生的文章排序中选择了阅读的文章。因为用户数量巨大所以算法就相对比较容易收敛Converge到稳定的方案也就是前面讲的优化CTR的状态。
正因为有了以上两个因素在这个模块上工程师和科学家们享受了后来学者们所无法想象的“奢侈”比如运行Epsilon-Greedy这种简单粗暴的EE算法甚至是完全随机显示新闻收集到了大量无偏Unbiased的数据都为很多学术工作奠定了数据基础。时至今日依然有不少后续学者在今日新闻随机数据的基础上进行算法改进。
如果没有了这两条因素最早的解决方案可能都没法在当时的雅虎施行。原因很简单如果资源良莠不齐资源数量非常大那么在仅有的几个展示位置优质资源显示的可能性在短期内就会比较小因为系统对于大多数的资源还有很高的不确定性需要Explore
由于优质资源显示得少了用户就会明显感受到体验下降最直接的可能就是倾向于不点击甚至放弃使用产品。用户不和系统交互这样的行为又进一步减缓了系统学习资源不确定性的速度。这时也许亿万级用户数都没法满足学习所有资源的用户数量毕竟所有用户只有一部分会落入Exploration
关于这个解决方案有一个很有意思的点值得一提在雅虎的研究人员跳槽到了LinkedIn以后LinkedIn也推了相似的方案。为了模拟雅虎今日新闻的这些条件就对用户内容流里的数据进行了大规模的过滤。这样就有少数的信息符合高质量的要求并且能够在用户数允许的情况下探索到合适的解决方案。
## EE的产品部署难点
我们来讲一下EE的产品部署难点这些难点普遍高于具体的EE算法选择比如选某一个UCB或者某一个Thompson Sampling在产品工程解决方案上的抉择。
为了便于讨论我们把所有EE算法整体叫作“Random”简称“**R算法**”而把不做EE的算法叫作“Deterministic”简称“**D算法**”。这里面的假设是D算法比较静态能够产生高质量、一致性的内容。这里的一致性是指用户在短时间内的体验比较稳定不会有大幅度的界面和内容变化。相反整体来说R算法的不确定性比较大用户体验和产生的内容可能会有比较大的波动。
**第一个难点是如何上线测试**。这看上去不应该是难点但实际上需要格外小心。传统EE文献只是把问题抽象为每一次访问需要做一个决策的选择。然而文献却没有说这些访问是否来自同一个用户。
那么理论上EE应该对所有的访问不加区别不管其是否来自同一个用户。用我们这篇文章的术语来说就是所有的流量都做R算法。虽然从理论上讲这样没有问题但实际上用户体验会有很大的差别。特别是一些推荐网站用户希望自己前后两次对网站的访问保持一致性。如果不加区分地做R对于同一个用户来说很可能两次看见的内容完全迥异。这对用户熟悉产品界面寻找喜爱的内容会产生非常大的障碍。
那么我们对绝大部分用户做D对另外一小部分用户做R这样会好一些吗这其实就是“牺牲”少部分用户体验来换取绝大多数用户体验的一致性。这样实现也是最直观的因为很多在线系统的A/B测试系统是根据用户来进行逻辑分割的。也就是说某一部分用户会进入一个Bucket而另一批用户会进入另外一个Bucket。按用户来做D & R可以很容易和Bucket System一致起来方便部署。当然这样做也是有潜在风险的。那就是这部分老做R的用户在当了别人的小白鼠以后很可能永远放弃使用产品。
**另外一个难点就是如何平衡产品**。EE几乎是一定会导致用户对产品的体验下降至少是在短期内会这样。如何弥补这一点技术上其实比较困难。比如做过滤是一种思路那就是只在优质内容里探索。当然有人会说这样其实也没有多大的意义。然而一旦把质量的闸门打开了那就会对用户体验带来很大的影响。
这也是很多产品经理对于EE非常谨慎的原因能不做就不做。而且牺牲了用户体验后EE所带来的好处其实是很难评测的这主要是由线上产品的评测机制和评测原理决定的。目前还没有比较统一的解决方案。
如何能够做到“用户友好型”的EE呢这里面可以有两种思路。
**思路一不是所有人群的所有访问都适合做R**。和传统EE不同的是做“**反向EE**”。也就是说我们只针对常用产品的用户做探索而并不是针对新用户或者是还没有那么熟悉系统的人群。这个思路和EE完全相反但是更加人性化。
**思路二,夹带“私货”**。也就是更改EE的算法使得高质量的内容和低质量的内容能够相伴产生并且高质量的内容更有几率排在前面。这样用户体验的损失是可控的。
其实EE和产品的结合点应该是工程和研究的重点但遗憾的是碍于数据和其他方面的因素这方面的研究工作几乎没有。
## 小结
今天我为你讲了推荐系统的一个重要的问题就是如何持续挖掘用户可能的喜好也就是做EE。
一起来回顾下要点第一我们讲解了什么是EE第二我们介绍了EE的一些简要历史第三我们讨论了EE的部署难点。
最后给你留一个思考题EE策略是不是一定会导致用户看到多样不同的东西呢
欢迎你给我留言,和我一起讨论。