写点什么

基于网络购物场景的三种推荐系统原理

2016 年 9 月 08 日

在这篇文章中,我会简要概述推荐系统这个领域,并解释每个算法的工作原理。

首先明确一下推荐系统的定义。推荐系统是一种技术,主要应用在那些需要为用户(客户,访客,应用程序用户,读者)等进行物品(产品,电影,事件,文章)推荐的场景或相反的为物品推荐用户的场景。通常情况下,在这些场景中会存在非常多的物品和用户,解决这个问题将会变的非常困难而且需要付出很大的代价。想象一个商店的例子,聪明的商人知道顾客的个人喜好,那么店主高质量的建议,能在让顾客满意的同时自己也会增加利润。在网络营销和购物的场景中,上面所说的人为的推荐行为则被推荐系统这一“人造的商人”所代替。

要构建一个推荐系统,您需要一个物品和用户的数据集,以及理想的用户与物品的交互行为数据。有非常多的应用领域,典型的有用户代表顾客,物品代表产品,用户行为表示一次单独的购买行为。在这张图片中,用户代表信用卡持有者,物品代表信用卡终端,用户行为代表交易行为。用这个的数据集生成的规则可以显示用户如何与物品交互。在这种情况下,基于在捷克的信用卡交易规则可以用来将附近的商店推荐给用户进行参观。

基于知识的推荐系统

用户和物品都有一些属性。你越了解你的用户和物品,得到的推荐结果就会越好。下面,我举一个与推荐相关的物品属性的例子:

复制代码
Item: TV2305 {
"name": "Television TV2305",
"short description": "HD resolution LED TV",
"long description": " Enjoy a movie with your family on the weekend with
this HD television from Micromax. With an 81cm (32) display, you can view
every single detail with rich detail and clarity. This LED TV produces a
resolution of 1366 x 768 pixels with a refresh rate of 60Hz to display
crisper images and fluid picture movement. Play HD videos and enjoy a 178
degree viewing angle so that everyone in the family, even those at the
sides, can see. Connect HD devices such as BluRay players, PlayStations or
HD Set Top Boxes to this television as it has an HDMI port. You can also
connect an HDD or USB device to this TV via its USB port. Get a surround
sound effect in your living room as this TV comes with two 8W speakers to
deliver crisp sound across all your media. With a 5 band equalizer and an
auto volume leveler feature, you can enjoy a movie's soundtrack or the
latest hit single the way it was meant to be heard.",
"price": 250,
"categories": ["Electronics", "Televisions"]}

这样的属性是非常有用的,用在数据挖掘方法中可以提取基于规则和模式形式的知识,随后可以用在推荐系统中。例如,上面的物品是由几个可用来测量推荐项相似度的属性表示。即使是很长的文本说明也可以通过先进的自然语言处理工具进行处理。然后,根据物品的相似度产生推荐结果。在用户也可以通过类似的属性描述(例如,从求职者的简历中提取文本)的情况下,可以根据用户属性相似度生成推荐项。注意,在这种情况下,我们不使用用户的历史行为。因此,这种方法在被称为“冷启动”的用户和物品推荐场景中非常有效。这些通常都是新用户和新的物品。

基于内容的推荐系统

对于一个给定的用户,这样的系统推荐的物品是类似于那些他过去喜欢的物品,不会将其他用户的喜好考虑进来。基本上,有两种不同类型的反馈机制。

显式反馈是特意以“喜欢”/“不喜欢”可以点击按钮,以及可以代表喜好程度的星数等形式提供给用户。在很多场景中,很难获取到用户显式反馈的数据。在用户表达不感兴趣的形式上,通常可以将他 / 她点击一个物品“不喜欢”按钮替代为离开网页或切换到另一个电视频道上。

隐式反馈的数据,如“用户浏览过物品”,“用户完整的阅读了整篇文章”或者是“用户购买了一个物品”,这些都是非常容易搜集的数据并且能够帮助我们计算出好的推荐结果。不同类型隐式反馈数据可能包含:

  • 用户行为 (隐式反馈数据)
  • 用户浏览了一个物品
  • 用户浏览了一个物品的详细信息
  • 用户添加一个物品到购物车
  • 用户购买了一个物品
  • 用户把一篇文章从头读到尾

同样,在反馈的数据非常丰富的情况下,得到的推荐系统越能符合你的期望。

基于内容的推荐系统仅仅依赖给定用户的 de 历史行为数据,即并不会把其他用户的行为数据考虑进来。现行的方法是通过计算和用户最近访问过的物品的属性相似度,并推荐类似的物品。在这里,从我们的业务出发,我要指出一个有趣的现象,推荐最近的物品往往是非常成功的策略,当然这只是在某些领域和某些场景。

基于协同过滤规则的推荐系统

最后一组推荐算法是基于过去

的整个用户群体的行为数据。当一个“邻居”是准确定义并且行为数据是干净的,这些算法比以前的章节中描述的更为精确。

上面描述的是一个很简单并且很流行的近邻算法(K-NN)。构建一个用户推荐,需要对 K 个最近邻用户(同类最相似的用户)进行检查。然后,排名最高的 N 个额外的物品(当前用户没有对它们评过分),将会被推荐出来。

这种做法不仅面向主流的用户和受欢迎的物品,而且针对“长尾”用户的推荐效果也很好。在推荐的过程中,通过控制把多少邻居考虑进来,可以优化算法,并找到推荐的畅销物品和小众物品之间的平衡。良好的平衡对于推荐系统来说是至关重要的,这将在本文的第二部分中讨论的。

最近邻算法的实现主要两种不同的实现方法。那就是item-baseduser-based协同过滤算法。两种算法都是基于user-item矩阵(用户对物品的评分矩阵)。在user-based算法中,对于一个用户u,这个用户未评分的物品,它的得分可以通过综合类似于u的用户的评分信息计算出来。

item-based算法中,(ui)是通过看一组类似的物品(互动相似),然后一些类似于用户u访问过的物品组合而成并给出一个用户u对它们预测的评分。

item-base方法的优点在于物品相似性更加的稳定并且可以被高效的预先计算出来。

从我们的经验看,user-based的算法在大多数的场景和数据集下优于item-based算法。唯一的例外可能是数据集中物品数大大小于用户数或者是用户行为非常少。

K 近邻算法不仅可以解决协同过滤的问题。上面讨论的基于规则的算法采用 APRIORI 算法从用户行为矩阵中生成规则集。有足够支持度的规则随后就可以用来生成推荐的候选集。

K-NN 和基于规则的算法最重要的区别就是学习速度和召回。通常机器学习模型分为两个阶段。在训练阶段,建立模型,在召回阶段,模型被应用到新的数据集上。基于规则的算法在训练阶段需要付出很大的代价但是召回非常快。K-NN 算法刚好相反 - 因此被称为惰性学习者。在推荐系统中,很重要的一点就是需要经常更新模型(在每个用户与系统交互之后),并且可以立即应用到下一次的推荐请求中。而惰性的学习者很容易更新,基于规则的模型需要重新训练,在大型生产环境,这是特别具有挑战性的。

Recombee ,我们设计了一个以基于规则推荐为基础的改良版的惰性学习推荐算法,使我们能够实时输入用户行为,动态挖掘规则和实时更新模型。

用户与物品之间的交互行为产生的规则。

规则可以可视化,它是检查您的数据集中的数据质量和问题的一款非常好用的工具。该图显示了在行为矩阵中有足够支持度的规则。每个箭头都是一个规则(或暗示),有足够多的用户在与源物品进行交互完之后又与目标物品交互。连接的强度就是置信度

上面描述的规则的详细视图。每个规则由箭头表示。箭头的大小是规则的置信度。

这些特定的规则是由银行提供的信用卡交易数据产生的。物品是“信用卡终端”,用户是“信用卡持有人”。用户行为单次交易。我们忽略了标签,因为数据是保密的,很多可以来自规则。在第一张图片中,规则簇是非常明显的。很明显这些信用卡终端在地理位置上离的很近。有很多有趣的规则显示出用户的购物习惯。当你上传你的数据到我们的推荐引擎(直接或通过我们的 keboola APP ,这将会更快),我们可以为您生成规则,你可以在你自己的数据中发现很多有趣的规则。

然而上面提到的规则的首要目的并不是数据分析而是用来推荐。可以根据他们最近的交易,为每个信用卡持有者单独生成推荐结果(例如,从这个取款机取款的人通常会花在以下的商店)。银行可以利用这些推荐结果建立智能数据产品(例如,用户在推荐的商店购物,银行可以领取奖励)。这样的数据产品几乎无处不在。你有很好想法如何利用推荐数据驱动的数据产品来提升你的业务吗?告诉我们,我们将会帮助你评估。

最后,可能是这里描述的最有趣的一类协同过滤算法,称为因式分解的算法。以上,用户行为矩阵被分解成两个小矩阵(一个代表用户,一个代表物品的矩阵)和一定数量的协方差矩阵(通常几百个)。通过将这两个小矩阵相乘得到(ui)评分。有几种方法可以做矩阵分解并训练它们。上面所显示的是一个简单的梯度下降技术。通过随机梯度下降,交替最小二乘法或坐标下降算法误差可以被最小化。也有基于奇异值分解的方法,这种方法将排序矩阵分解为三个矩阵。

一般来说,这是非常有趣和成熟的机器学习领域。这里是一些进一步的阅读材料,如果你有兴趣: Facebook 用基于矩阵分解解决了推荐系统的扩展性,处理隐含的评分各种指标

正如你所看到的,有大量的算法并且每个算法都有参数来帮助我们找到模型良好的可塑性。我的将来会写一篇文章讨论组合的推荐模型,可以进一步提高推荐的质量。

如何评测推荐算法的好坏?这是另一个复杂的问题。

“不好的”的推荐结果一般来说是很难检测和预防。他们往往是特定于某个领域在推荐的时候必须被过滤掉

(点击放大图像)

离线评估推荐算法展示了基于ALS 矩阵分解是如何胜过基于用户的K-NN 算法的。详情见下一篇文章。

推荐系统的评测

(点击放大图像)

在线评估质量和优化推荐效果。详情在下一篇文章。

有几个如何离线和在线的评价推荐系统的策略。在 Recombee ,准确的质量评估帮助我们自动优化系统参数,在所有的推荐场景的推荐系统的效果均得到提升。

你可以为自己的数据找出哪些组合的算法是最有效的。因此我们准备了一个免费的即时帐户,这样你可以使用我们的 API 客户端做实验了。

查看英文原文: Recommender systems explained


感谢杜小芳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016 年 9 月 08 日 17:169464

评论

发布
暂无评论
  • Embedding 实战:如何使用 Spark 生成 Item2vec 和 Graph Embedding?

    今天,我就带你在Spark平台上,完成Item2vec和Graph Embedding的训练。

    2020 年 10 月 19 日

  • Facebook 是怎么为十亿人互相推荐好友的

    在实际应用中,交替最小二乘更常用一些,这也是社交巨头 Facebook 在他们的推荐系统中选择的主要矩阵分解方法。

    2018 年 3 月 28 日

  • 推荐算法综述(四)

    近年来社交媒体已经越来越流行,可以从中获得大量丰富多彩的信息的同时,也给我们带来了严重的“信息过载”问题。推荐系统作为缓解信息过载的最有效方法之一,在社交媒体中的作用日趋重要。区别于传统的推荐方法,社交媒体中包含大量的用户产生内容,因此在社交媒体中,通过结合传统的个性化的推荐方法,集成各类新的数据、元数据和清晰的用户关系,产生了各种新的推荐技术。本文总结了推荐系统中的几个关键研究领域,进行综述介绍。本文是推荐算法综述的第四部分。第一部分主要介绍了推荐算法的主要类型。第二部分,主要涵盖了不同类型的协同过滤算法,突出他们之间的一些细微差别。第三部分详细介绍了基于内容的过滤算法。在本文中,我们将介绍混合引荐技术,它是建立在我们前面介绍过的算法之上的。我们也将简要讨论针对协同过滤算法和基于内容的过滤方法中存在的不足,可以如何通过融入item的流行度来缓解这些局限性。

  • 推荐算法综述(三)

    近年来社交媒体已经越来越流行,可以从中获得大量丰富多彩的信息的同时,也给我们带来了严重的“信息过载”问题。推荐系统作为缓解信息过载的最有效方法之一,在社交媒体中的作用日趋重要。区别于传统的推荐方法,社交媒体中包含大量的用户产生内容,因此在社交媒体中,通过结合传统的个性化的推荐方法,集成各类新的数据、元数据和清晰的用户关系,产生了各种新的推荐技术。本文总结了推荐系统中的几个关键研究领域,进行综述介绍。这是推荐算法综述的第三部分。第一部分主要介绍了推荐算法的主要类型。第二部分,主要涵盖了不同类型的协同过滤算法,突出他们之间的一些细微差别。在本文中,主要详细介绍基于内容的过滤算法的工作原理,以及它的优点和缺点,从而让读者对其有更深的理解。

  • 推荐系统(上):如何实现基于相似度的协同过滤?

    今天我通过一个常用的实验数据,设计并实现最简单的基于用户的协同过滤。

    2019 年 4 月 8 日

  • 构建生产可用的推荐系统需要注意哪些问题?

    虽然经历了几十年的研究和发展,推荐系统已经成了各种现代网络应用中不可或缺的组成部分,但是推荐系统的研究和应用仍然面临着很多重要而急迫的挑战,推荐系统的应用形式和场景也蕴含着更多的可能。

  • 简单却有效的 Bandit 算法

    Bandit 算法把每个用户看成一个多变的环境,待推荐的物品就如同赌场里老虎机的摇臂……

    2018 年 4 月 9 日

  • 典型的信息流架构是什么样的

    从今天起,我们不再单独介绍推荐算法的原理,而是开始进入一个新的模块——工程篇。

    2018 年 4 月 27 日

  • 推荐算法综述(二)

    推荐系统在各种系统中广泛使用,推荐算法则是其中最核心的技术点,InfoQ接下来将会策划系列文章来为读者深入介绍。推荐算法综述分文五个部分,本文我们将会详细介绍这些算法的区别,让你能够深入理解他们的工作原理。

  • 标签个性化数据在推荐排序中的应用

    本文share的这个项目,是我们在个性化推荐上的一个小小的尝试。通过捕捉用户实时的标签快速捕捉用户兴趣变化,用机器学习算法挖掘用户兴趣与实际消费行为的联系,及时调整推荐排序,提高推荐效果。

  • 主流推荐引擎技术及优缺点分析

    本文详细介绍多种类型的推荐系统,并分析介绍每种推荐系统的优缺点。

  • 博客推荐系统: 基于内容相似性的推荐 ( 第二部分)

    本文是博客推荐系统系列文章的第二篇。主要介绍了度量推荐结果相似度的两种方法,包括欧几里德距离和余弦相似法。还详细介绍了计算博客相似度时对博客文章向量化的三个步骤:分词、词频统计、加权。直接在这个向量化后的高维度空间中进行推荐效果不一定是最优的,通过使用SVD或PCA降维算法可以得到更好的推荐效果。文章的最后给出了推荐系统的实际运行效果的例子。

  • 推荐算法综述(五)

    近年来社交媒体已经越来越流行,可以从中获得大量丰富多彩的信息的同时,也给我们带来了严重的“信息过载”问题。推荐系统作为缓解信息过载的最有效方法之一,在社交媒体中的作用日趋重要。区别于传统的推荐方法,社交媒体中包含大量的用户产生内容,因此在社交媒体中,通过结合传统的个性化的推荐方法,集成各类新的数据、元数据和清晰的用户关系,产生了各种新的推荐技术。本文总结了推荐系统中的几个关键研究领域,进行综述介绍。本文是推荐算法综述的最后一部分。第一部分主要介绍了推荐算法的主要类型。第二部分,主要涵盖了不同类型的协同过滤算法,突出他们之间的一些细微差别。第三部分详细介绍了基于内容的过滤算法。第四部分主要介绍了混合引荐技术和基于流行度的推荐方法。在这篇文章中,我们在回顾了所有基本的推荐算法之后,介绍了如何选择最合适的推荐算法。

  • 阿里飞猪主题与交互式推荐技术实践

    在飞猪推荐场景中,除了对单一商品的推荐外,还包括对以主题形式组织的商品集合的推荐。

  • 微软专家眼中个性化推荐系统的 5 大研究趋势

    个性化推荐系统的未来会如何发展?

  • 美图个性化推荐的探索与实践

    互联网技术将我们带入了信息爆炸的时代,面对海量的信息,一方面用户难以迅速发现自己感兴趣的信息,另一方面长尾信息得不到曝光。

  • 社会化推荐在人人网的应用

    推荐引擎随着电子商务的蓬勃发展越来越受到业界的关注,再加上web2.0的兴起,推荐引擎在SNS领域也越来越发挥出巨大的潜力。本文介绍了人人网社会化推荐框架,详述了推荐引擎如何帮助用户迅速建立自己的社交圈子,以及给用户提供优质和个性化的资讯和内容。

  • 如何发掘数据之间的关系?

    挖掘数据的典型应用场景有搜索排序、关联分析以及聚类,下面我们一个一个来看,希望通过今天的学习,你能够了解数据挖掘典型场景及其应用的算法。

    2019 年 1 月 24 日

  • 个性推荐理论与实践(上篇)

    本文主要讲述了针对于推荐系统的衡量算法效果与Word2Vec的尝试。

  • 基于行列式点过程的推荐多样性提升算法

    本文介绍基于行列式点过程的推荐多样性提升算法。

发现更多内容

卡丁车的后轴是如何做到差速的?

TGP大跨步

科普 卡丁车 TGP 大跨步 素材

哥尼斯堡七桥问题

InfoQ_aef2dd810f7f

IOTA架构下的数据采集

易观大数据

PM2 管理node.js开机自启动(非root用户)

openbytes

node.js

MySQL-长事务详解

Simon

MySQL mysql事务

【数据结构与算法】用动图解说数组、链表、跳表原理与实现

三钻

数组 链表 数据结构与算法 跳表

Spring-技术专题-Bean的生命周期简介

李浩宇/Alex

spring

因为套用这个模板,我成了公司最佳员工

华为云开发者社区

网站架构 华为云 网站搭建 匀速建站 SEO

LeetCode题解:66. 加一,倒序遍历+可中途退出,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

如何选择一台打印机

别把虾米不当海鲜

关于自增id 你可能还不知道

Simon

MySQL MySQL自增ID

90后程序员小姐姐在线征婚!年薪70w!拥有五套房!她却担心自己因为年龄大嫁不出去!

程序员生活志

程序员

[8.20]leetcode每日一题,

一起搞稽

算法 DFS

5. JsonFactory工厂而已,还蛮有料,这是我没想到的

YourBatman

Jackson Fastjson JSON库 JsonFactory

LeetCode题解:11. 盛最多水的容器,双循环暴力法,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

MySQL视图介绍

Simon

MySQL

揭秘MySQL主从数据不一致

Simon

MySQL 主从复制

PHP中的错误和异常

书旅

php 异常 常见错误

影响音视频延迟的关键因素(二): 采集、前处理、编解码

ZEGO即构

H264 API 3A算法

Linux Page Cache调优在Kafka中的应用

vivo互联网技术

大数据 kafka

他被称为"中国第一程序员",一人之力单挑微软!真牛!

程序员生活志

芯片破壁者(十三):台湾地区半导体的古史新证

脑极体

基于Ambari的大数据平台搭建

数据社

大数据 hadoop ambari

更改用户host留下的坑

Simon

MySQL

通过波士顿矩阵模型做产品定位

GuOjixIE

数据分析 产品定位 波士顿矩阵模型

暴雪员工抗议薪酬不公,部分员工称甚至难以维持生计

程序员生活志

职场

一行错误代码:5 亿美元没了。。。项目关闭。。。

程序员生活志

市值管理量化机器人,做市机器人,自动刷单机器人

WX13823153201

比特币 数字货币

史上最强DIY,手工制作一只会说话的机器狗

华为云开发者社区

聊天机器人 nlp 华为云 语言识别 语言合成

设计模式-技术专题-建造者模式(Builder)

李浩宇/Alex

Java 设计模式

性能优化-技术专题-top和jstack分析高CPU问题

李浩宇/Alex

JVM

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

基于网络购物场景的三种推荐系统原理-InfoQ