您刚刚看完《毒枭》第二季,正要陷入追剧后的低落情绪时,Netflix 弹出了一个推荐。“因为您喜欢《毒枭》,所以您应该观看《El Patron De Mal》。”
不仅仅是 Netflix。 《纽约时报》也在这样做,亚马逊也在这样做,谷歌也在这样做,甚至您十几岁的孩子申请的学校也有推荐。
应用程序每天都变得越来越智能,而且它们依靠非常聪明的开发人员和技术来提取洞察力以做出这些推荐,这已不是什么秘密。 什么能造就有效的推荐? 一些您可能会采取行动的事情!
您如何获得这样的推荐? 虽然有很多算法可以处理数百个不同的变量来为您找到周日上午要阅读的正确文章,但也有些非常简单的算法。 具有相同特征(地理位置、人口统计、过去的偏好、过去的厌恶)的人可以构成丰富的潜在推荐者资源。 一些非常简单的方法包括简单的比较。 计算哪些用户与您最相似,哪些用户以与您相同的顺序执行了操作,哪些商品他们喜欢但您尚未看过,这为我们提供了一个非常简单的途径来为您生成下一组推荐。
在开发人员术语中,实现比较可以通过多种不同的方式完成 - 但是,当您可以使用具有内置集合操作的数据库来为您完成时,为什么还要费力编写复杂的代码来执行这些比较呢?
Redis 是世界上为数不多的具有复杂集合操作的数据库之一。 Redis 排序集合备受喜爱、功能强大并且擅长解决各种问题。 内置集合操作适用于许多事情,例如时间序列数据、投标管理、评分、排名等。它们也是实现推荐算法的一种非常简单的方法。
从概念上讲,它非常简单——您有成百上千的用户——要找到最相似的用户,您需要比较用户。 简单的集合交集操作将让您找到对同一项目进行评级的用户,简单的集合并集操作可以找到对一组项目进行评级的所有用户。 根据对常见项目进行类似评级的用户,您可以生成相似度分数,并根据此分数(使用 ZRANGE 等排序集合操作按分数范围提取最相似的用户),您可以找到与目标用户最相似的用户。 执行类似步骤来查找他们评价较高但您的当前用户尚未购买/看到的项目,这将为您提供向用户提出的最佳推荐!
Redis 排序集合的酷之处在于,它们会自动且在内存中维护每个成员的按分数排序的视图。 将此与集合操作相结合,可以实现闪电般的快速检索时间,这意味着您可以付出很少的努力来实现一个简单、极其高性能的推荐引擎。 我们确实做到了这一点! 我们最近发布(在 github 上)了用 Go 编写并使用 Redis 的简单推荐引擎的代码。 该引擎的另一个优点是它很容易扩展。 它仅使用用户分数作为计算相似度的标准来实现,但也很容易添加位置、人口统计和其他特征! 本白皮书介绍了它的工作原理——所以请下载它以及代码!