无论是在淘宝购物、在饿了么点外卖,还是在网易云音乐听歌、在抖音刷小视频,甚至是在招聘网站求职,我们总是避不开一个词语:猜你喜欢。

有时候,它叫「每日推荐」;有时候,它成了「综合排序」中的组成部分;有时候,它可能明确称为「广告」;也有时候,它就是你的列表中普通、平凡、毫无标识的一项;还有时候,它是通知栏推送过来的一条小提示。

今日头条和微博会直接把你最关心的新闻推送到你的时间流,让你不再需要从每天的报纸中翻找;淘宝和京东在你搜索商品后直接推荐给你最适合的价位、品牌,大大降低了购物的门槛;下午闲暇时光,豆瓣给你推送了书和电影,再和着网易云推送的几首小歌——科技给我们带来了慵懒的快乐,将选择强迫症们解放出来,真是令人心醉。

这样的推荐是如何做出的?为什么它们能够知道我所喜欢?以听歌为例,我们来尝试着设计一个最基础的推荐系统,为我们的听歌人兰兰推荐几首她可能喜欢的歌。

偏好收集

显式的偏好收集

巧妇难为无米之炊,如果没有对兰兰的基础认识,那么给她推荐歌曲就是盲人摸象、大海捞针。于是我们在歌曲推荐的伊始,就试着向兰兰提出几个问题:

  • 你是男生还是女生?
  • 你在哪个城市?
  • 你比较喜欢听下述哪几种音乐类型?
  • 你喜欢下面哪几首歌?

这些问题,有的比较直白,有的相对隐晦,但都是为了分析兰兰可能的喜好。这种直接的问询,可以称为「显式的偏好收集」。

隐式的偏好收集

相对的,当我们根据隐私政策,记录下兰兰在听歌过程中的操作:

  • 快速地切换下一首
  • 听完了整首歌曲
  • 手动点击「喜爱」
  • 分享给了微信朋友

这些行为被我们转译成兰兰对这首歌的喜好程度,从而完善了兰兰的听歌兴趣。相应的,我们把这个过程称为「隐式的偏好收集」。

两种方式各有利弊。显式的方式需要兰兰手动填写,兰兰会嫌麻烦,而且打扰了她听歌的心情,但是体现了兰兰自己的想法,更加准确、快速。而隐式的方式会自动收集数据,但是过度跟踪可能让兰兰比较反感,分析也容易产生比较大的噪音。

基于内容的推荐

现在,我们可以尝试给兰兰推荐音乐了。

基于内容的推荐策略十分简洁。我们假定已经对音乐库中的每一首歌充分解析,并给每一首歌打上了标签。那么,当兰兰听了一首歌,并对它表现出极大的兴趣,我们就从音乐库中寻找和这首歌标签相似的其他歌曲,推荐给兰兰。

举个例子,如果兰兰听了一首《两只老虎》,还加入了收藏夹。我们的系统记录下了这样一条:

  • 兰兰喜欢听「儿歌」

于是,我们继续为她推送其他包含「儿歌」标签的歌曲,例如《小星星》。

整个过程完全依赖于歌曲之间的相似度,以及兰兰的偏好和歌曲之间的匹配程度。这还远远不够。

协同过滤

基于听歌人的协同过滤

为了给兰兰推荐更多好听的歌,我们又邀请了两个听歌人,小明和小玲。

这一次,小明、小玲、兰兰分别在自己的房里听歌。在听完《星星点灯》、《给自己的歌》之后,小明和兰兰都对这两首歌十分喜欢,而小玲却丝毫不感兴趣。那么,我们的系统记录下了这样一条:

  • 小明和兰兰的听歌兴趣相似

我们挖了挖小明以前听过的歌,发现他也很喜欢《南方姑娘》。既然我们的系统认为小明和兰兰的爱好相近,于是我们尝试给兰兰推荐了这首《南方姑娘》。

因为这种方式是对听歌人进行分析,所以我们不妨把它称为「基于听歌人的协同过滤」。

基于歌曲的协同过滤

我们继续邀请其他听歌人进来为我们提供兴趣数据。这次,我们邀请到了小红和小白。

我们依然让他们各自在房里听歌。听了《梦醒时分》和《大海》之后,小红、小白不约而同地对它们表现出了极大的喜爱。这一次,我们的系统是这样记录的:

  • 《梦醒时分》和《大海》具有相似的听众

当我们惊喜地发现兰兰也喜欢《梦醒时分》的时候,我们觉得她很可能也喜欢《大海》,于是就为她推送了这首歌。

这种方式的分析对象从听歌人换成了歌曲本身,我们可以称之为「基于歌曲的协同过滤」。

非个性化的推荐

前面介绍的几种方式,都可以使得每个人收到的歌单各不相同,称为「个性化推荐」。最后,我们还需要加入一些非个性化的推荐技术,来让我们的推荐系统更加实用。

我们首先加入「新歌榜」,这是对「新增内容」的一种优先策略。由于新歌刚刚加入曲库,数据还不足以支撑起推荐给大量听歌人,对新歌的优先策略可以给它们提供一定的冷启动过程。

我们还要加入「热歌榜」,这是对「热点内容」的优先策略。一首歌之所以会成为热门歌曲,大概就是符合大部分人的审美。虽然许多人通过个性化推荐的策略并没有匹配到这首歌,但是既然符合大部分人的审美,说不定他们也会喜欢这首热门歌曲,不妨一试。

这些个性化或者非个性化的推荐分别得到了一系列歌单,将它们按一定比例交替出现,亦或在不同的区域中分别展示,就成了我们为听歌人们推荐各自推荐的「猜你喜欢」啦。

 

 

10
2