本文由 「AI前线」原创,原文连接: 在线购买率转化高达60%,Amazon推荐系统是如何作到的?
做者 | 袁源
编辑 | Vincent
AI 前线导读:根据美国财富杂志的报道, Amazon 的销售额高速增加,得益于它将系统整合进用户购买, 从产品发现到付款的整个流程。根据华尔街分析师的估计, Amazon 的在线推荐系统的购买转化率高达 60%。 那么 Amazon 推荐系统的成功秘诀在哪儿呢,让咱们为您揭开其神秘面纱。程序员
声明 | 本文整理自 AI 前线 2018 年 3 月 1 日直播分享,未经许可不得转载!算法
你们好!很高兴今天有机会跟你们一块儿分享个性化的智能推荐系统。数据库
我先自我介绍一下,我叫袁源,2011 年得到博士学位,曾经在亚马逊工做有两年半的时间。在这些工做中,我有一些经验能够给你们分享,因此趁今天这个机会跟你们聊一聊。网络
时间有限,我可能会讲的比较抽象,若是你们但愿了解具体的内容,能够扫咱们的二维码,来咱们贪心科技的网络课程,在里面我会把今天讲的每个算法用最详细的语言和最清晰的、最有条理的方式给你们讲解,而且每一种算法我都会用 Python 写好代码分享给你们,因此说你们不但可以从理论上学到一个算法、可以理解它,而且可以看到这个算法怎么实现的。我在实现算法的时候,会尽可能不用任何第三方的库,我尽可能不用那些已经打包好的,可能不少现成的人工智能的库是 C++ 写的,而且为了效率可能用上了 GPU。我会用最纯粹的 Python 写,这样的话,你们就能够看到很详细的每个步骤是怎么实现的。架构
若是你们有兴趣,知道详细内容的能够继续扫咱们二维码,到咱们贪心科技的网站上了解更多细节。分布式
weixin.qq.com/r/eCqPl5XE6… (二维码自动识别)ide
今天和我一块儿和你们分享的还有咱们的 CEO,李文哲,文哲如今你能够给你们打个招呼吗?oop
李文哲:你们好,我叫李文哲,我目前是贪心科技的 CEO 也是创始人。我以前也是在美国读人工智能博士的,我以前是在 USC。在国内多家企业也作过首席科学家,因此我对整个的 AI 领域仍是比较熟悉的。学习
我建立这样的一家公司是但愿把这种 AI 的技术还有 AI 的知识普及起来,让国内的不少人能够去学习,而后在实战中可以用起来,今天咱们也很高兴邀请到了 Jerry 老师来分享推荐系统这样的一个课题,但愿你们在今天的课程当中学到一些知识。若是有任何问题,咱们能够一块儿讨论,也能够给我提问,到课程结束以后,咱们一块儿在论坛里面再互动一下。接下来咱们就把时间给 Jerry 老师。测试
袁源:那咱们如今正式开始咱们今天的分享。
我今天的主要内容以下:
首先我给你们介绍一下推荐系统的概述,它表明什么,有哪些具体的推荐系统实现咱们能够借鉴;
第二是我给你们推荐一下经常使用的推荐算法,若是你本身正要作一个系统的话,你能够从这些最经常使用的算法开始尝试;
而后我想强调一下你们可能不过重视的一点,就是如何评价一个推荐系统?只有你创建一个比较好的评价标准,你才有办法不断的改进你的算法,让你的系统运行的愈来愈好;
最后,我会介绍一下如今已经存在的一些推荐系统它们通常会怎么来架构的,以及如何从软件系统上来描述它。
推荐系统概述
首先什么是推荐系统?
咱们要先定义一下,咱们今天到底讲什么。
推荐系统其实就是一种信息处理的系统,用来预测一个用户对某个东西是否是很喜欢,若是喜欢的话,喜欢的程度是什么样的,是很是喜欢,仍是通常般喜欢,仍是一点都不喜欢。推荐系统用的领域确定不少,我举一些例子:如今的今日头条给用户推荐个性化的新闻;优酷土豆 YouTube 给用户推荐视频;虾米音乐给用户推荐喜欢的音乐,固然还有淘宝、京东商城推荐图书、食品、衣服还有其余各类商品。除此以外在社交网络里面 Twitter、Facebook,还有像新浪微博,都会给用户推荐朋友。
固然,推荐的方式也是用推荐系统来实现的。如今金融很火,若是你在作金融类的产品,确定但愿作 P2P 金融给你的客户推荐股票、基金理财、基金证券和理财产品。固然单身狗们不要忘了在婚恋市场里面的各类相亲网站里面,也会给单身的朋友推荐合适的另外一半,一样是用的推荐系统。
因此说咱们能够看到推荐系统如今已经成为不少网站、手机 APP 不可获缺的一部分。这些 APP 和网站依靠推荐系统来提升销量,吸引用户注意力,提升用户活跃度和吸引新的用户。
由于我曾经在亚马逊工做,咱们来看一个具体的一个公司它是怎么使用推荐系统的。
我如今显示的是 Google felines 里亚马逊的股价,能够看到,它最近简直像发射火箭同样,股价一直上涨的很是厉害。从 2015 年大概 300 美圆一股,如今涨到了 1500 美圆一股。
那它这么成功它靠的是什么?咱们看看美国著名的《财富》杂志是怎么价值它的:它说亚马逊的成功取决于它把它的推荐系统放到了从产品发现,到产品购买的整个过程。
财富杂志还提到说,亚马逊的推荐系统在进行推荐之后,用户购买率、转化率会达到 60% 的程度。
那咱们来具体看一下亚马逊都使用了哪些推荐呢?
若是你登陆到亚马逊网站上,第一个你会看到,它会按照不一样的产品类别进行推荐,好比说左上角,它推荐给当前登陆的 taomas 这个用户,给他推荐健身器材,左下角又推荐咖啡和茶,还有其余的图书,这是第一个:按照类别给每一个人推荐。
第二个是常常购买的商品。
假设一个用户如今购买了左边的这一个训练机构的这个健身棒,它就会推荐你买右边的这个橘黄色的这个健身的按摩球,为何呢?这两个东西根据它们的历史显示常常被人一块儿购买,这也是个经典的案例,你们可能会知道 MBA 里面的一个经典案例:研究人员发现,超市应该把婴儿尿布和啤酒放在相邻处,由于不少父亲去买婴儿尿布,同时看到旁边有啤酒,就会一块儿购买,这也是采用样的策略。
第三,亚马逊推荐的方式是按照你最近的历史推荐。
你最近看了什么?我最近看了健身用的健身棒,因此推荐的一堆用来健身相关的物品。
第四是什么?不是推荐你曾经没看过的,而是告诉你今天看了什么、前几天看了什么、某月某日看了什么,把你曾经看过,可是并无下单的东西再给你看一遍,也许你就有下单的冲动了。
第五是什么呢?也是按照你的浏览历史给你推荐,不是按照你如今的浏览历史,好比我最近看的是健身器材,可是给我推荐的第二个商品是沙丁鱼,他是按照我曾经久远的历史来给我推荐的。
还有第六种推荐,就是按照其余跟你购物习惯相同的用户推荐,好比他和我买了一样商品,他接下来又买了什么,根据其余跟我买相同商品的用户购买的物品的推荐。
第七是,系统知道个人购买历史,知道我曾经买了一个 kindle,而后告诉我说,如今 kindle 出了新版本,那我会不会想要购买,这是根据用户的购买历史推荐同一个商品新版本。
还有第八,它根据个人购买历史推荐周边产品。系统知道我买了 kindle,他就推荐我说你要不要其余周边产品,好比保护套。
第九,就跟我我的购买历史和我我的的浏览历史无关的,而是根据在亚马逊网站上卖的比较好的那些商品进行推荐。
除了登录网站,系统会给你推荐以外,它还会主动进行推荐。在美国你们用邮件用的比较多,都是用邮件来登录的,因此说亚马逊知道美国用户的邮件,就会给用户发邮件进行推荐。
好比说这个例子:我最近看了一下佳能的数码照相机,它就会给我发邮件,给我推荐佳能最近卖的比较好的照相机给我。
若是我无动于衷,它又会有推荐:佳能的你可能不感兴趣,推荐柯达的数码相机给你看你会不会感兴趣?这就是跟我曾经浏览类似的东西,可是呢,只是局限于柯达这个品牌。
若是我还无动于衷,他还会给我发邮件说,你看佳能的相机,这里有一个便宜的一个套件,包括相机的壳子、包括记忆卡,一块儿买会比较便宜,你会不会感兴趣?推荐系统会按照你曾经浏览的物品推荐周边产品,作一套件给用户购买。
最后,若是用户还无动于衷,它还会给你推荐,好比直接告诉你,卖得最好的数码相机是什么。除了我曾经本身看的佳能,还有索尼的,这就是它给我推荐的东西。
我每种推荐的算法标了一个数字,到这里一共是 13 种,也就是说:简简单单的一个购物网站,仅对每件商品的,就用了 13 种不一样的推荐策略。
咱们高屋建瓴来看一下,各类推荐到底背后的算法是什么呢?
若是咱们把推荐系统来分类的话,其实咱们每一个人都接触到推荐系统,这是一个很原始的技术。
早期的门户网站,好比说新浪、雅虎,还有人民日报也是有推荐系统的,只不过里面的内容是网站编辑,或者是报社的编辑帮读者手工选择的,它也是一种推荐,只不过是手工生成的推荐。
第二类推荐,是一些简单的聚合系统。好比说你去 KTV,点唱面板上就会有 KTV 的最近点唱的排行榜,若是你去书店就有畅销书排行榜,去买电影票,猫眼电影之类的系统也会告诉你热卖电影是什么;包括豆瓣里面会有电影票房排行榜。
还有按照物品的时间顺序,按照时间性质给用户推荐,好比说新上架的物品优先推荐。
这些推荐系统只是基于最简单的统计来进行推荐,他们虽说看起来方式很简单,但不少时候颇有效。
最后一个就是咱们关注的重点,就是真正个性化的千人千面的推荐系统。
不管是第一种,仍是第二种,你会看出来不管是人工生成的推荐系统,仍是简单的聚合,它 都不是针对我的的。每一个人打开人民日报看到的是同样的内容,每一个人去 KTV 里面点歌看到的排行榜是同样的。那咱们如今最关心的就是千人千面的推荐系统,好比说每一个人打开 Amazon 主页,每一个人打开 Netflix 他会看到这些商品,或者电影的推荐是不同的,那这就是咱们今天想要关注的重点。
若是咱们从数学上来抽象一个推荐系统,应该从理论上来看是个什么样的?有什么样的要素、要解决什么样的问题呢?
首先咱们用 U 表明全部用户的集合,咱们有一堆的用户,而后咱们用 S 表明全部物品的集合,好比说我有一堆用户,我有一堆东西,这些东西多是电影,多是音乐,多是人,多是其余的物品。个人推荐系统模型也就是说:U×S,推荐出来 R,这个乘积在这里表示笛卡尔积。意思就是说:每一个用户和每一个物品我给它一个 R,这个 R 的值就是推荐值,就是说每个用户对一个物品他的喜好程度是多少,不少的网站会有,让你打分就是一到五颗星星这种方式来表达,也有像 Facebook 用点赞的方式,或者是鄙视这种方式来表达,这就是 R 表明的值,推荐系统说到底也就是一堆用户对于一堆物品的喜欢的程度的值。
举一个你们都能明白的实例:假设我有小明、小李,韩美美和小静这四我的。有四个电影做为个人物品:《大话西游》、《夏洛特烦恼》、《黄飞鸿》、《笑傲江湖》。那我能掌握的数据、可以收集到的作推荐系统的数据是哪些呢?
首先是推荐值里面记录了每一行是每一个用户对于各个物品的喜爱程度。好比:小李对于《夏洛特烦恼》喜欢程度是 2,对《黄飞鸿》喜爱程度是 5。
在这个推荐矩阵里,你会看到有的人数值是已知的,有的是未知的,好比说小明对《大话西游》他的喜爱程度是什么呢?咱们不知道,这就是咱们想要的,一样也是推荐系统的一个关键问题:咱们怎么从咱们这些已知的这些推荐值推导出这些未知的值? 好比小明对《大话西游》的喜爱程度,除此以外咱们还能获取哪些数据呢?固然咱们获取用户的数据,每一个用户有性别、年龄和其余的属性,这些是咱们能够得到的;还有物品的属性,好比咱们能轻易的获取这个电影的类别,是武侠仍是文艺片,仍是喜剧,这也是后续另一些物品的属性。
有这三个矩阵,这些值就是咱们能够利用的值,而后咱们要解决的问题就是利用这些获取的数据推导那些位置的值,好比小明对《大话西游》的喜爱程度。
我强调一下推荐系统要解决的关键问题:
第一是 收集数据。推荐系统本质上说,固然是一种人工智能系统,人工智能系统须要 Training,须要训练,它固然须要训练数据了,因此说收集数据很是重要。我以为有一点要注意:收集数据不是一蹴而就的,须要常常更新的,数据有时效性的。好比说一我的对一个东西的喜爱程度是随着时间变化而变化的,每个人童年喜欢的书籍电影在成年后可能就不喜欢了;可能你去年喜欢的东西和今年就不同,也许你的兴趣爱好变了。还有好比说一个用户他如今小孩出生了,他可能关注更多的婴儿物品,好比说尿不湿,因此说收集数据很重要,并且收集数据是常常须要更新的。
第二,推荐系统要解决的关键问题固然就是如何预测那些未知的数据;
第三个就是 怎么创建评价系统。只有创建一个评价系统,才能知道如今个人推荐系统到底好很差,若是很差,咱们调整,怎么调整算是好?
收集数据
收集数据有一种方式,是显示收集,就是直接让用户打分,或者是点赞,或者让用户留言评价。这有一个很大的问题,就是不少用户不肯意,或者懒得点赞、写评论,或者是打分。好比说我本身,好比我在 YouTube 上看了不少视频,我历来没有给他们点过赞,或者是写过评价说:“很是不错”或者是“很讨厌”,我历来不评价,我相信不少人会这样子。
在没有办法收集数据的状况下,有没有其余方式来收集呢?这就是愈来愈多的 隐性收集 数据,那怎么隐性收集呢?好比说一个视频网站,若是一个用户看了一部电影,过了一段时间发现他又在看那部电影,表示他很喜欢这个电影;若是他在观影时一直快进,或者中途就跳开了,那就说明他不喜欢,这就是隐性收集的一个策略。
购物网站就更简单,若是一个用户买了某个东西,固然就表示他喜欢某个东西,若是他退货了,确定就表示不喜欢。隐性收集如今愈来愈重要,并且隐形收集的数据远远高于显性收集的数据。
如何预测
获得了数据以后,咱们如何来预测呢?它关键的挑战有哪些?
咱们获得的推荐值矩阵就是一个用户到底喜欢什么东西,但实际上,获得的数据基本上是很是稀疏的,意思就是说大多数用户对大的物品喜不喜欢我是不知道的。咱们只知道,每一个用户可能对少许物品的喜爱程度,或者是某一个物品只有少许的用户喜欢,因此他表达出喜爱。
还有就是冷启动物体,这是什么?假设我如今有一个新的物品,好比说 iPhone11 要放在个人购物网站上,没有任何用户为他打高分,由于它刚出来,没有人用过,天然没有反馈了,你怎么推荐它?你怎么知道人家是喜欢 iPhone11,仍是喜欢华为 P11?
还有就是新的用户。若是有个新的用户上来,他没有任何的交互行为,你根本不可能知道他到底喜欢或者不喜欢什么,这就是一个很大的挑战。
那经常使用的推荐方法有哪些呢?若是你如今要负责公司,作一个推荐系统,我建议你在我先要介绍这个列表里逐一试过来,再去使用更 Fashion,更先进的方法。
我会逐一把它们作些简单的介绍。
第一是 基于内容 的,这里有一个图来简单介绍,表达它的意思。
假设一我的他喜欢这种酸酸的啤酒,就让系统找跟这种啤酒全部类似的口味的其余啤酒,若是找到另一个,固然就能够推荐给他。
基于内容推荐看起来是最简单最容易实现的,效果反而也是还不错的,可是它的问题在于不少状况:很难获取一个物品的属性。若是基于内容,基于产品的属性找到两个类似的产品作推荐,怎么判断两个产品类似呢?不是一件容易的事情。
好比给用户推荐两篇新闻,怎么判断两个新闻相相似呢,须要用到天然语言理解,系统须要知道这篇新闻里面包含了哪些人物、哪些事件、哪些地点、哪些时间,这篇新闻里边是否是有国家元首,若是这两篇没有国家元首,至少某种程度上是类似的;或者这两篇文章是否是都包含了好比北京的事情,是否是都包含了一样的主题,它们是都在谈政治、都在谈军事,或者都在谈经济呢。基于内容这种推荐方法,最关键的问题是怎么获取这个物品的属性,对于文字,可能会用到天然语言处理;对于图像,可能须要用到深度学习的图像识别技术,知道这个图像图片里面到底包含了哪些物体是人、是狗、仍是猫,若是是猫的话,这两个方式类似的,是否是橘黄色猫?这就是基于内容的方法。
第二种方法是 协同过滤 的方法。
我给你们举个最简单的例子,可是你立刻就能理解协同过滤。
假设我有三个用户和四个物品,分别是橘子、草莓、苹果和香蕉。我知道第三个用户他购买苹果,接下来,我问你:在其余的三个他没有购买的物品,橘子,草莓和香蕉里面,第三个用户可能会最喜欢的哪一个?
基于协同过滤的考虑方式是这样子:咱们但愿给第三个用户推荐的物品应该是跟他已经购买的苹果类似的物品,那什么物品能够和苹果类似呢?咱们能够这样思考,什么物品在用户购买苹果以后,被同时购买的次数是最多的?
咱们先看香蕉,香蕉有没有跟苹果同时购买?有,第一个用户,他同时购买了橘子、苹果和香蕉,香蕉咱们算它得了一分,由于跟苹果同时购买了,因此加一分;那咱们再看草莓,草莓没有任何人买草莓的同时也买过苹果,草莓得分是 0 分;那么再看橘子,第一个用户,他同时购买了苹果,和橘子,第二人也同时购买了苹果和橘子,因此说橘子得两分,它跟苹果的类似度是 2。这样咱们就发现苹果跟橘子类似度是 2,苹果和草莓类似度是 0,苹果跟香蕉类似度是 1,得出结论:橘子跟苹果最类似,咱们就给第三个用户推荐橘子,这就是协同过滤的精髓。
接下来咱们再介绍 矩阵分解 方式。
举个例子,这里面 ABCD 四个用户,咱们有 WXYZ,四个产品,咱们知道用户对产品的喜爱程度,好比说 A 对 X 的喜爱程度 4.5,就给咱们这样一个打分的矩阵,咱们怎么来预测好比说 A 对对 W 它的喜爱程度是多少呢?
矩阵分解的最好方式是这样子的:我但愿找到另外两个矩阵,分别叫作 用户矩阵和物品矩阵,用户矩阵行的个数是等于我这个打分矩阵里面用户的个数,物品矩阵里面列的个数是等于物品的总数;至于用户矩阵的列,它必定要等于这个物品的矩阵的行数,那它的列数和行数具体等于什么值呢,是一个参数里你能够预设的,能够是 2,能够是 3,能够是 10,能够是 100。
这两个矩阵用户矩阵和物品矩阵应该有怎样的属性?咱们但愿他们的属性是这样子:当这两个矩阵相乘,他们乘的积确定是一个矩阵,和个人打分矩阵是一样的行,一样的列;我但愿他们两个乘积里面对应的值,它跟个人这个打分矩阵,应该一样行,一样列,那么就对应的值。
好比说第一行第二个值,我但愿它的值是接近于 4.5 的,在 AX 位置接近 4.五、在 AY 位置接近 2.0、在 BW 这个位置接近 4.0,也就是说我但愿这两个矩阵乘积的一个最终的矩阵,跟我打分矩阵里面已知的值是类似的。
若是能够作到这一点,那乘积的矩阵,它在这里是确定是会对应值的,我认为这两个矩阵乘积之后对应的值就是个人预测的值,这就是矩阵分解的基本思想。
你立刻能够发现矩阵分解它有一个问题:它只利用了用户对物品的打分的值,其实咱们是知道用户的属性,好比说用户是男是女,是总是少,咱们也知道物品的一些属性,好比说这个物品,若是是电影的话,咱们知道它导演是谁,演员主演有哪些,他的风格是什么,可是咱们没有办法在矩阵分解里面提供一些信息,由于数据没有办法提供,咱们就没有办法利用它们来提升咱们的系统。
因此就有人提出另一种算法,叫因子分解机。
它的思路是:把用户对物品的喜爱变成我下面定义的这样一个公式形式。它的意思是什么呢?
好比我这里有三个用户:汤姆、杰克和艾丽斯,咱们有电影、图书和音乐,有他们互相之间的喜爱程度,我把这个用户做为读者编码,每一行只有一个,人数为 1,1 就表示表明汤姆,而后另外一行这一个 1 是表明杰克;而后是物品进行读者编码,每一行也是只有一个物品为 1,再把用户的属性,好比说年龄、性别放在这里,再把物品的属性放在这里;而后每一行,这些 X 数据分别表明是哪一个用户,是哪一个物品,以及这个用户的年龄是什么、性别是什么,这个物品的属性分别是什么;这个用户对于这个物品它的喜爱程度是什么,这就是 Y 的值。也就是说,咱们但愿这些 X 的值经过下面这样一个公式的计算产生一个 Y 的值。
有一点跟矩阵分解很不同的是:X 之间是有乘积的,是有相关性的。好比:汤姆的 X 值要跟汤姆的年龄、性别相乘;汤姆的值也要跟这个物品的属性相乘,性别或者年龄也要跟物品相乘,再互相交叉相乘,才能获得咱们的变量。
这里面已知的值是 Y、X,未知的是 W,V 的值。咱们只要经过计算知道 W 和 V 的值,就能对未知的那些 Y 作计算,由于 X 是已知的,这就是因子分解机的工做原理。
跟前面相比,这种方法就是同时利用对物品的喜爱,也同时利用了物品的属性和用户的属性。
固然咱们如今绝对不能忽略的一件事情就是深度学习的推荐系统。
我能想到的最简单的,用深度学习作推荐模型就是这样子的:输入式用户 ID,好比有一百个用户,分别对用户编码从 0 到 99;若是有一千个物品,就把物品编码从 0 到 999,做为深度学习网络的输入,而后加一个嵌入层,再把嵌入层输出的两个向量链接在一块儿,加入一个全链接层、加正则化,再加一个全链接层、再加正则化,再加两个全链接层,而后用 softmax 做为预测。
它预测的值分别是输出 000,或者假设想要的评分是从 0 到 5 打分,输出就是五个元素,分别是值为 0 和 1 的数。若是我预测它的打分是 1 分的话,那就是第一个元素为 1,其余元素为 0,若是我预测打分数目,那就是第五个元素为 1 其余元素为 0。
这就是一个最简单的深度学习模型,它惟一的数据就是输入就是用户 ID、物品 ID 和这个用户对这个物品打分的值,而后虚拟网络最后就会告诉你,若是你把一个新的用户 ID 和一个没有打过度的物品 ID 告诉它,它会预测一个打分的值。
讲一个实际使用的例子,这个稍微复杂一点,可是跟前面我介绍的大同小异。
这是 Google Play,至关于苹果的 APP Store,用来下载 APP 的,可能中国用的比较少。它用了这样一个深度学习的方式来作推荐:输入分别是用户的性别、年龄、用户一共装了多少个 APP、跟这个系统之间的交互是什么样子的,这些直接送到它的嵌入层里;而后是用户的设备,三星、华为、或者其余设备;以及用户安装了哪些 APP,和用户的对 APP 的打分状况是什么,这些都加入一个额外的一个嵌入层,跟前面的这些属性直接连在一块儿,加了三层的深度学习网络,以后直接把用户安装了 APP,和用户对已经安装的 APP 的打分两两相乘的积,做为它最后的输入。训练这样一个结构的神经网络,用在 Google Play 的 APP 推荐里面。
还有一种推荐的算法,是由于你们已经花了不少工夫来研究搜索引擎,搜索引擎本质上就是一个推荐系统。
好比输入“黄晓明”这个词到搜索引擎里面,无论百度仍是 Google,会反馈不少的页面,第一个页面就是推荐系统认为,你会最喜欢的一篇关于黄晓明的文章或者网页,第二个页面是系统认为用户次喜欢的文章。
本质上来讲,这种推荐就是:把一堆物品给某一个用户呈现的时候排序的过程,用户具体喜欢的物品不重要,重要的是用户比较而言更喜欢的物品。
若是收集了用户数据和用户打分的数据,就能够用传统的搜索引擎方式,去为每个物品打分,而后进行排序,这是很传统可是颇有用的一种方式。
还有一种方式,不用任何数据支持都能想到的一种,就是 探索与利用。听起来很 fancy,但其实原理很简单,这里举个例子:假设有 5 个用户,他们是一类的,就是很类似的用户,随机把用户 1 和用户 2 抽取出来,做为小白鼠作实验,给他们推荐两部电影,看看他们对电影的反应是怎么样的。
给第一个用户推荐一部,给第二个用户推荐另一个部影,咱们发现第一个用户没有点击电影,没有看电影,但第二个用户看了,就表示说这个电影更适合第二个用户这类群体的口味。那我就知道了,原来给第二个用户推荐的这部电影好,因而就能够给其余用户推荐被第二个用户点击过的电影。
为何呢?很简单,由于这五个用户是类似的,我已经拿用户一和用户二做为小白鼠实验了,实验反映这个电影好,那我就应该给这些其余的用户推荐这个电影了。
可是还要注意一点:你也看到咱们也给用户推荐了一部没有被用户一一点击的电影,为何?若是咱们只给全部的用户推荐,不用户点击的电影,万一用户一直点错了,他其实也是喜欢那个电影但他没点,或者他如今正忙,有什么缘由看不了呢?那不就丢掉了这个好电影被用户看到的机会吗?咱们仍是要把它显示给某些用户看到,可是只能在显示的时候,显示的选择它的几率低一点,由于它明显被用户喜欢过。
最后不得不提就是 集成学习 的方法。
咱们有不少不一样的推荐算法,若是我把这些推荐算法所有加起来,合在一块儿,对用户会不会更好呢?现实的反映是会更好。
怎么来把这些不一样的算法输出合在一块儿呢?第一个方式就是投票。假设有三个推荐系统,其中两个认为某一个用户对物品的喜欢程度是 5,只有一个认为是 4,那我确定相信这两个了,投票多的就认为是它。或者取平均值,但我认为第一个算法更好,累计一个见解的输出,给它更大的权重。
第二种集成学习的方式就是堆叠。假设有两种推荐算法,我把第一种算法的输出的结果做为第二种算法的输入或者输入的一部分,再训练第二种算法。
第三种就是提高,我把一个推荐算法的输出值和我想要的真实的值的误差再做为个人训练数据进行推理、进行训练,这也是一种集成学习的方法。
如何评估推荐系统
而后我想给你们谈一下,怎么评估推荐系统。
说到推荐系统的评估的方式,立刻能想到 离线评估。根据有历史数据,一个用户喜不喜欢某个东西,我把历史数据分红两部分,一部分做为训练数据,一部分做为测试数据,我用训练数据的值来预测测试数据集里面的值,若是推荐的值跟我测试数据里面真实值相差少,就认为我是对的,这是很常见的一个方法,叫离线评估的方法。
第二个是 问卷调查,就是在网站或者页面上放置一个按纽,直接告诉用户:我如今给你推荐这个电影,你以为好或者很差?用户就直接给作评价。或者是搞个问卷调查,问用户愿不肯意作个问卷调查。在设计问卷调查的时候要注意一下:同一个问题的两种形式,好比说问用户喜不喜欢《夏洛特烦恼》这个电影,能够首先用一个句子问:《夏洛特烦恼》是否是你喜欢的电影;第二个问题是:你是否是特别讨厌《夏洛特烦恼》这个电影,由于有这样两个加起来可让用户从新思考,而且防止他有的时候只是点错了。还有就是所言非所意,这是什么意思?其实人有情感有理智,也有一些潜意识,他在问卷里告诉你他喜欢某个东西,不必定是他真的喜欢,这也是值得注意的一个问题。
第三个评估推荐系统方法是 用户学习。请一堆用户,作一个小规模的测试,他测试的不仅是推荐系统好很差,还包括这个推荐系统最后呈现的用户界面好很差。这是针对整个用户体验进行测试,只是几十个用户小范围的测试,可能会发现系统 90% 左右的大问题,这是一个很是好的评估推荐系统的方法。
而后就是最近很是流行的所谓 A/B 测试,或者所谓 在线测试。一个新的模型出来,一个新的算法出来了,随机选择一些用户,好比 10% 的用户,用新算法的结果,另外 90% 仍是用原来的算法的结果,而后比较新算法的 10% 的用户最后是否是得到了更好的推荐效果,好比说有购买更多的商品,或者是更踊跃的来访问咱们的网站。
推荐系统架构 & 总结
接下来,我想总结一下。
有一个理论叫作:No free lunch theory,天下没有免费午饭。就是说 世界上没有一种算法在解决任何问题的状况下都比另一种算法好,即便是如今最火热的深度学习算法,也并不意味着它会比传统的学习算法在解决任何问题下都好。因此组合多种不一样的算法,就显得很重要,就是我前面提到的集成学习的方法。
Netflix 是美国的一个电影网站,至关于爱奇艺这种收费的电影网站,它的推荐系统很是有名,他们以前搞了个比赛,奖金有一百万美金,让你们比赛谁可以比他们原来的推荐算法提升 10% 的效果。最后赢得这个比赛的是当时 AT&T 的一个团队,他们用了几十种算法,把这几十种算法结合起来,作一个推荐系统,提升了 10.09% 的效果。这就是你们要注意的,把多种算法合在一块儿。
最后呢,我想谈的就是在架构,我以 Netflix 为架构为主说若是要作一个推荐系统,应该怎么来选择软件系统。
分别要把你的系统分红:离线的部分,近实时的部分和在线的部分。
离线的部分可使用 Hadoop,Hive、Pig 或者 Spark 这种方式来作大规模的计算,由于这种计算都须要很长的时间。近实施的系统呢,他们使用 Cassandra 这种分布式数据库,MySQL,还有 Catch。还有实时系统,就是在内存里面计算这个系统,在这个部分的系统要求是:数据量比较少,算法比较简单,反馈通常都是毫秒为单位,在这个在实时系统里边通常都只作排序,在离线这部分可能要作比较复杂的事。
那这就是我今天要讲的全部内容,由于今天时间有限,我只能点到为止,若是你对推荐系统感兴趣,对我前面讲到的那些推荐系统想要有个更深刻的了解,从算法到实现,都感兴趣的话,你能够扫咱们贪心科技的二维码,进入咱们的公众号,咱们会在里面提交更多的内容。
weixin.qq.com/r/eCqPl5XE6… (二维码自动识别)
问答环节
Q1. 深度学习用户 ID 加 embedding 怎么操做?
A:Embeding 的本质是对输入的特征进行固定长度的编码。 用户 ID 的值多是从 0 到 10000, 是一个整数, 经过 Embeding 层, 输出变为一个预先设定长度的向量。 这样作的目的是为了经过训练数据获得更丰富的信息, 这个向量能包含了对应用户 ID 的信息。
Q2. 探索和利用 和协同过滤 区别
A:探索和利用这种算法比较适合物品种类比较少的状况, 一般使用在推荐系统的最后一个阶段。 就是使用其它算法找出最有可能被某个类别用户接受的物品之后, 再使用探索和利用来对物品从新排序。协同过滤相对计算量小,更适合大规模数据的状况。
Q3:PPT 能共享吗?
A:请关注咱们公众号,咱们会在里面分享。
Q4. 能具体说一下集成学习中的堆叠和 boosting 吗?
A:堆叠:前一个算法的输出做为下一个算法的输入,或者输入的一部分Boosting:请一个算法的输出和实际值的差,做为本算法或者其余算法的输入
Q5:在线排序的算法如今主要应用比较普遍的都有哪些?
A:我不太明白你的具体问题。我假设你的问题是“Learning to rank”里面最流行的算法, 个人答案是:LambdaMART
Q6:请问用 spark 作推荐系统,除了 mllib 的 ALS 算法,还有什么实现方法呢?
A:Spark 官方只提供了协同过滤的 ALS 算法。 其余算法还须要本身实现。
Q7: 深度学习的输入层请详细讲解下?
A:这个问题太宽泛,须要具体状况具体分析。
Q8:item2item 协同过滤 跟矩阵分解 应用环境分别是什么样的?
A:item2item 的协同过滤算是一种最近邻方法 (Neighborhood Method), 相对矩阵分解, 比较容易实现, 比较容易微调, 可解释性也比较好。
Q9: 推荐算法一般都和用户画像一块儿使用吗?
A:若是你可以获取用户画像,固然应该利用。高质量的用户画像必定会提升推荐的效果。
Q10: 老师我想问下关于 LFM,在矩阵分解后再相乘,和目标矩阵作差的过程当中,目标矩阵中没有过的值是怎么补了?
A:目标中没有的值不用补,作差的过程只须要考虑存在的值。
Q11:embedding 简单用 one hot?
A:理论上讲, 你能够直接使用全链接层和 one hot 编码代替 Embedding 层。 可是在许多状况下, 直接使用 one hot 编码做为输入计算量会大增。 例如在天然语言处理里面, 输入的 ID 值可能在百万级别, 若是直接 one hot 编码, 输入的向量就是百万级别的长度, 若是还须要使用 batching(批处理)来提升运输效率,那么内容占用和计算量都是巨大的。
Q12: 推荐系统有在工业(电力、化工、制造)领域的应用么?
A:我尚未发现推荐系统在电力,化工和制造业的应用。我想在工业 4.0, 先进制造业, 私人订制的领域,推荐系统应该是大有可为的。
Q13:刚才其实整个的这个课程讲了不少的算法,从协同过滤到深度学习,好比说一个工程师面对一个推荐系统的这样一个问题,大概有没有一个 guideline,对这类问题,咱们须要采用这种一个协同过滤的方式,而后可能对另外一个没问题可能采用深度学习的方式,有没有大概这样一个 guideline?
A:个人建议是先从基于内容的开始,基于内容的推荐系统和基于协同过滤的推荐系统开始,为何呢?即便你用深度,即便你开始上更 fancy 的算法,你也不知道你的算法是否是比传统的算法好,若是你用一个转动的算法先作出来了,你再用更先进的算法,这至少让你有一个比较说这个算法好,否则的话,你都云里雾里,你即便用了更先进的算法,你不知道先进的算法是否是真的好,这是其一;
其二是越先进的算法越难以实现,好比说我讲到 Netflix 花一了一百万美金,获得了 AT&T 贝尔实验室得冠军的算法,但实际上他们并无在他们的系统里面使用,为何?由于太复杂了,一个算法在学术界里面能够很复杂,在工业界里面实现,要考虑到内存,考虑到计算量,考虑到一个程序员能不能看懂那个算法,考虑到你的代码是否是比较容易 maintain,那考虑到这些之后,Netflix 最后没有使用那个算法,也就是说,若是要着手的话,我建议你从前面的算法开始,最早使用的是基于内容的推荐和基于协同过滤的推荐,接下来才是更先进的算法。
Q14:还有一个问题:由于深度学习这种技术在图像识别这种领域已经很成熟了,可是我想了解一下好比说在工业界里面深度学习目前的在推荐系统这块应用状况究竟是怎么样的?
A:如今深度学习很火了,那如今是否是有向深度学习作推荐系统的这样一个趋势呢?是有的,为何有呢?好比说有的图片分享网站,或者像 YouTube 这种视频分享网站,你们往上面发东西,并无人告诉你里面的内容是什么样,上传短片上去,这个系统它并不知道这个短片做者是谁,风格是什么,有哪些演员在里面,那什么都不知道,怎么知道这里面的相关性呢?
图片也同样,怎么知道推荐什么图片呢?深度学习,好比说 CNN 卷积神经网络,它能够作图像和视频里面的物质的识别、提取,他能够告诉你这个图片是奥巴马,这个图片是特朗普或者是其余人。包括音乐他会告诉你这个音乐的风格是什么。
因此说如今的确是有向深度学习进展的一个趋势,并且像 LSTM、RNN 它能够获取时间信息,就是时间上的相关性。好比说一我的他喜欢看《甄鬟传》,还喜欢看《纸牌屋》,可是他更喜欢看《纸牌屋》,那传统的推荐系统,我在看甄鬟传的 21 集,看完了我推荐什么呢?推荐《纸牌屋》,为何?由于它更喜欢纸牌屋,可是在这个前提下,我告诉你:我正在看《甄鬟传》的 21 集,你是应该推荐我《纸牌屋》吗?你应该推荐我《甄鬟传》的 22 集,由于我正在看《甄鬟传》的 21 集。这种时间上的,时间序列上的这种预测,显然是用这种 LSTM、递归神经网络会比较好。
讲师介绍
袁源,英文名:Jerry,美国微软总部资深工程师、主导多款核心推荐系统的研发,是人工智能、分布式系统、云计算方面的专家。博士毕业于美国新泽西理工,拥有 14 年人工智能、推荐系统、天然语言处理、数字图像和视频处理项目经验。曾师从中国科学院王守觉院士从事人脸识别研究、共同发表论文。在美国博士期间,主要研究 NASA(美国航天局)支持的基于人工智能的空间天气预测项目。
更多干货内容,可关注AI前线,ID:ai-front,后台回复「AI」、「TF」、「大数据」可得到《AI前线》系列PDF迷你书和技能图谱。