工业级推荐系统和学术研究中的推荐系统最大的一个区别,也是最容易忽视的一个区别在于,前者往往是某个产品中的一个环节,甚至有时候是一个很小的环节。一个产品往往有很多环节,而这些环节构成了一个复杂的生态系统。更进一步来说,某个公司之间的多个产品可以进一步构成更加高级的复杂生态系统。所以,理解工业级推荐系统就必须把推荐系统放回其所在的整体生态系统来进行审视和研究。
传统学术研究中的推荐系统往往基于一个虚构的理想环境。那就是有一个物品的候选池(可以是新闻、电影、或者是商品等),而用户针对这个侯选池中的物品进行逐一评分,分数由低到高,可以是五分制,也可以是两分制,表达喜好程度。推荐系统的任务被抽象成为对用户评分(Rating)信息的预测或者是估计。一个完美的推荐系统就是毫无偏差得对所有的用户评分进行还原和预测。熟悉的读者可以发现,这个理想环境其实就是对推荐系统研究有着巨大推动作用的——Netflix大奖赛中任务场景更加抽象的一个版本。的确,把推荐系统抽象成用户评分信息预估极大得简化了推荐系统在实际产品中的作用,为十多年来推荐系统研究的蓬勃发展带来了有力的支持。一个更加抽象的任务描述则把评分预估看成是不完全信息的“矩阵完成”(Matrix Completion)。也就是说评分预估可以看做是一个以用户为行物品为列的矩阵中有一些信息不完整。我们只有某一些单元中有数值,代表已经打过分的用户与物品的的交互。剩下有大量的单元需要来补全信息。这种“矩阵完成”的任务描述则更进一步得把推荐系统的任务变成了数学中的代数问题。
实际上,研究人员和实践工作者很快意识到了把推荐系统研究如此简化带来的一个直接问题,那就是推荐系统性能的提高,或者说是对用户评分预测的精准与否,与我们期望推荐系统所承载的功能有不小的偏差。早在Netflix大奖赛之后,Netflix官方工程博客就阐述了为什么团队最终没有采纳获奖的算法在产品中,并且因为种种原因,包括隐私和法律风险,Netflix最终放弃了举行第二届大奖赛的想法。对于Netflix这个产品群来说,真正的产品需求是希望用户能够喜欢其服务所带来的电影电视以及广泛的节目,从而让用户能够选择订阅Netflix服务,或者持续订阅。也就是说,Netflix所有产品,包括上面林林种种的搜索推荐功能都是为这同一目的而服务的。单一模块的好坏甚至是某个模块上面用户对于某一个节目的评分可能与这个用户是否选择继续订阅Netflix没有明显的联系。
这种推荐模块仅仅是一个更大产品中的一个环节,并且更大产品的目标和推荐系统的目标完全不一样的情况不仅仅局限于Netflix。例如电商Amazon,虽然网站上有各种不同的页面和模块,但归结起来,总的目的还是希望能够吸引用户购买商品。例如专注构建职业社交圈的LinkedIn,网站上有丰富的各种模块和服务,但归根结底,LinkedIn是希望用户最终能够订阅其中的一些服务或者是成为其广告的点击者,为其服务产生商业价值。例如在线音乐和广播节目服务商Spotify的最终目的是吸引用户持续订阅其服务。因此,Spotify上的种种栏目和推荐模块都是为这一共同的目标而服务的。
把单一推荐模块,和其他的模块页面放一起,都看做是达成产品最终目标的统一生态系统中的一个元素,是理解和开发工业级推荐系统的重要前提。
对于多页面多模块的生态系统而言,有这么两个重要的挑战。第一,产品的最终目的往往和某一个模块的成功有着复杂的关系,并没有完全线性的相互联系。换句话说,即便衡量大多数甚至每一个模块的指标有了正向或者负向的变化,整个产品的最终目标并不一定会有相同方向的变化。例如,对于Netflix来说,某一个模块的点击率的变化,可能对每一个月的订阅人数的变化并不起决定性的作用。第二,理解多个模块之间的关系变得很困难。例如,Amazon商品页面上的多个模块,按理说,其目的是为了吸引用户更加了解当前产品并且进行购买,但是如果一个模块展示了其他更加有吸引力的产品,用户可能会从当前页面跳转到其他页面去。更加复杂的场景包括用户可能因为看了过多的产品后举棋不定,从而不准备在当下进行购买。于是,商品页面上的某一个模块虽然可能有了更多的点击,但是其他模块可能会受到影响,点击下降,达到某种“此消彼长”的态势。
总而言之,把推荐系统放到整个生态系统中进行思考并且理解多个模块之间的关系是工业级推荐系统的重要挑战。