他的有生之年

                                       
sw
最近翻资料一不小心就点到了以前的一篇日志,还有一张声玩的照片,这让我又想起了我破旧发白的CSU 小收音机。

那天的广州似乎是挺热的天,也许是5月初的样子,我早早的吃完晚餐准备出发,到场排队时因为拿着2张票即使签章了我还是决定出场等青瑾。由于青瑾迟迟磨叽到开场后15分钟才到又加上晚场(他说晚场太正常了,所以他总是迟到)。等我们进去的时候已经没有什么最佳位置了,最后青瑾建议我们去振聋发聩的音响区。这个区最大的好处就是真的会让你的小心脏随声而起伏。

开始听声玩纯粹是因为Lolo那句题记–”我们走不了多远 ,也所知甚浅,但这不能阻止我奔向你身边“ ,现在突然写下关于声玩的东西心里有些许不安,因为这个印着成都标志的乐队流离辗转多年成员更迭频繁,这一路上的前乐队成员,前成名曲我实在不想去分太清,只要声音符合我的喜好,我不太关心八卦的前半生,我听的不过是个已完成的成品。

欧叔选了《生命》开场,前奏漂渺,让你安静的没有期待,只想任这声音流动,一直流动,然后自由呼吸。他们说这张可谓是他的有生之年,足足过了漫长的12年,才出了这第二张。开场几曲后,他第一次发声向我们介绍《时间》,这是这张专辑里我最期待的那首,或许可以继承03年《艾玲》的位置。“是他总于故事中不知疲倦的演奏 仿佛从不停止手中流动的旋律 ” 这少有的12分钟如果从作词上看后半段repeat 次数较多,但从曲调旋律上一点都不会让你感到繁复无趣,我听这首歌的时候完全是跟着前半段的词和整个旋律走,这也许正是这首歌的魅力所在吧。
《你是无可替代》有人说声玩原来也有这么少女心的歌,难道就因为这句”带着香甜的巧克力 天知道那是多么的不容易” 哈,黄晶没来, 再怎么听欧叔唱我都会带着些许遗憾。

临近终场,始终没有哪首曾经的经典,我在想要是他唱《秘密的爱》会怎样? 想想一个人的十年会怎样,足够让眼前的这位欧叔不觉中 韶华不复 让他从懵懂少年到如今?足够让他弹指之间 拨弄琴弦 从青春少年到如今?终究是时间 让他从《最美妙的旅行》里归来,生命不朽,艾玲还在,欧叔的有生之年《爱是昂贵的》。
可你口中的下个十年在哪?12年后的你说爱是昂贵的, 我们也许会没有期待,或许爱不可及。

“请问哪里才能买到晶体管收音机?”

“我已经买了多年,至今还盖着CSU的logo,告诉我这不说话的声音玩具原产于湖南长沙左家垅”。

 

发表在 声音传记, 有词 | 留下评论

以结果为导向的节奏

最近虾米给我的推送让我有这样的感受:有时是虾米在听我,有时是我在听虾米,我听她推荐的节奏,她听我想给出的节奏。如果让5年前的自己听现在的post rock 我可能一下子无法接受,但有些节奏一旦形成便让自己无法忍受非期待的节奏。比如等一趟公交,一个个内容复制和录入,手眼并动的机械活越来越让人麻木,明明可以用工具,为什么要手动?这是过去2年受到的熏陶之一,深入骨髓了?

如果没有结果导向,所有的节奏要么变慢,要么杂乱,这不是试错,这是浪费时间。

发表在 Mind and life | 留下评论

我今天看到glow curve 那猩红色专辑封面,又想起了河城,想起那个流放、隐没,最后坠河的歌手,死在旋转公寓可能是最适合她的BGM。

有时觉得你什么都想要,过于自我苛求,才一无所有;

有时觉得你什么都不需要,读不出你一点点欲望,才一无所有,太虚伪了!

发表在 B2C | 留下评论

密码保护:枫色

这是一篇受密码保护的文章,您需要提供访问密码:

发表在 屋头呓语 | 要查看留言请输入您的密码。

贯与通

这几天一边是技术类讲整个建模流程,一边是社会科学或者经济行为学心理学类,有时候看着看着会觉得不同书的作者不时的偷换概念或者说稍以转下视角讲着类似的故事不同的情节而已。

这种现象在社科行为经济学里尤为显著,可能西方人喜欢表达造就了同一个研究出现了不同称谓的术语和定义吧,比如被反复提到的一些关键词:锚定,第一印象,比较,陪衬,社会规范,市场规范 ,  即时满足与延后满足,对所有物的自我预估等。而在建模那一块,最明显的就是去年那本统计学上走马观花的留在我脑海里的概念在整个建模流程里全部蜂拥而出,尽管很多概念我从来都没理解透过,甚至连公式的推导都看不明白,但统计和数据建模的贯通可以帮我理清不少大方向上的思路,比如数据特征,属性之类的东西,描述性与预测性的区分等等,这些在统计学里确实是最基本的概念。

到这里我终于可以省点时间剔除重复性的东西并强化不懂的部分了。不能说很不容易,只能说要再接再励到另外一个层上,等再往下看积累又多了一层。

发表在 数据库, 算法+数据结构 | 留下评论

Lady&Bird

早在2009年开始听Lady&Bird,那个寒假我没有回家,在一家服装店兼职导购,清闲的时候只有我一个人看店,于是我多了很多时间去玩一些平常上课不怎么玩的东西,简称业余爱好。

人在自己当下的年龄认同区间内一般关注同年龄段相关事物较多,那个时候的我也是如此:比如我帮芳姐每天去“偷菜”,隔几天去校内(现在的人人网,中国版FB)看看同学的动态, 跟风在新浪博客上写小故事或者无病呻吟,跟风开通所谓的新浪围脖。宿舍某女男友是个会写小说的社长在我们的时代就是件很fashion 的事情,因为那个时候晋江正是红火之时,说起来那个社长似乎还有跟某网签约。

出于对新浪博客的狂热,我几乎每天都要花2-3小时看自己的博客和他人的博客,博客空间里有个添加Music list 的功能,迷上light music 的我四处百度无意中便加了一首Keren ann 的歌曲,suicide is painless ,接着Lady&Bird 的专辑歌曲几乎霸占了整个list的滚动条。接下来的2年里我的MP3,MP4里塞满了Lady and bird 的声音。后来到了GZ,也就是所谓的很多年后,我第一次见到了Bardi, 虽然不能看到Lady 和Bird 同台演唱很是遗憾,但Bang Gang 还在Keren还在 就会让我觉得Lady 和 bird 以后还会合作的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

而今天是我第一次见Keren, 不知道是不是我不太喜欢大剧院和音乐厅这样局促安静庄严的环境还是我习惯了livehouse里自在的吵闹喧嚣,整场听下来我有些许失望和不尽兴,但如果还有下一次我依旧会去听。

允许我怀念下这个组合,BGM-Don’t feel ashamed

 

 

 

 

 

发表在 声音传记, 有词 | 留下评论

在线购买率转化高达60%,Amazon推荐系统是如何做到的?

在线购买率转化高达60%,Amazon推荐系统是如何做到的?’

AI 前线导读:根据美国财富杂志的报道, Amazon 的销售额高速增长,得益于它将系统整合进用户购买, 从产品发现到付款的整个流程。根据华尔街分析师的估计, Amazon 的在线推荐系统的购买转化率高达 60%。 那么 Amazon 推荐系统的成功秘诀在哪儿呢,让我们为您揭开其神秘面纱。

声明 | 本文整理自 AI 前线 2018 年 3 月 1 日直播分享,未经许可不得转载!

大家好!很高兴今天有机会跟大家一起分享个性化的智能推荐系统。

我先自我介绍一下,我叫袁源,2011 年获得博士学位,曾经在亚马逊工作有两年半的时间。在这些工作中,我有一些经验可以给大家分享,所以趁今天这个机会跟大家聊一聊。

时间有限,我可能会讲的比较抽象,如果大家希望了解具体的内容,可以扫我们的二维码,来我们贪心科技的网络课程,在里面我会把今天讲的每一个算法用最详细的语言和最清晰的、最有条理的方式给大家讲解,并且每一种算法我都会用 Python 写好代码分享给大家,所以说大家不但能够从理论上学到一个算法、能够理解它,并且能够看到这个算法怎么实现的。我在实现算法的时候,会尽量不用任何第三方的库,我尽量不用那些已经打包好的,可能很多现成的人工智能的库是 C++ 写的,并且为了效率可能用上了 GPU。我会用最纯粹的 Python 写,这样的话,大家就可以看到很详细的每一个步骤是怎么实现的。

如果大家有兴趣,知道详细内容的可以继续扫我们二维码,到我们贪心科技的网站上了解更多细节。

weixin.qq.com/r/eCqPl5XE6… (二维码自动识别)

今天和我一起和大家分享的还有我们的 CEO,李文哲,文哲现在你可以给大家打个招呼吗?

李文哲:大家好,我叫李文哲,我目前是贪心科技的 CEO 也是创始人。我之前也是在美国读人工智能博士的,我之前是在 USC。在国内多家企业也做过首席科学家,所以我对整个的 AI 领域还是比较熟悉的。

我创建这样的一家公司是希望把这种 AI 的技术还有 AI 的知识普及起来,让国内的很多人可以去学习,然后在实战中能够用起来,今天我们也很高兴邀请到了 Jerry 老师来分享推荐系统这样的一个课题,希望大家在今天的课程当中学到一些知识。如果有任何问题,我们可以一起讨论,也可以给我提问,到课程结束之后,我们一起在论坛里面再互动一下。接下来我们就把时间给 Jerry 老师。

袁源:那我们现在正式开始我们今天的分享。

我今天的主要内容如下:

首先我给大家介绍一下推荐系统的概述,它代表什么,有哪些具体的推荐系统实现我们可以借鉴;

第二是我给大家推荐一下常用的推荐算法,如果你自己正要做一个系统的话,你可以从这些最常用的算法开始尝试;

然后我想强调一下大家可能不太重视的一点,就是如何评价一个推荐系统?只有你建立一个比较好的评价标准,你才有办法不断的改进你的算法,让你的系统运行的越来越好;

最后,我会介绍一下现在已经存在的一些推荐系统它们一般会怎么来架构的,以及如何从软件系统上来描述它。

推荐系统概述

首先什么是推荐系统?

我们要先定义一下,我们今天到底讲什么。

推荐系统其实就是一种信息处理的系统,用来预测一个用户对某个东西是不是很喜欢,如果喜欢的话,喜欢的程度是什么样的,是非常喜欢,还是一般般喜欢,还是一点都不喜欢。推荐系统用的领域肯定很多,我举一些例子:现在的今日头条给用户推荐个性化的新闻;优酷土豆 YouTube 给用户推荐视频;虾米音乐给用户推荐喜欢的音乐,当然还有淘宝、京东商城推荐图书、食品、衣服还有其他各种商品。除此之外在社交网络里面 Twitter、Facebook,还有像新浪微博,都会给用户推荐朋友。

当然,推荐的方式也是用推荐系统来实现的。现在金融很火,如果你在做金融类的产品,肯定希望做 P2P 金融给你的客户推荐股票、基金理财、基金证券和理财产品。当然单身狗们不要忘了在婚恋市场里面的各种相亲网站里面,也会给单身的朋友推荐合适的另一半,同样是用的推荐系统。

所以说我们可以看到推荐系统现在已经成为很多网站、手机 APP 不可获缺的一部分。这些 APP 和网站依靠推荐系统来提高销量,吸引用户注意力,提高用户活跃度和吸引新的用户。

因为我曾经在亚马逊工作,我们来看一个具体的一个公司它是怎么使用推荐系统的。

我现在显示的是 Google felines 里亚马逊的股价,可以看到,它最近简直像发射火箭一样,股价一直上涨的非常厉害。从 2015 年大概 300 美元一股,现在涨到了 1500 美元一股。

那它这么成功它靠的是什么?我们看看美国著名的《财富》杂志是怎么价值它的:它说亚马逊的成功取决于它把它的推荐系统放到了从产品发现,到产品购买的整个过程。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb849c854f2e9?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

财富杂志还提到说,亚马逊的推荐系统在进行推荐以后,用户购买率、转化率会达到 60% 的程度。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb849c8639e55?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

那我们来具体看一下亚马逊都使用了哪些推荐呢?

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb849c8e0f833?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

如果你登录到亚马逊网站上,第一个你会看到,它会按照不同的产品类别进行推荐,比如说左上角,它推荐给当前登录的 taomas 这个用户,给他推荐健身器材,左下角又推荐咖啡和茶,还有其他的图书,这是第一个:按照类别给每个人推荐。

第二个是经常购买的商品。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb849eced4ebe?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

假设一个用户现在购买了左边的这一个训练机构的这个健身棒,它就会推荐你买右边的这个橘黄色的这个健身的按摩球,为什么呢?这两个东西根据它们的历史显示经常被人一起购买,这也是个经典的案例,大家可能会知道 MBA 里面的一个经典案例:研究人员发现,超市应该把婴儿尿布和啤酒放在相邻处,因为很多父亲去买婴儿尿布,同时看到旁边有啤酒,就会一起购买,这也是采用样的策略。

第三,亚马逊推荐的方式是按照你最近的历史推荐。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb849ef83fa95?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

你最近看了什么?我最近看了健身用的健身棒,所以推荐的一堆用来健身相关的物品。

第四是什么?不是推荐你曾经没看过的,而是告诉你今天看了什么、前几天看了什么、某月某日看了什么,把你曾经看过,但是并没有下单的东西再给你看一遍,也许你就有下单的冲动了。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb849efb609f3?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

第五是什么呢?也是按照你的浏览历史给你推荐,不是按照你现在的浏览历史,比如我最近看的是健身器材,但是给我推荐的第二个商品是沙丁鱼,他是按照我曾经久远的历史来给我推荐的。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb849f279f46a?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

还有第六种推荐,就是按照其他跟你购物习惯相同的用户推荐,比如他和我买了同样商品,他接下来又买了什么,根据其他跟我买相同商品的用户购买的物品的推荐。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb849f34c3268?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

第七是,系统知道我的购买历史,知道我曾经买了一个 kindle,然后告诉我说,现在 kindle 出了新版本,那我会不会想要购买,这是根据用户的购买历史推荐同一个商品新版本。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a168190ab?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

还有第八,它根据我的购买历史推荐周边产品。系统知道我买了 kindle,他就推荐我说你要不要其他周边产品,比如保护套。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb849f99348c2?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

第九,就跟我个人购买历史和我个人的浏览历史无关的,而是根据在亚马逊网站上卖的比较好的那些商品进行推荐。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a0c20cccf?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

除了登陆网站,系统会给你推荐之外,它还会主动进行推荐。在美国大家用邮件用的比较多,都是用邮件来登陆的,所以说亚马逊知道美国用户的邮件,就会给用户发邮件进行推荐。

比如说这个例子:我最近看了一下佳能的数码照相机,它就会给我发邮件,给我推荐佳能最近卖的比较好的照相机给我。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a10dcc652?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

如果我无动于衷,它又会有推荐:佳能的你可能不感兴趣,推荐柯达的数码相机给你看你会不会感兴趣?这就是跟我曾经浏览相似的东西,但是呢,只是局限于柯达这个品牌。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a19ca95a4?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

如果我还无动于衷,他还会给我发邮件说,你看佳能的相机,这里有一个便宜的一个套件,包括相机的壳子、包括记忆卡,一起买会比较便宜,你会不会感兴趣?推荐系统会按照你曾经浏览的物品推荐周边产品,做一套件给用户购买。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a200ed55a?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

最后,如果用户还无动于衷,它还会给你推荐,比如直接告诉你,卖得最好的数码相机是什么。除了我曾经自己看的佳能,还有索尼的,这就是它给我推荐的东西。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a2e65f312?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

我每种推荐的算法标了一个数字,到这里一共是 13 种,也就是说:简简单单的一个购物网站,仅对每件商品的,就用了 13 种不同的推荐策略

我们高屋建瓴来看一下,各种推荐到底背后的算法是什么呢?

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a2fc7c1b0?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

如果我们把推荐系统来分类的话,其实我们每个人都接触到推荐系统,这是一个很原始的技术。

早期的门户网站,比如说新浪、雅虎,还有人民日报也是有推荐系统的,只不过里面的内容是网站编辑,或者是报社的编辑帮读者手工选择的,它也是一种推荐,只不过是手工生成的推荐。

第二类推荐,是一些简单的聚合系统。比如说你去 KTV,点唱面板上就会有 KTV 的最近点唱的排行榜,如果你去书店就有畅销书排行榜,去买电影票,猫眼电影之类的系统也会告诉你热卖电影是什么;包括豆瓣里面会有电影票房排行榜。

还有按照物品的时间顺序,按照时间性质给用户推荐,比如说新上架的物品优先推荐。

这些推荐系统只是基于最简单的统计来进行推荐,他们虽然说看起来方式很简单,但很多时候很有效。

最后一个就是我们关注的重点,就是真正个性化的千人千面的推荐系统。

无论是第一种,还是第二种,你会看出来不论是人工生成的推荐系统,还是简单的聚合,它 都不是针对个人的。每个人打开人民日报看到的是一样的内容,每个人去 KTV 里面点歌看到的排行榜是一样的。那我们现在最关心的就是千人千面的推荐系统,比如说每个人打开 Amazon 主页,每个人打开 Netflix 他会看到这些商品,或者电影的推荐是不一样的,那这就是我们今天想要关注的重点。

如果我们从数学上来抽象一个推荐系统,应该从理论上来看是个什么样的?有什么样的要素、要解决什么样的问题呢?

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a41c82bde?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

首先我们用 U 代表所有用户的集合,我们有一堆的用户,然后我们用 S 代表所有物品的集合,比如说我有一堆用户,我有一堆东西,这些东西可能是电影,可能是音乐,可能是人,可能是其他的物品。我的推荐系统模型也就是说:U×S,推荐出来 R,这个乘积在这里表示笛卡尔积。意思就是说:每个用户和每个物品我给它一个 R,这个 R 的值就是推荐值,就是说每一个用户对一个物品他的喜爱程度是多少,很多的网站会有,让你打分就是一到五颗星星这种方式来表达,也有像 Facebook 用点赞的方式,或者是鄙视这种方式来表达,这就是 R 代表的值,推荐系统说到底也就是一堆用户对于一堆物品的喜欢的程度的值

举一个大家都能明白的实例:假设我有小明、小李,韩美美和小静这四个人。有四个电影作为我的物品:《大话西游》、《夏洛特烦恼》、《黄飞鸿》、《笑傲江湖》。那我能掌握的数据、能够收集到的做推荐系统的数据是哪些呢?

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a49c5c59d?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

首先是推荐值里面记录了每一行是每个用户对于各个物品的喜好程度。比如:小李对于《夏洛特烦恼》喜欢程度是 2,对《黄飞鸿》喜好程度是 5。

在这个推荐矩阵里,你会看到有的人数值是已知的,有的是未知的,比如说小明对《大话西游》他的喜好程度是什么呢?我们不知道,这就是我们想要的,同样也是推荐系统的一个关键问题:我们怎么从我们这些已知的这些推荐值推导出这些未知的值? 比如小明对《大话西游》的喜好程度,除此之外我们还能获取哪些数据呢?当然我们获取用户的数据,每个用户有性别、年龄和其他的属性,这些是我们可以获得的;还有物品的属性,比如我们能轻易的获取这个电影的类别,是武侠还是文艺片,还是喜剧,这也是后续另外一些物品的属性。

有这三个矩阵,这些值就是我们可以利用的值,然后我们要解决的问题就是利用这些获取的数据推导那些位置的值,比如小明对《大话西游》的喜好程度。

我强调一下推荐系统要解决的关键问题:

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a426f4430?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

第一是 收集数据。推荐系统本质上说,当然是一种人工智能系统,人工智能系统需要 Training,需要训练,它当然需要训练数据了,所以说收集数据非常重要。我觉得有一点要注意:收集数据不是一蹴而就的,需要经常更新的,数据有时效性的。比如说一个人对一个东西的喜好程度是随着时间变化而变化的,每一个人童年喜欢的书籍电影在成年后可能就不喜欢了;可能你去年喜欢的东西和今年就不一样,也许你的兴趣爱好变了。还有比如说一个用户他现在小孩出生了,他可能关注更多的婴儿物品,比如说尿不湿,所以说收集数据很重要,而且收集数据是经常需要更新的。

第二,推荐系统要解决的关键问题当然就是如何预测那些未知的数据

第三个就是 怎么建立评价系统。只有建立一个评价系统,才能知道现在我的推荐系统到底好不好,如果不好,我们调整,怎么调整算是好?

收集数据

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a4b820d8d?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

收集数据有一种方式,是显示收集,就是直接让用户打分,或者是点赞,或者让用户留言评价。这有一个很大的问题,就是很多用户不愿意,或者懒得点赞、写评论,或者是打分。比如说我自己,比如我在 YouTube 上看了很多视频,我从来没有给他们点过赞,或者是写过评价说:“非常不错”或者是“很讨厌”,我从来不评价,我相信很多人会这样子。

在没有办法收集数据的情况下,有没有其他方式来收集呢?这就是越来越多的 隐性收集 数据,那怎么隐性收集呢?比如说一个视频网站,如果一个用户看了一部电影,过了一段时间发现他又在看那部电影,表示他很喜欢这个电影;如果他在观影时一直快进,或者中途就跳开了,那就说明他不喜欢,这就是隐性收集的一个策略。

购物网站就更简单,如果一个用户买了某个东西,当然就表示他喜欢某个东西,如果他退货了,肯定就表示不喜欢。隐性收集现在越来越重要,而且隐形收集的数据远远高于显性收集的数据。

如何预测

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a4d047426?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

得到了数据之后,我们如何来预测呢?它关键的挑战有哪些?

我们得到的推荐值矩阵就是一个用户到底喜欢什么东西,但实际上,得到的数据基本上是非常稀疏的,意思就是说大多数用户对大的物品喜不喜欢我是不知道的。我们只知道,每个用户可能对少量物品的喜好程度,或者是某一个物品只有少量的用户喜欢,所以他表达出喜好。

还有就是冷启动物体,这是什么?假设我现在有一个新的物品,比如说 iPhone11 要放在我的购物网站上,没有任何用户为他打高分,因为它刚出来,没有人用过,自然没有反馈了,你怎么推荐它?你怎么知道人家是喜欢 iPhone11,还是喜欢华为 P11?

还有就是新的用户。如果有个新的用户上来,他没有任何的交互行为,你根本不可能知道他到底喜欢或者不喜欢什么,这就是一个很大的挑战。

那常用的推荐方法有哪些呢?如果你现在要负责公司,做一个推荐系统,我建议你在我先要介绍这个列表里逐一试过来,再去使用更 Fashion,更先进的方法。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a51b42e53?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

我会逐一把它们做些简单的介绍。

第一是 基于内容 的,这里有一个图来简单介绍,表达它的意思。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a609be27d?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

假设一个人他喜欢这种酸酸的啤酒,就让系统找跟这种啤酒所有相似的口味的其他啤酒,如果找到另外一个,当然就可以推荐给他。

基于内容推荐看起来是最简单最容易实现的,效果反而也是还不错的,但是它的问题在于很多情况:很难获取一个物品的属性。如果基于内容,基于产品的属性找到两个相似的产品做推荐,怎么判断两个产品相似呢?不是一件容易的事情。

比如给用户推荐两篇新闻,怎么判断两个新闻相类似呢,需要用到自然语言理解,系统需要知道这篇新闻里面包含了哪些人物、哪些事件、哪些地点、哪些时间,这篇新闻里边是不是有国家元首,如果这两篇没有国家元首,至少某种程度上是相似的;或者这两篇文章是不是都包含了比如北京的事情,是不是都包含了同样的主题,它们是都在谈政治、都在谈军事,或者都在谈经济呢。基于内容这种推荐方法,最关键的问题是怎么获取这个物品的属性,对于文字,可能会用到自然语言处理;对于图像,可能需要用到深度学习的图像识别技术,知道这个图像图片里面到底包含了哪些物体是人、是狗、还是猫,如果是猫的话,这两个方式相似的,是不是橘黄色猫?这就是基于内容的方法。

第二种方法是 协同过滤 的方法。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a6847adc6?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

我给大家举个最简单的例子,但是你马上就能理解协同过滤。

假设我有三个用户和四个物品,分别是橘子、草莓、苹果和香蕉。我知道第三个用户他购买苹果,接下来,我问你:在其他的三个他没有购买的物品,橘子,草莓和香蕉里面,第三个用户可能会最喜欢的哪个?

基于协同过滤的考虑方式是这样子:我们希望给第三个用户推荐的物品应该是跟他已经购买的苹果相似的物品,那什么物品可以和苹果相似呢?我们可以这样思考,什么物品在用户购买苹果之后,被同时购买的次数是最多的

我们先看香蕉,香蕉有没有跟苹果同时购买?有,第一个用户,他同时购买了橘子、苹果和香蕉,香蕉我们算它得了一分,因为跟苹果同时购买了,所以加一分;那我们再看草莓,草莓没有任何人买草莓的同时也买过苹果,草莓得分是 0 分;那么再看橘子,第一个用户,他同时购买了苹果,和橘子,第二人也同时购买了苹果和橘子,所以说橘子得两分,它跟苹果的相似度是 2。这样我们就发现苹果跟橘子相似度是 2,苹果和草莓相似度是 0,苹果跟香蕉相似度是 1,得出结论:橘子跟苹果最相似,我们就给第三个用户推荐橘子,这就是协同过滤的精髓。

接下来我们再介绍 矩阵分解 方式。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a714959a5?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

举个例子,这里面 ABCD 四个用户,我们有 WXYZ,四个产品,我们知道用户对产品的喜好程度,比如说 A 对 X 的喜好程度 4.5,就给我们这样一个打分的矩阵,我们怎么来预测比如说 A 对对 W 它的喜好程度是多少呢?

矩阵分解的最好方式是这样子的:我希望找到另外两个矩阵,分别叫做 用户矩阵和物品矩阵,用户矩阵行的个数是等于我这个打分矩阵里面用户的个数,物品矩阵里面列的个数是等于物品的总数;至于用户矩阵的列,它一定要等于这个物品的矩阵的行数,那它的列数和行数具体等于什么值呢,是一个参数里你可以预设的,可以是 2,可以是 3,可以是 10,可以是 100。

这两个矩阵用户矩阵和物品矩阵应该有怎样的属性?我们希望他们的属性是这样子:当这两个矩阵相乘,他们乘的积肯定是一个矩阵,和我的打分矩阵是同样的行,同样的列;我希望他们两个乘积里面对应的值,它跟我的这个打分矩阵,应该同样行,同样列,那么就对应的值。

比如说第一行第二个值,我希望它的值是接近于 4.5 的,在 AX 位置接近 4.5、在 AY 位置接近 2.0、在 BW 这个位置接近 4.0,也就是说我希望这两个矩阵乘积的一个最终的矩阵,跟我打分矩阵里面已知的值是相似的。

如果可以做到这一点,那乘积的矩阵,它在这里是肯定是会对应值的,我认为这两个矩阵乘积以后对应的值就是我的预测的值,这就是矩阵分解的基本思想。

你马上可以发现矩阵分解它有一个问题:它只利用了用户对物品的打分的值,其实我们是知道用户的属性,比如说用户是男是女,是老是少,我们也知道物品的一些属性,比如说这个物品,如果是电影的话,我们知道它导演是谁,演员主演有哪些,他的风格是什么,但是我们没有办法在矩阵分解里面提供一些信息,因为数据没有办法提供,我们就没有办法利用它们来提高我们的系统。

所以就有人提出另外一种算法,叫因子分解机。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a769dd379?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

它的思路是:把用户对物品的喜好变成我下面定义的这样一个公式形式。它的意思是什么呢?

比如我这里有三个用户:汤姆、杰克和艾丽斯,我们有电影、图书和音乐,有他们互相之间的喜好程度,我把这个用户作为读者编码,每一行只有一个,人数为 1,1 就表示代表汤姆,然后另一行这一个 1 是代表杰克;然后是物品进行读者编码,每一行也是只有一个物品为 1,再把用户的属性,比如说年龄、性别放在这里,再把物品的属性放在这里;然后每一行,这些 X 数据分别代表是哪个用户,是哪个物品,以及这个用户的年龄是什么、性别是什么,这个物品的属性分别是什么;这个用户对于这个物品它的喜好程度是什么,这就是 Y 的值。也就是说,我们希望这些 X 的值通过下面这样一个公式的计算产生一个 Y 的值

有一点跟矩阵分解很不一样的是:X 之间是有乘积的,是有相关性的。比如:汤姆的 X 值要跟汤姆的年龄、性别相乘;汤姆的值也要跟这个物品的属性相乘,性别或者年龄也要跟物品相乘,再互相交叉相乘,才能得到我们的变量。

这里面已知的值是 Y、X,未知的是 W,V 的值。我们只要通过计算知道 W 和 V 的值,就能对未知的那些 Y 做计算,因为 X 是已知的,这就是因子分解机的工作原理。

跟前面相比,这种方法就是同时利用对物品的喜好,也同时利用了物品的属性和用户的属性。

当然我们现在绝对不能忽略的一件事情就是深度学习的推荐系统。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a858a9ddf?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

我能想到的最简单的,用深度学习做推荐模型就是这样子的:输入式用户 ID,比如有一百个用户,分别对用户编码从 0 到 99;如果有一千个物品,就把物品编码从 0 到 999,作为深度学习网络的输入,然后加一个嵌入层,再把嵌入层输出的两个向量连接在一起,加入一个全连接层、加正则化,再加一个全连接层、再加正则化,再加两个全连接层,然后用 softmax 作为预测。

它预测的值分别是输出 000,或者假设想要的评分是从 0 到 5 打分,输出就是五个元素,分别是值为 0 和 1 的数。如果我预测它的打分是 1 分的话,那就是第一个元素为 1,其他元素为 0,如果我预测打分数目,那就是第五个元素为 1 其他元素为 0。

这就是一个最简单的深度学习模型,它唯一的数据就是输入就是用户 ID、物品 ID 和这个用户对这个物品打分的值,然后虚拟网络最后就会告诉你,如果你把一个新的用户 ID 和一个没有打过分的物品 ID 告诉它,它会预测一个打分的值。

讲一个实际使用的例子,这个稍微复杂一点,但是跟前面我介绍的大同小异。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a7d93f46e?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

这是 Google Play,相当于苹果的 APP Store,用来下载 APP 的,可能中国用的比较少。它用了这样一个深度学习的方式来做推荐:输入分别是用户的性别、年龄、用户一共装了多少个 APP、跟这个系统之间的交互是什么样子的,这些直接送到它的嵌入层里;然后是用户的设备,三星、华为、或者其他设备;以及用户安装了哪些 APP,和用户的对 APP 的打分情况是什么,这些都加入一个额外的一个嵌入层,跟前面的这些属性直接连在一起,加了三层的深度学习网络,之后直接把用户安装了 APP,和用户对已经安装的 APP 的打分两两相乘的积,作为它最后的输入。训练这样一个结构的神经网络,用在 Google Play 的 APP 推荐里面。

还有一种推荐的算法,是因为大家已经花了很多工夫来研究搜索引擎,搜索引擎本质上就是一个推荐系统。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84a8e98e1de?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

比如输入“黄晓明”这个词到搜索引擎里面,不管百度还是 Google,会反馈很多的页面,第一个页面就是推荐系统认为,你会最喜欢的一篇关于黄晓明的文章或者网页,第二个页面是系统认为用户次喜欢的文章。

本质上来说,这种推荐就是:把一堆物品给某一个用户呈现的时候排序的过程,用户具体喜欢的物品不重要,重要的是用户比较而言更喜欢的物品。

如果收集了用户数据和用户打分的数据,就可以用传统的搜索引擎方式,去为每一个物品打分,然后进行排序,这是很传统但是很有用的一种方式。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84aa0cb3e63?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

还有一种方式,不用任何数据支持都能想到的一种,就是 探索与利用。听起来很 fancy,但其实原理很简单,这里举个例子:假设有 5 个用户,他们是一类的,就是很相似的用户,随机把用户 1 和用户 2 抽取出来,作为小白鼠做实验,给他们推荐两部电影,看看他们对电影的反应是怎么样的。

给第一个用户推荐一部,给第二个用户推荐另外一个部影,我们发现第一个用户没有点击电影,没有看电影,但第二个用户看了,就表示说这个电影更适合第二个用户这类群体的口味。那我就知道了,原来给第二个用户推荐的这部电影好,于是就可以给其他用户推荐被第二个用户点击过的电影。

为什么呢?很简单,因为这五个用户是相似的,我已经拿用户一和用户二作为小白鼠实验了,实验反映这个电影好,那我就应该给这些其他的用户推荐这个电影了。

但是还要注意一点:你也看到我们也给用户推荐了一部没有被用户一一点击的电影,为什么?如果我们只给所有的用户推荐,不用户点击的电影,万一用户一直点错了,他其实也是喜欢那个电影但他没点,或者他现在正忙,有什么原因看不了呢?那不就丢掉了这个好电影被用户看到的机会吗?我们还是要把它显示给某些用户看到,但是只能在显示的时候,显示的选择它的概率低一点,因为它明显被用户喜欢过。

最后不得不提就是 集成学习 的方法。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84aa0e567c1?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

我们有很多不同的推荐算法,如果我把这些推荐算法全部加起来,合在一起,对用户会不会更好呢?现实的反映是会更好。

怎么来把这些不同的算法输出合在一起呢?第一个方式就是投票。假设有三个推荐系统,其中两个认为某一个用户对物品的喜欢程度是 5,只有一个认为是 4,那我肯定相信这两个了,投票多的就认为是它。或者取平均值,但我认为第一个算法更好,累计一个看法的输出,给它更大的权重。

第二种集成学习的方式就是堆叠。假设有两种推荐算法,我把第一种算法的输出的结果作为第二种算法的输入或者输入的一部分,再训练第二种算法。

第三种就是提升,我把一个推荐算法的输出值和我想要的真实的值的偏差再作为我的训练数据进行推理、进行训练,这也是一种集成学习的方法。

如何评估推荐系统

然后我想给大家谈一下,怎么评估推荐系统。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84aa22f843d?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

说到推荐系统的评估的方式,马上能想到 离线评估。根据有历史数据,一个用户喜不喜欢某个东西,我把历史数据分成两部分,一部分作为训练数据,一部分作为测试数据,我用训练数据的值来预测测试数据集里面的值,如果推荐的值跟我测试数据里面真实值相差少,就认为我是对的,这是很常见的一个方法,叫离线评估的方法。

第二个是 问卷调查,就是在网站或者页面上放置一个按纽,直接告诉用户:我现在给你推荐这个电影,你觉得好或者不好?用户就直接给做评价。或者是搞个问卷调查,问用户愿不愿意做个问卷调查。在设计问卷调查的时候要注意一下:同一个问题的两种形式,比如说问用户喜不喜欢《夏洛特烦恼》这个电影,可以首先用一个句子问:《夏洛特烦恼》是不是你喜欢的电影;第二个问题是:你是不是特别讨厌《夏洛特烦恼》这个电影,因为有这样两个加起来可以让用户重新思考,并且防止他有的时候只是点错了。还有就是所言非所意,这是什么意思?其实人有情感有理智,也有一些潜意识,他在问卷里告诉你他喜欢某个东西,不一定是他真的喜欢,这也是值得注意的一个问题。

第三个评估推荐系统方法是 用户学习。请一堆用户,做一个小规模的测试,他测试的不只是推荐系统好不好,还包括这个推荐系统最后呈现的用户界面好不好。这是针对整个用户体验进行测试,只是几十个用户小范围的测试,可能会发现系统 90% 左右的大问题,这是一个非常好的评估推荐系统的方法。

然后就是最近非常流行的所谓 A/B 测试,或者所谓 在线测试。一个新的模型出来,一个新的算法出来了,随机选择一些用户,比如 10% 的用户,用新算法的结果,另外 90% 还是用原来的算法的结果,然后比较新算法的 10% 的用户最后是不是获得了更好的推荐效果,比如说有购买更多的商品,或者是更踊跃的来访问我们的网站。

推荐系统架构 & 总结

接下来,我想总结一下。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84ab7518079?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

有一个理论叫做:No free lunch theory,天下没有免费午餐。就是说 世界上没有一种算法在解决任何问题的情况下都比另外一种算法好,即使是现在最火热的深度学习算法,也并不意味着它会比传统的学习算法在解决任何问题下都好。所以组合多种不同的算法,就显得很重要,就是我前面提到的集成学习的方法。

Netflix 是美国的一个电影网站,相当于爱奇艺这种收费的电影网站,它的推荐系统非常有名,他们之前搞了个比赛,奖金有一百万美金,让大家比赛谁能够比他们原来的推荐算法提高 10% 的效果。最后赢得这个比赛的是当时 AT&T 的一个团队,他们用了几十种算法,把这几十种算法结合起来,做一个推荐系统,提高了 10.09% 的效果。这就是大家要注意的,把多种算法合在一起。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84aa8b518ea?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

最后呢,我想谈的就是在架构,我以 Netflix 为架构为主说如果要做一个推荐系统,应该怎么来选择软件系统。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84ab538e42b?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

分别要把你的系统分成:离线的部分,近实时的部分和在线的部分。

” data-src=”https://user-gold-cdn.xitu.io/2018/3/3/161eb84ac98e9e75?imageView2/0/w/1280/h/960/ignore-error/1″ data-width=”720″ data-height=”405″ />

离线的部分可以使用 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迷你书和技能图谱。

关注下面的标签,发现更多相似文章
算法
Apple
深度学习
人工智能

评论

作者:AI前线
链接:https://juejin.im/post/5a9a803ef265da2381551403
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

发表在 Python, Visions of DATA, 算法+数据结构 | 留下评论

使用 Amazon Comprehend 检测客户评论的情绪—-亚马逊AWS官方博客

使用 Amazon Comprehend 检测客户评论的情绪

如今,公共内容之间的关联越来越密切。客户评论数据是深入了解消费相关决策的工具,企业若能准确把握其中的情绪,便获得了重要的市场情报,从而可以主动将问题扼杀在萌芽阶段。

情绪分析是通过计算来确定一段文字蕴含的情绪是正面、负面、中立还是各种情绪交织在一起的一种流程。Amazon Comprehend 是由多个 API 组成的自然语言处理 (NLP) 文本分析服务,这些 API 可用于检测情绪 (以及关键短语、命名实体和语言),并根据一组文档执行主题建模。该服务利用先进的深度学习算法检测情绪,这些算法采用评分机制和属性来评估文本。Amazon Comprehend 训练数据集主要包括产品描述中的数据以及来自世界上最大的自然语言集合之一 – Amazon.com 上的客户评论。我们为您提供经过全方位训练的模型,该模型会根据新数据反复进行训练,确保与语言发展保持同步。目前大部分数据工程师和开发人员都不具备使用 ML 所需的一般技能。Amazon Comprehend 填补了这一技能空缺,可让开发人员利用现有的技能轻松使用 NLP。

本博文将向您介绍在事件驱动型无服务器架构 (使用 AWS 服务构建) 中,如何使用 Amazon Comprehend 来检测客户情绪。

解决方案架构概览

我们来看看 Amazon.com 上的产品评论,并使用 Amazon Comprehend 来对给定评论进行情绪分类。我们以 Amazon Echo、Amazon Echo Dot 和 Amazon Echo Show 的评论为例。我们将上传其他伪造的示例数据 (尽量不损害品牌声誉),然后使用具有细微差别的信息来模拟检索与产品有关的负面情绪,例如,正在召回的有缺陷、受损或危险商品。最后,我们使用 Amazon Athena 对负面评论进行交互查询并导出报告,以便让企业立即采取措施。

评论上传:用户将文本格式的客户评论上传到“Customer Review”(客户评论) 存储桶。

客户评论情绪分析函数:将安全上传评论作为触发评论情绪分析函数的 Amazon S3 事件,以便将评论下载到临时文件,然后调用 Amazon Comprehend 针对该评论执行文本分析,接着将总体情绪连同正面、负面、中立和混合信心评分一起输出到 CSV 文件。包含情绪的 CSV 文件将存储在同一“Customer Review”(客户评论) 存储桶内的“sentiment”(情绪) 文件夹中。

交互式 SQL 查询:使用 Amazon Athena 查询评论结果并重点关注负面情绪。

分步配置

我们先部署 AWS CloudFormation 模板,以便预置与 Amazon S3、AWS Lambda 和 Amazon Comprehend API 进行交互所需的 AWS Identity and Access Management (IAM) 角色和 Lambda 函数。

区域 区域代码 启动
1 美国东部
(弗吉尼亚北部)
us-east-1  
  1. 在 CloudFormation 控制台中,选择 Launch Stack (启动堆栈) 按钮 (如上方所示)。如果感兴趣,可以在此处查看 YAML 模板。
  2. 在“选择模板”页面上,选择下一步
  3. 在“指定详细信息”页面上,选择下一步
  4. 在“选项”页面上,保留所有默认设置,然后选择下一步
  5. 在“Review”(评论) 页面上,选中相应复选框,以便确认 CloudFormation 将创建 IAM 资源以及包含客户名称的 IAM 资源。
  6. 选择创建更改集

注意:我们提供的 CloudFormation 模板使用 AWS Serverless Application Model (AWS SAM) 编写而成。AWS SAM 可以简化无服务器应用程序的函数、API 等的定义方式,还可以简化这些服务的某些功能 (例如,环境变量) 的定义方式。在 CloudFormation 模板中部署 SAM 模板时,需要执行转换步骤来将 SAM 模板转换为标准 CloudFormation,因此,您必须选择“创建更改集”按钮才能执行该转换。

  1. 等待几秒钟,让更改集完成计算更改。您的屏幕应该会如下所示:
  2. 最后,选择执行,让 CloudFormation 启动后台的资源。您不必等待其完成即可继续执行下一步。

Amazon Simple Storage Service (S3) 存储桶事件触发器:

部署完 IAM 角色、Lambda 函数和 S3 存储桶之后,请务必为您的 Comprehend 情绪分析函数创建 S3 事件触发器。

  1. 打开 Amazon S3 控制台,选择以“review-sentiment”开头的新 S3 存储桶。
  2. 在“高级设置”部分下方选择属性,然后选中事件框。
  3. 选择 + Add notification (+ 添加通知),然后配置以下各项:
    1. 名称:SentimentAnalysis
    2. 事件:ObjectCreate (All)
    3. 后缀:.txt
    4. 发送到:Lambda 函数
    5. Lambda:review-sentiment-ComprehendSentimentAnalysis-XYZ
  4. 选择保存

 S3 客户评论上传:

为了对使用案例进行说明,我们提取的是 Amazon Echo、Amazon Echo Dot 和 Amazon Echo Show 最上面的客户评论。我们将每条评论保存到文本文件中。

  1. 下载以下三条评论:
    1. review-B01DFKC2SO.txt
    2. review-B01J24C0TI.txt
    3. review-B0749WVS7J.txt

注意:Amazon 客户评论未经许可不得用于商业用途。在实施您的应用程序时,应当将此数据替换为您有权使用的数据源。

  1. 从控制台中选择您的 S3 存储桶,然后选择“添加”以添加各个评论文本文件,最后选择上传
  1. 刷新存储桶,然后验证存储桶中的以下输出:

    注意:这是我们创建的事件驱动型无服务器架构。上传到我们 S3 存储桶的评论被视为一个事件,用于触发 Comprehend-SentimentAnalysis 函数,进而将情绪和情绪信心评分输出到 CSV 文件中,该文件位于 S3 存储桶的“sentiment”(情绪) 文件夹中。
  2. 选择一条评论,然后选择下载

    “我的兄弟 Robert 由于颈部以下多发性硬化症而瘫痪在床,卧病不起已经长达 30 多年,如今有了一个新朋友,这就是 Alexa!每当 Alexa 播放 70 年代的音乐,玩“Jeopardy”(危险边缘) 游戏,回答他的所有问题并且在每天早晨将他唤醒时,Robert 总是满含幸福的泪水。感谢 Amazon 为我卧病在床的兄弟带来安慰。”
  3. 选择 sentiment (情绪) 文件夹,并打开 CSV 文件查看其内容。

    “情绪”信息介绍文本的总体情绪以及以下每个标签的情绪评分:“Positive”(正面)、“Negative”(负面)、“Neutral”(中立) 及“Mixed”(混合)。所有这些情绪评分均通过 MXNet 深度学习模型返回,并显示为 0 到 1 之间的浮点值,其中 1 表示情绪标签为充满信心。例如,此 CSV 表示 Amazon Echo Dot 评论的总体情绪为“POSITIVE”(正面),正面情绪评分 (信心) 为 82%。
  1. 为了丰富我们的评论数据,请返回 S3 存储桶,并在此处从以下示例评论数据上传各个文本文件。

将每条评论上传到 S3 存储桶时,都会调用 Amazon Comprehend。由于 S3 上存储的评论数量不受限制,下一步就是要能够对这些评论进行查询,并找出对企业而言最重要的内容。在接下来的步骤中,我们将查询 S3 中现有的评论,然后过滤出负面评论。

使用 Amazon Athena 进行交互查询

我们将进一步深化此操作:按负面情绪从强到弱的顺序,使用 SQL 语句对所有评论进行排序。通过此查询,企业可以准确了解从何处着手并明智地安排周期。

在 Athena 控制台中,运行以下命令以在默认数据库中创建 Athena 表。 重要提示:请将 <bucket_name> 替换为之前创建的 S3 存储桶。

CREATE EXTERNAL TABLE IF NOT EXISTS default.ReviewSentimentAnalysis (
  `ImageLocation` string,
  `Timestamp` string,   
  `Sentiment` string,
  `Positive` string,
  `Negative` string,
  `Neutral` string,
  `Mixed` string
  )
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = ',',
  'field.delim' = ','
) LOCATION 's3://<bucket_name>/sentiment/'

表成功创建后,请将以下 SQL 语句复制粘贴到编辑器中。  选择 Run Query (运行查询)。

SELECT * FROM default.ReviewSentimentAnalysis WHERE sentiment='NEGATIVE'
ORDER BY negative DESC

结论

总而言之,Amazon Comprehend 可以快速识别发生变化的观点以及总体情绪,让您能够深入了解客户反馈,从而减少了解客户所需的时间和精力。此外,这也提供了一个立即采取相应措施的机会,以便满足客户不断变化的需求。

训练 NLP 不仅很困难,而且成本也非常昂贵。获取真实情绪的过程存在诸多障碍,例如,在对话不连贯、挖苦和讽刺时语言含义模糊不清,在使用表情符号的象征性表达中,仅捕获文本无法进行分析。所有这些障碍使得情绪更难以理解,因此,可能会影响所得到的结果的质量。 即使采用大型非结构化情绪富文本数据集和适当的分析方法,要想成功预测客户需求或对其作出反应,也需要做出大量的努力。这要求企业拥有相应的技能和专业知识来构建有效的机器学习 (ML) 模型,并在模型中包含可用来训练准确的情绪分类器的优化算法,然后运用 ML 技术来进一步降低系统不准确性,同时通过连续的反馈循环不断改进该模型。

Amazon Comprehend 将数据科学家需要执行的无差异繁重工作进行了抽象化,让您能够轻松将该服务集成到您的应用程序或分析解决方案中。此外,您还可以在 AWS 上一次查询几百万条评论,然后仅显示相关信息。可通过多种我们使用案例以外的方式来收集文字信息,例如,通过 Amazon Kinesis 或者 Amazon CloudWatch 中的计划事件实时提取数据。此外,提取并分析情绪之后,还可以洞察文本数据的其他很多方面。例如,您可以将数据的新字符串加载到数据仓库 (例如,Amazon Redshift) 中,在 Amazon QuickSight 等商业智能 (BI) 工具中查看该数据,或者将负面情绪评论复制到某个 S3 存储桶,以便触发我们的 Simple Notification Service (SNS) 以通知您的客户服务团队。

所有这些操作均在无服务器架构中执行,因此无需服务器即可编写和运行代码。归根结底,业务逻辑应该是您需要编写的唯一代码。我们将一如既往地继续以真正敏捷的方式对我们的模型进行迭代。请继续为我们提供反馈。现在充分发挥您的想象力,在 AWS 上尽情构建吧!


补充阅读

了解如何使用包括 Amazom Comprehend 和 Amazon Quicksight 在内的 Amazon ML 服务构建社交媒体控制面板


作者简介

Todd Escalona 是一名解决方案架构师,他致力于向企业客户以及在初创社区中推广 AWS 云,同时通过聆听客户心声来了解客户目标,并以此为出发点来进行反向营销。他会确定需求,围绕具体使用案例提供架构指导,并且协助他人设计可扩展、可靠且性能高的应用程序和服务。他对各种各样的技术感兴趣,例如,人工智能、机器学习以及事件驱动型无服务器架构。

发表在 B2C | 标签为 , , | 留下评论

Amazon VC (Vendor Center) 的变化

 

Moss 的一些看法: 亚马逊VC从盈利角度来说,短时间内肯定是不如SC(seller central)赚钱的,他的目的更偏向于band awareness promotion. 而且重货抛货可能更合适。

如果说你只是一个中小卖家,只想想通过亚马逊卖货赚钱,VC真的不太合适,因为非但赚不了钱,还会比之前SC赚的更少。下面贴一个表格,这算是我们真实经历过的例子,把产品交给VC以后,利润几乎被砍半。

但是为啥很多人对VC还是那么热衷呢,很简单,因为VC可以玩黑科技,如果说你并不想好好做VC, 只是把VC当做一个辅助SC的推广工具,那么就是另一种玩法了。不过这个都属于不太鼓励而且违规的行为,长期来看肯定是不利的。

前面定定性部分讲完以后,下面就把之前搜集的问题和答案给大家PO出来,希望我们团队的精心解答能够帮助到各位老铁:

VC如何开通以及开通条件?
官方的说法是invite-only, 一般都是由VM直接发送邀约。邀约链接接到以后还好几层的筛选审核,最终才能通过。  没事多看看你们邮箱,很多人收到漏掉了没察觉。市面上有一些僵尸玩法,比如更改VC 邀请链接参数,无限发邀请等等,这些建议慎重。属于野路子。
VC如何配合SC进行组合营销?
1.加节点2.加视频3.各种高端A+模板,比如那个comparable chart

4.VC配合SC刷单

5.更高级的数据获取

6.Amazon VINE 官方测评

7.VM神一般的权限

VC有渠道实现连续报LD的功能么?
连续报LD是黑科技,官方内部都做不了
VC里面的ARA工具好用吗?有用吗?这些数据能干嘛? 谢谢。
ARA全称 Amazon Retail Analytics,属于VC才能享有的高级数据权限,如下图所示:ARA有两个版本,一个基础版本没啥东西,另一个是高级Premium 版本,这个版本是需要花钱买的。之前的ARA PREMIUM 其实还不错,不过后面改版了,很多高级数据功能被拿掉了,很多项只能看自己的不能看别人的了。所以个人觉得新版本的 ARA已经没有太大的作用。下面贴一张图,我们花了大价钱买的,可惜没啥太大用。 所以也建议各位不要迷信ARA 数据。

VC 如何能够扩展类目,实现全类目开通
1.要看你帐号是什么渠道开通的,官方邀请的话,那就会有对应的VM帮你做事2.提供合理的产品画册,Marketing deck和语气,可以让你对应的VM帮你介绍其他类目的VM3.黑渠道不正规渠道开通的话,就把VC帐号当一个僵尸号就好了

VC可以任意加节点么? VC可以给非自己所在的类目加节点么?  采取的是开case方式?
可以,可以,是的
可以用VC账号给我SC账号的listing免费上视频吗? 比如通过跟卖的模式
可以的
VC 报 LD BD  DOTD 是不是都是免费的, 而且随便报
LD今年开始收费了,价格和SC一样。BD免费。DOTD后台没有申报,要官方合作的VM。

所以,黑号就是僵尸号

moss 我发现一个现象, amazon虽然说是要求全网最低价,但是如果不是VC的产品其实我们的价格可以做到比较高(同样产品比其他平台高)是没有问题的,但是最近我发现,我的VC产品的价格 VC那边会自动调成全网最低价,比如我的称walmart卖18(amazon以前是20),那么amazon 的VC 也会调成18。平常我们自己降价抢到BUYBOX VC 那边其实会打电话过来 让我们不要抢的。我想问的是通过这种其他平台降价的方式来压低VC的价格 是否可行,VC是否还会打电话过来撕逼?

你进入VC的时候就是自动接受了Price protection协议(可以自己去看文件)。如果是和VM合作的帐号,他过阵子会跟你来要钱的,就是比如你们商定的是19.99,你诱导降价到16.99,那每个3美金的钱你是要贴回去给VC的。
在VC创建listing后如果不想给亚马逊供货,该怎样取消前台sold by amazon?   FBA和VC能在前台自由切换么?
你不想供货不发货就行了,然后把那个产品在VC标记为不再销售
VC中国公司可以申请吗?还是非要美国公司?
正规被邀请的号,中美都可以的,只要税务合规
vc批发给amazon,是含运费报价,机器自动接收或者给我们一个还价,我们如何还价回去以赢取amazon的下单呢?  亚马逊采购价这一块能不能解释一下
Amazon采购价会根据你过去的销售价格找一个系统觉得合适的价格来匹配的,就算你讨价还价让系统接受了,但是系统觉得你这个价格不好,他是不会下单的。VC是不包含运费的报价,运费自理
VC账号跟VE账号有什么区别和额外的优势
怎呢, VE算是一个精简版本的VC, VE大概只有VC 六成的功能,你可以这么理解,VC是亚马逊亲儿子,VE是养子,SC是别人家孩子  何况现在VE被亚马逊取消,这些已经成为历史了。
VC 和 SC 对于消费者来说,区别大不大?
这个不瞒您说, 我们还真做过测试,答案是并不大。 针对于sold by Amazon, 客户并没有高看你多少,而且大把的是SC销量干过VC的例子。不过,VC可能就是促销工具多一些,旺季的时候有流量倾斜, 其实总体来说,VC多的类目也不要害怕,SC还是有机会的。
发表在 B2C | 留下评论

Oracle数据库备份上云

Oracle数据库备份上云

数据库作为一种常见的应用系统架构组件,存储着跟业务或系统相关的各种数据。基于数据库所存储的数据的价值,用户会实施不同的方案来保障数据库以及数据的可用性。本文将详细介绍如何通过Oracle Secure Backup(OSB) Cloud Module(以下简称OSB Cloud Module)来对Oracle数据库进行备份,并将备份内容安全可靠的存储在云端。

Amazon S3

Amazon Simple Storage Service (Amazon S3) 为开发人员和 IT 团队提供安全、耐用且高度可扩展的对象存储。Amazon S3 易于使用,通过简单的 Web 服务接口实现在 Web 上的任意位置存储和检索任意数量的数据。使用 Amazon S3,您只需按您实际使用的存储量付费,没有最低消费限制和设置成本。Amazon S3 提供了高耐久性、高可扩展性以及安全的解决方案来备份和归档您的关键数据。 您可以使用 Amazon S3 的版本控制功能为存储的数据提供进一步的保护。您也可以基于对象的生命周期为其定义归档规则,将 Amazon S3 对象归档到 Amazon Glacier 以享受极低成本的存储服务。随着数据老化,这些规则可以确保您的数据自动存储到最合算的存储服务中。

Amazon S3 的构建方式满足以下设计要求:

  • 耐用

Amazon S3 提供耐用的基础设施存储重要数据,其设计旨在为对象提供 99.999999999% 的耐用性。您的数据将通过冗余方式存储在多个设施以及一个设施内的多个设备上。

  • 成本低廉

利用 Amazon S3,您能以非常低廉的成本存储大量数据。利用生命周期管理,您可设置策略来将数据自动迁移到 Standard – Infrequent Access 和 Amazon Glacier,随着时间的推移,成本还会进一步降低。您只需按需付费,无需承诺最低费用或支付前期费用。

  • 可用

Amazon S3 Standard 可在指定年度内为对象提供高达 99.99% 的可用性,并且有 Amazon S3 服务等级协议的支持,从而确保您可在有需要时放心依赖。您还可以选择一个 AWS 区域来优化延迟、尽可能降低成本或满足法规要求。

  • 可扩展

利用 Amazon S3,您可以尽可能多地存储数据并在需要时访问数据。您可以不必预测未来的存储需求并能按需要向上和向下扩展,从而大幅提高业务灵活性。

  • 发送事件通知

Amazon S3 可在对象上传到 Amazon S3 时发送事件通知。Amazon S3 事件通知可使用 Amazon SQS 或 Amazon SNS 进行传送,或直接发送到 AWS Lambda,从而使您能够触发工作流、警报或其他处理操作。例如,您可以使用 Amazon S3 事件通知在媒体文件上传完成时触发其转码操作,在数据文件可用时触发其处理流程,或触发 Amazon S3 对象与其他数据存储的同步。

  • 性能高

Amazon S3 支持分段上传,可帮助最大化网络吞吐量和弹性,同时还让您能够选择 AWS 区域存储接近于终端用户的数据并最小化网络延迟。

  • 易于使用

Amazon S3 具有基于 Web 的管理控制台和移动应用,非常易于使用,并且提供全套 REST API 和软件开发工具包,可与第三方技术轻松集成。

 

基于上述特征,选择Amazon S3作为云端存储既能满足数据持久性需求,还具有很高的性价比,是很好的备份介质选项。

 

OSB Cloud Module

OSB Cloud Module与RMAN结合使用,让用户能够将Oracle数据库直接备份到基于互联网的存储服务:Amazon S3。通过RMAN可备份数据库的数据文件,控制文件,服务器参数文件和归档日志文件,OSB Cloud Module通过SBT方式为RMAN提供存储介质管理服务,支持进行备份压缩、加载优化、备份加密等功能,使用户能快速实现备份的远程存储,以提高备份的可用性等级或是满足合规要求。OSB Cloud Module支持Oracle 9i R2之后的数据库版本。

 

下图展示了通过OSB Cloud Module实现Oracle数据库备份至云端的参考架构。RMAN在安装Oracle数据库时已随数据库软件一起安装,要备份至Amazon S3,还需要下载OSB Cloud Module软件,并进行安装和配置。通过OSB Cloud Module,备份内容通过互联网传输至Amazon S3;对网络链路质量有要求的客户还可使用专线方式,通过AWS Direct Connect服务用专线连接公司数据中心和AWS云端,备份内容通过专线传输至Amazon S3。

 

使用这个方案对Oracle数据库进行异地备份,不需要使用第三方备份软件,也不需要磁带机或磁带库,用户可快速实施异地备份。

安装配置

OSB Cloud Module可以从链接下载,下载的文件为zip格式,解压后包含一个jar包以及一份readme文件,建议安装之前先阅读readme文件。安装OSB Cloud Module之前需要先安装java 1.7以上版本,在Redhat Enteprise Linux使用以下命令进行安装:

yum install java-1.8.0-openjdk.x86_64

OSB Cloud Module通过IAM 用户的Access Key和Secret Access Key来获取Amazon S3存储桶的访问权限,OSB Cloud Module会将备份内容存放到oracle-data-<username>-<region>1存储桶,<username>是IAM用户名,<region>是区域的缩写,北京区域cn-north-1的缩写为cn。

创建IAM用户,“访问类型”选择”Programmatic access”

下一步选择AWS管理的策略:AmazonS3FullAccess

最后需要记录下Access Key和Secret Access Key并妥善保存。

创建好IAM用户之后,在数据库服务器上用Oracle用户执行以下命令来安装配置OSB Cloud Module, $ORACLE_HOME环境变量设置为Oracle软件主目录:

 

java -jar osbws_install.jar -awsEndPoint s3.cn-north-1.amazonaws.com.cn -AWSID <AWS_AKEY> -AWSKey <AWS_SKEY> -walletDir $ORACLE_HOME/dbs/osbws_wallet  -libDir $ORACLE_HOME/lib/

 

-awsEndPoint : s3服务的访问端点,各区域的访问端点可参考https://docs.aws.amazon.com/zh_cn/general/latest/gr/rande.html#s3_region

-AWSID: 具有权限的IAM用户的Access Key

-AWSKey: 具有权限的IAM用户的Secret Access Key

 

正常安装的过程如下图:

可通过检查S3中是否创建了相应的存储桶来验证安装是否成功。

 

安装好OSB Cloud Module之后,登录RMAN进行配置,这一步不是必须,但是为了简化后续使用,可先配置好RMAN的缺省值

 

CONFIGURE CHANNEL DEVICE TYPE ‘SBT_TAPE’ PARMS  ‘SBT_LIBRARY=/u01/oracle/product/12.2.1/dbhome_1/lib/libosbws.so ENV=(OSB_WS_PFILE=/u01/oracle/product/12.2.1/dbhome_1/dbs/osbwsorcl.ora)’;

并将缺省的设备类型设置为SBT:

至此,OSB Cloud Module的安装及配置就已完成。

备份和恢复

使用OSB Cloud Module备份数据库到Amazon S3,以及从Amazon S3进行恢复都是通过RMAN完成,使用方式与使用RMAN从本地磁带进行备份和恢复并无区别。这里简单通过几个命令介绍如何使用RMAN进行数据库备份及恢复。要对数据库进行在线备份,需要开启archivelog模式。

备份数据库:

查看备份:

在S3的存储桶中会生成对应的内容:

恢复数据库:

高级主题

为进一步优化备份速度和数据传输效率,还可以:

  • 配置备份的multisection
  •  使用多个CHANNEL
  • 提高SBT的PARALLELISM
  • 备份压缩
  • 备份加密

请参考《Database Backup and Recovery User’s Guide》文档进行配置,此处不再赘述。

发表在 数据库 | 留下评论

如何在云上快速搭建 NFS

如何在云上快速搭建 NFS

 

传统架构中我们常使用 NFS 来作为共享文件的存储。那么在搬迁到云中的时候我们该如何快速搭建相应的 NFS 系统?

本文将为您介绍快速搭建 NFS 系统的解决方案的四个关键词,分别是:

·         利用适用于文件的 AWS Storage Gateway 搭建云中NFS

·         在 EC2 上使用 NFS

·         NFS 只在 VPC内网可连

·         工作于由光环新网运营的 AWS 中国(北京)区域

服务简介

File Gateway

文件网关提供了一个文件接口,让您可以使用行业标准 NFS 文件协议将文件作为对象存储在 Amazon S3 中,并通过 NFS 从您的数据中心或 Amazon EC2 访问这些文件,或通过 S3 API 以对象形式访问这些文件。所有权、权限和时间戳作为与该文件关联的对象的用户元数据,永久存储在 S3 中。当对象传输到 S3 之后,它们可以作为原生 S3 对象进行管理,版本控制、生命周期管理和跨区域复制等存储桶策略将直接应用于存储在存储桶中的对象。

客户使用文件网关 NFS 接口将文件数据存储到 S3 中,这些数据便可以供基于对象的工作负载使用,用作传统备份应用程序的经济高效的存储目标,或者用作应用程序文件存储的云端存储库或存储层。

在 EC2 上使用 File Gateway 作为 NFS

工作方式:

·         对象数据存储在S3中,提供数据可靠性和持久性

·         Gateway缓存为一个EC2实例,和S3定期同步数据

·         使用NFS的实例与gateway缓存实例交流读写数据

搭建步骤

创建网关

1.  创建Storage Gateway, 选择文件网关类型

2.  选择Amazon EC2作为主机平台,按照设置说明配置VPC,主机类型,添加新EBS卷,安全组等。

注意:

1)我们将配置NFS服务器只在VPC可连,所以请禁用自动分配公有IP选项

2)对添加的EBS卷,设置大小在150G以上

3)在安全组上临时配置安全策略,允许VPC内其它机器通过80端口访问该机器

4)保证该机器能够访问公网,一般通过NAT网关(https://docs.aws.amazon.com/zh_cn/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html)等方式实现。

3.  等待EC2创建完成,点击进入EC2详情页,记录下该机器的私有IP (下文称该IP为: Gateway私有IP)

 

链接并激活网关

1.  在IAM中创建新的EC2角色,配置拥有 AWS Storage Gateway Full Access

2.  在同一个VPC中创建另外一台临时的EC2实例(Amazon Linux),并满足以下条件

a.  能够使用SSH登录

b.  绑定上一步中创建的EC2角色(ec2-storage-gateway)

3.  SSH登录到临时EC2实例

4.  运行以下命令得到gateway实例的激活码

curl -I [gateway私有IP]/?activationRegion=cn-north-1

记录下激活码activationKey的值

5.  运行以下命令激活file gateway

aws storagegateway activate-gateway –activation-key [activationKey] –gateway-name [gateway name] –gateway-timezone “[time zone]” –gateway-region cn-north-1 –gateway-type FILE_S3 –region cn-north-1

激活成功后命令返回GatewayARN

6.  返回Storage Gateway,检查my_gateway是否已经建立

7.  点击my_gateway,编辑本地磁盘,将创建时添加的EBS卷配置成缓存,并且保存。

关联S3和file gateway

1.点击并创建文件共件

2.配置文件共享设置。

1)选择网关my_gateway

2)S3存储段名称填写s3存储桶名称,可以为现有的s3存储桶,也可以新建一个

3. 在S3存储桶和file gateway不在同一账号的情况下,我们也可以关联两者。需要在S3存储桶上额外设置存储桶策略。如果只是同一账号的情景,请直接跳到下一步。

注意:以下策略中的Principal中配置的角色为上一步中自动创建的新IAM角色。可以在IAM界面中查询到。

{
                "Version": "2012-10-17",
    "Id": "FGWPolicy",
    "Statement": [
        {
            "Sid": "FGWStmt",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws-cn:iam::[account id]:role/service-role/StorageGatewayBucketAccessRole8e94d222-b375-4f29-ac2a-99d77c1bf3"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws-cn:s3:::images-andrew",
                "arn:aws-cn:s3:::images-andrew/*"
            ]
        }
    ]
}

当然,你也可以控制file gateway账户只对S3存储桶拥有只读权限。

      {
    "Version": "2012-10-17",
    "Id": "FGWPolicy",
    "Statement": [
        {
            "Sid": "FGWStmt",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws-cn:iam::[account id]:role/service-role/StorageGatewayBucketAccessRole8e94d222-b375-4f29-ac2a-99d77c1bf3"
            },
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws-cn:s3:::images-andrew",
                "arn:aws-cn:s3:::images-andrew/*"
            ]
        }
    ]
}

4.点击下一步,确认,等待文件共享状态变为可用。

在Ec2上使用file gateway上的NFS

1.  登录已经创建的临时EC2实例。我们将在该机器上测试NFS的配置。

2.  运行以下命令

sudo mount -t nfs -o nolock [gateway私有IP]:/[s3存储桶名] [MountPath]

3.  成功mount后,您就可以在/nfs文件夹看到s3存储桶中的内容了。您可以添加,删除,或者查看这些内容。

注意: 您在/nfs文件夹下的操作会直接映射到gateway缓存实例上。缓存实例会定期和S3做同步。所以如果您添加了一个文件在/nfs中,过若干秒就能在S3存储桶中看到它了。

注意事项

Gateway缓存实例在该架构中为一个潜在的单点故障,建议使用一些机制来减小它的影响。比如在该机器上设置自动恢复机制。详情请参考:

https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/ec2-instance-recover.html

发表在 Visions of DATA, 数据库 | 留下评论

新推出 – Registry of Open Data on AWS (RODA)

新推出 – Registry of Open Data on AWS (RODA)

将近十年前,我的同事 Deepak Singh 在为研究、分析和开发人员分页一文中介绍了 AWS 公用数据集的概念。我很高兴地告诉大家 Deepak 仍然是 AWS 团队的重要成员,公用数据集项目仍在不断发展壮大!

而今天我们宣布推出新的开放和公用数据利器,这就是 Registry of Open Data on AWS,简称 RODA。此注册表包含现有的公用数据集,任何人都可添加自己的数据集,从而在 AWS 上访问和分析。

注册表探秘
首页列举了注册表中的所有数据集:

输入搜索词以仅显示匹配的数据集,从而缩小列表:

每个数据集都有关联的详情页,包括使用情况举例、许可证信息以及在 AWS 上找到和访问数据集所需的信息:

在此例中,我可以使用简单的 CLI 命令访问数据:

此外我还可以通过编程访问数据,或将数据下载到我的 EC2 实例。

将数据添加到存储库
如果您拥有可供公开访问的数据集,并且希望将它添加到 RODA,您只需向我们发送一条 Pull 请求。转至 open-data-registry 存储库,读取 CONTRIBUTING 文档,然后使用 datasets 目录中的一个现有文件为模型,创建描述您的数据集的 YAML 文件:

我们会定期审核 Pull 请求;您可以“添加星标”或关注存储库以跟踪添加和更改。

欢迎让我震撼
我欢迎新数据集的蜂拥而入,也欢迎展示如何以强大而有意思的方式使用数据的博客和应用程序。立即尝试,将您的收获分享给我吧!

发表在 B2C, Visions of DATA, 算法+数据结构 | 留下评论

如何使用Amazon Macie 进行安全数据自动分类和用户行为监控

如何使用Amazon Macie 进行安全数据自动分类和用户行为监控

 

概述

当我们在Amazon S3中存储大量内容时,识别和分类其中潜在敏感数据可能会有点像在一个非常大的干草堆中找绣花针针,整个的过程是非常低效。那么能否有一种工具可以在数据加入到S3后就自动的识别敏感信息并自动进行分类?

同时在我们日常的工作中,访问数据的时间间隔及物理位置相对的固定。如果发生异常的事件,例如原来某个用户一天访问一到两个文件,但如果突然在某天访问超过一百个文件,能否由系统发出告警事件提醒相关人员进行相关检查,确保安全?

本文从如下几部分介绍Amazon Macie服务及主要功能,同时还列出常见使用场景,以及如何配置的简要步骤。希望能给大家带来帮助。

什么是Macie

Amazon Macie 是一种支持人工智能技术的安全服务,可以帮助您通过自动发现、分类和保护存储在 AWS 中的敏感数据来防止数据丢失。Amazon Macie 使用机器学习来识别敏感数据 (例如,个人身份信息 [PII] 或知识产权),分配业务价值,提供此数据的存储位置信息及其在组织中的使用方式信息。

Amazon Macie 可持续监控数据访问活动异常,并在检测到未经授权的访问或意外数据泄漏风险时发出警报。

为什么要使用Macie

对现存的海量文件进行自动的分类并且根据不同的分类制定不同的监控策略,一旦发生异常的访问需要得到及时的告警,是每个组织面临的挑战。

Amazon Macie提供了简单高效并且安全的方案,Macie通过使用机器学习来了解存储的内容和用户行为,同时提供可视化界面,展示安全分类,从而使客户能够专注于保护敏感信息,而不是浪费时间手工的处理。

Amazon Macie内置检测个人身份信息(PII)或敏感个人信息(SP)的常见敏感信息的引擎,可以自动识别出S3存储文件是否包含例如个人身份信息(PII)或其他公司财报等敏感信息,在没有Macie之前,这样的工作都需要手工的处理或者使用第三方平台。而现在可使用Macie很容易解决上述问题。

Amazon Macie持续监控数据和账户凭证 。 在发现可疑行为或对实体或第三方应用程序进行未经授权的数据访问时撤销访问或触发密码重置策略,来防范安全威胁。当Amazon Macie发出警报时,您可以使用预先在Amazon CloudWatch设置的规则发送告警,以便迅速采取行动,保护数据。

Macie主要功能

Amazon Macie首先功能分为两部分,一方面是使用自然语言处理(NLP)来理解数据,Macie可以自动对您的S3桶中的数据进行分类。另外一个是使用机器学习理解用户访问数据的行为,同时利用动态分析数据访问模式的预测分析算法,并使用日常访问的用户行为数据不断的训练并优化模型。

Macie 主要功能

  • 自动化处理数据:分析,分类和自动处理数据,从现有的数据和访问日志分析出有规律的历史模式,用户认证数据,用户位置信息及时间信息。
  • 数据安全和监控: 主动监控 日志数据,检测到的异常情况,转发告警信息到CloudWatch 事件或和Lambda以进行后续处理,例如自动修复安全漏洞或者发送邮件通知。
  • 主动预防的数据的丢失,提供即时保护,无需手动干预。
  • 可视化分析:提供存储数据的可视化详细信息。
  • 数据研究与报告:允许用户管理配置报告。

Macie如何运作

在数据分类过程中,Amazon Macie 识别 S3 存储桶中的对象,并将对象内容流式传输到内存中进行分析。

当需要对复杂文件格式进行更深入的分析时,Amazon Macie 将下载对象的完整副本,并在短时间内保存,直到完成对象的全面分析。Amazon Macie 对数据分类的文件内容分析完毕后,它将立即删除存储内容,仅保留未来分析所需的元数据。

Amazon Macie持续监控分析当前的用户行为习惯并以基础形成基线,例如敏感数据在哪个IP地址以及何时以什么样的频率被进行访问。随后Macie持续监控CloudTrail日志并训练机器学习所使用的模型,,一旦发现可疑的访问活动,Macie可以及时发出告警。

示意图如下:

信息分类

Amazon Macie已经定义好信息分类标准:

  • 配置合规性 – 与合规性内容策略,配置设置,数据日志记录以及补丁级别相关​。
  • 数据合规性 – 与合规性或安全控制内容的发现相关,例如存在个人身份信息或访问密钥。
  • 文件托管 – 与恶意软件,不安全的软件或攻击者的命令和控制基础架构相关的托管主机或存储服务。
  • 服务中断 – 可能导致无法访问资源的配置更改。
  • 恶意软件或活动- 潜在的恶意软件或活动。
  • 可疑访问 – 从风险异常的IP地址,用户或系统访问您的资源 。
  • 身份枚举 – 一系列API调用或访问,枚举系统的访问级别,可能指示攻击的早期阶段或受到破坏的凭据。
  • 特权升级 – 成功或不成功的尝试,以获得对通常受应用程序或用户保护的资源的高级访问,或尝试长时间访问系统或网络。
  • 匿名访问 – 尝试从IP地址,用户或服务访问资源,以隐藏用户的真实身份。 例如包括使用代理服务器,虚拟专用网络和其他匿名服务,如Tor。
  • 开放许可 – 识别受潜在过度允许访问控制机制保护的敏感资源。
  • 位置异常 – 访问尝试敏感数据的异常和危险的位置。
  • 信息丢失 – 敏感数据的异常和冒险访问。
  • 凭证丢失 – 可能损害您的凭据。

告警严重级别

Macie 内置了5种告警信息级别

  • 严重(Critical) – 该级别可能导致信息机密性,完整性和可用性受到损害的安全问题。建议将此安全问题视为紧急情况,并实施立即的补救或加固措施。
  • 高 –该级别可能导致信息机密性,完整性和可用性受到损害的安全问题。建议将此安全问题视为紧急情况,并实施立即的补救或加固措施。
  • 中等(Medium) – 该级别可能导致信息机密性,完整性和可用性受到中等性损害。建议在下次更新服务期间修复此问题。
  • 低(Low) -该级别可能导致信息机密性,完整性和可用性受到低等性损害。建议您将此问题作为未来服务更新的一部分。
  • 信息(Informational) – 该级别警告只描述基础架构的特定安全配置详细信息。根据相关业务和组织目标,可以简单地记录这些信息或使用它来提高系统和资源的安全性。

注:严重(Critical) 和高(High)之间的主要区别:

产生严重(Critical)警报的事件可能导致大量资源或系统受到损害。

产生高(High)警报的事件可能导致一个或多个资源或系统受到损害。

开始使用Macie

需要配置的IAM 角色

创建身份访问管理(IAM)角色,为Macie提供对您的AWS帐户的访问权限。这些角色只需要创建一次,以便在所有地区使用。

我们以Oregon区域作为例子 ,可以通过启动下面列出的URL中找到的AWS CloudFormation堆栈模板来创建这些角色和所需的策略。

https://s3-us-west-2.amazonaws.com/us-west-2.macie-redirection/cfntemplates/MacieServiceRolesMaster.template

配置Cloud Trail服务

首先需要建立相应IAM Role, 确保Amazon Macie能够访问S3及 CloudTrail,另外是要启动CloudTrail服务以对相关的AWS API操作进行分析。

开始使用Macie服务

添加需要管理的S3 存储桶

需要在Macie中添加需要访问S3存储桶并对其中的文件进行统计分类。

步骤如下:

1.     进入Macie Console 页面,点击 Integrations 页面后,选择SERVIES 标签页面,点击 Select an account 下拉框

2.     选择 Amazon S3 Detail

3.     选择Selected S3 buckets and prefixes

4.     选择Macie分析的S3 bucket

文件分类

在Macie中添加需要分析的S3 存储桶后,Macie会自动开始分析其中的文件,稍等一段时间后,进入Macie的Dashboard 页面。

在Dashboard中共提供10种视图,为了演示本文章仅仅展示其中的两个。

S3文件分类统计结果

S3文件分类统计详细结果

用户行为分析

根据CloudTrail的日志,Macie自动分析所有IAM user的相关操作。根据Macie预先定义的规则,把IAM用户分为如下四类:

  • 白金:这类IAM用户或角色曾有管理员或root用户的高风险API调用的历史,例如创建用户,授权安全组入口或更新策略。 应对这类帐户进行重点监控。
  • 黄金:这类IAM用户或角色曾有创建与基础设施相关的API调用的历史,这些API调用标志其具有高级权限,例如创建实例或拥有向Amazon S3写入数据的权限。 这些帐户应密切监控。
  • 白银:这类IAM用户或角色曾大量中等风险的API调用的历史,例如Describe和 List操作或对Amazon S3的只读访问请求。
  • 青铜:这些IAM用户或角色通常在AWS环境中执行较少量的Describe 和List  API调用。

Macie使用如下的界面展示用户行为分析。

告警管理

Macie内置了40种告警规则,我们可以根据实际情况选择启用或者禁用该规则。

下面我们选择级别为 严重(Critical) 的告警规则进行分析。

从上图可知该告警的规则是 “如果 IAM Policy 设置 S3存储桶可以被任何人可读,那么触发告警”, 告警样例如下:

添加自定义告警

Macie不仅仅支持内置的告警规则设置,同时也支持自定义规则的定义。

场景:

根据 Macie 定义的规则,如果文档中包含 “merger, acquisition, divestiture, reorganization, consolidation, demerger, restructuring, rebranding, takeover, subsidiary” 关键字,那么该文档会被分类为 “Corporate Growth Keywords”的类别。

现在假设用户往S3上传了具有上述关键字文档,可能存在信息泄漏的风险,需要发送告警严重级别为 “Medium”的告警。

下面演示如何添加自定义告警

1.     进入Macie Console

2.     点击 Setting-> Protect data –> Basic alerts

3.     点击 Add New 按钮

4.     按照如下样例填写

Alert Title: Test Customer Alert

Description: Test Customer Alert

Category: 选择 Information Loss

Query: themes:” Corporate Growth Keywords ”

Index: 选择S3 objects

Min number of matches:1

Severity:Medium

Whitelisted Users: 不选

5.     点击 Save 按钮.

6.     往S3上传如下内容的word文件

7.     上传成功(存储桶名字暴露了)

8.     回到DASHBOARD界面,收到告警

注:在Alert中定义最关键的部分是Query, Macie会把Query中的内容使用JavaCC转换成Lucene Query。有关查询语法的更多信息,请参阅Apache Lucene – Query Parser Syntax

如下是常见搜索的示例:

  • 搜索任何不是源自Amazon IP地址的控制台登录:

eventNameIsp.compound:/ConsoleLogin:~(Amazon.*)/

  • 公共S3存储中的PII(Personally Identifiable Information)

filesystem_metadata.bucket:”my-public-bucket” AND (pii_impact:”moderate” OR pii_impact:”high”)

同AWS其他服务集成

Amazon Macie 可以同其他AWS服务集成。如下示例如何使用CloudWatch和SNS集成。具体演示如下:

1.     创建SNS并使用相应的邮箱确认

2.     在CloudWatch 创建Rule

3.     收到告警邮件

更改S3元数据(Metadata)的保存周期

缺省条件下,Macie保存S3 元数据的周期是一个月,但可以系统支持该周期最长为12个月。更改步骤如下:

  1. 进入Macie Console
  2. 点击 Integrations -> Choose retention duration for S3 metadata –> Select a range

总结

Macie使用机器学习算法自然语言处理S3中存储的数据,并且使用上下文信息对信息进行分类,并给数据分配相应的业务价值标签。自动发现分类和保护存储在AWS中的敏感数据,同时持续检查S3桶中PUT请求的CloudTrail事件,并几乎实时自动对新对象进行分类。同时监控CloudTrail的API日志,识别出日常的用户行为模式,一旦Macie发现异常的行为,可以及时的发出告警。

通过Macie,可以方便的实现数据安全自动化,及数据可视化和数据丢失防护。

 

作者介绍
刘春华,AWS 解决方案架构师,AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内和全球的应用和推广,在大规模并发应用架构、无服务器架构,人工智能与安全等方面有丰富的实践经验。 曾任IBM云架构师,对企业应用迁移到云及应用系统改造有深入的研究。

发表在 B2C, Visions of DATA, 算法+数据结构 | 留下评论

Farewell

  尘不落,埃不定。     —— 林歌

goodone

我对自己说,至少还是要去一次pts,以此结束我对他们的单向承诺,让我可以安心的开始做我要做的事。我这样说并非以后不会再去,只是担心以后可能无法按时每年都去。

这几年因为这件仪式化的事务,不免每年都会重新思考,不时也会陷入相同的情绪,无法遏止。而这次去的时候,没有难受与压抑,没有任何同情和怜悯的涟漪,当然也不会有黯然之泪。回来之后我也惊讶于我此次的平静。

或许如李所体悟,她自从某人逝去之后才开始觉得那句“四月是最残忍的季节”如此真切。当我从goodone 镜之花砖走出来的时候,满目的新绿,简直就是两个世界。

宝罗说:“外面阳光灿烂,你不想看一看吗?”   既然这个季节里能绽放新生机的无不是先死而后生,那么这个机会必是自然之赏赐,期限一年。

 

 

发表在 Mind and life, 一期一会 | 留下评论

Amazon 的推荐系统到底行不行?

推荐系统从长期用户价值来看更有用处,它现在绝不仅仅是一个算法或者一项功能了,它承载着传递用户价值的重大作用。

本文转载自 ResysChina,作者 @clickstone,极客公园已获得转载授权。


亚马逊在业内有「推荐系统之王」之称,亚马逊有 35% 的销售额是与推荐系统相关的 [1]。但是最近,微软的研究员 Amit Sharma 发表了一篇 paper《Estimating the causal impact of recommendation systems from observational data》[2],对这个事情提出了质疑。这篇论文分析了 Amazon 上 4000 种不同商品的相关数据,认为与我们通常归因于推荐系统的点击次数相比,实际上仅有四分之一真正是由推荐系统引起的,其他四分之三和推荐并没有关系。

论文里举了一个例子,如下图左图,大家主要看一下红圈标明的地方,这是 Amazon 的单品页上非常重要的一个推荐位「Frequently Bought Together / 经常一起购买的商品」。冬天来了,小明想买一顶帽子御寒,他在 Amazon 上看中了图中的这顶帽子,这个时候 Amazon 向小明推荐说,买这顶帽子的人通常还会买红圈里的那副手套,而恰好小明也需要一副手套,所以就一起下单了。例子中手套的销售通常被认为是推荐系统的作用。

屏幕快照 2016-07-11 15.49.58.png

而论文作者的观点是,即使没有推荐,如上图右图,小明因为御寒的需要,一样会寻找并购买一副手套,因此这种购买不应该计入推荐系统。作者把没有推荐系统就不会发生的点击称为「因果性点击」,而把上例中小明购买手套的点击成为「便利性点击」——有没有推荐系统手套的购买都会发生,推荐系统仅仅是带来了「便利性」。论文试图用实验的方法来证明,推荐系统带来的绝大部分点击都是这种「便利性点击」,因此推荐系统的价值很大程度上被高估了。

为了干这个事情,论文作者发明了一种称为「Shock-IV」的测量方法。论文的实验数据来自于 Bing 工具条用户的真实访问日志,包括了 210 万匿名用户在 2013-14 年间的 9 个月时间内对 Amazon 上 140 万商品的访问记录,并以推荐系统中最最常见的推荐形态「Customers who bought this also bought / 买了还买」作为评价目标。具体的细节我这里略去不表了,有兴趣的同学可以自己去读一下 paper。论文的结果如下图。

屏幕快照 2016-07-11 15.50.22.png

图中显示了使用 Shock-IV 方法得到的因果性点击率(CTR)的估计值(绿色曲线),同时为了对比,还给出了把便利性点击计算在内的推荐系统点击率(红色虚线)。可以看到,例如书这个品类,因果性点击率只有 5%,而我们通常认为 10% 以上点击是来自于推荐系统。对于不同的商品类别,相比于推荐系统真实有效的点击,即因果性点击,我们通常会高估了 200% 的推荐效果。接下来是论文的常见套路之列举不足,然后给出了结论,他们使用的 Shock-IV 这套实验方法是相当 data-driven 的,有很大的应用价值应该推而广之。

有人把这个实验结果 po 到了 Quora 上 [3],结果推荐领域的大神 Xavier Amatriain 怒了。

熟悉推荐领域的人想必都知道 Xavier 的大名,他上一份工作是 Netflix 推荐团队的负责人,现在是 Quora 的工程 VP。Xavier 之所以对这篇论文很不满,一个重要的原因是他认为原论文的作者是在他们领域里受到尊重的研究人员,而这篇论文本身却既不严谨又缺乏行业认知,大牌研究人员发布不靠谱的结论,误导性非常大,因此他有必要站出来拨乱反正。

针对前文中「帽子-手套」的例子,Xavier 认为原论文提出的问题——如果没有推荐用户会怎么做——是毫无意义的。在没有推荐的时候,用户会有两个选择:1)自主选择其他一副手套;2)抛弃你的服务,去别的地方。实际上,第二个选择是非常值得关注的,且与原论文的另一大缺陷相关:仅是简单地使用 CTR 来评估推荐系统。一个推荐系统的好坏不仅仅取决于有一个更好或更坏的 CTR,非常重要的一点是,它有助于减轻用户寻找到「正确选择」的负担。假设两个网站 A 和 B,在网站 A 里用户 3 秒内就找到了他想要的东西,而在网站 B 需要 3 分钟,那么显而易见地用户会更经常使用 A 网站。换句话说,推荐系统带来的不仅仅是简单的点击,更重要的是让用户「重复使用」。

原论文中对「推荐」的定义太过狭隘,暂且不说现如今很多搜索结果都是个性化过的,像 Amazon 这样的网站,推荐几乎已经无所不在了。而「便利性点击」恰恰正是推荐系统所追求的目标之一。推荐系统让用户生活更容易、更便利,从长期上看,用户因此会购买更多商品,或者对服务的满意度更高。所以从实践意义上看,原论文定义的问题根本就是个杯具。当我们使用 A/B 测试衡量一个推荐系统的效果时,我们更加看中的是推荐是否让用户「爽」了,用户使用服务爽了,就会带来更多的活跃与营收。「便利性」不是给推荐系统添乱,它是使用推荐系统应该具备的固有益处。

另外,原论文中说因为数据层面的限制他们做不了在线的 A/B 测试,很多人很多场景也都做不了,因此它们提出的 Shock-IV 可以作为推荐系统 A/B 测试的一种替代方案。Xavier 的意思是,你们别闹了,并给出了他之前在前东家 Netflix 的一个案例,在「Netflix 推荐系统的最新解读:算法、商业价值与创新」一文中,Netflix 发现个性化技术可以显著提高推荐影片的被接受度(Take-Rate),即推荐给用户的影片真正被播放的比率。Netflix 做了一个对比分析,见下图,黑色线是基于热门度的曲线,红色线是基于个性化 PVR(Personalized Video Ranker)指标的曲线,个性化推荐使得接受度有了巨大的提升。而且除此之外,比接受度提高更有意义的是,优秀的推荐技术使得用户的参与度(观看时长)与退订率都受益匪浅。Netflix 的月退订率很低(很小的个位数百分比),大部分是因为支付的问题,真正主动选择退订的非常少。通过在个性化推荐领域的多年耕耘,月退订率得以降低了可观的百分比。月退订率的降低,一来有效延长了会员的付费存续期,二来也降低了为弥补流失用户所要付出的成本。

屏幕快照 2016-07-11 16.01.08.png

Xavier 列举了他认为原论文中的不妥之处,包括:

  • 实验的设定根本就是错的;
  • 对于推荐系统工作方式的假设也是错的;
  • 核心概念的定义过于苛刻,与应用的现实场景脱节;
  • 实验受到了这么多的假设和约束,但没有发现这些限制有任何好处;
  • 由于实验方法的这些限制,需要仔细考虑实验结果的局限性;
  • 最后得到的实验结果,并没有与任何公认的结果进行对比。

在 Quora 的回答里,Xavier 围绕这些问题一一进行了反驳,内容很长,建议大家去仔细读一读原答案,对大家学习理解推荐系统会非常有帮助。

其实关于如何评价推荐系统的作用,很早以前在 ResysChina 论坛里同学们也有过很多的讨论。比如,如果以 CTR 为考核指标,把豆瓣电影单品页中「喜欢这部电影的人也喜欢」这部分换成推荐热门电影,这样这部分的点击率会提高很多。但如果考察用户点击的深度,即点击了推荐项之后又继续沿此路径发生了多少次点击,推荐系统给出的结果就要远超热门结果了。所以推荐系统从长期用户价值来看更有用处。

Amazon 对待推荐系统价值的认知,《一键下单》书中有一段 Amazon 创始人贝索斯自己对它的评价:

我想我们能做的就是利用先进技术,例如联合过滤(推荐系统最经典的算法)以及其他技术来加快找书速度。打个比方,如果你今天走进一家书店,发现一本让你灵魂出窍的书的可能性是 1/1000,我们想利用技术来了解你本人,并使这种机会增加到 1/300,然后是 1/100。经过几年的努力以后,使这个概率变成 1/50,等等。这将为人们创造巨大的价值。再伟大的商人也没有机会逐个地了解他们的顾客,而电子商务要使这成为可能。

而且贝索斯还曾拿推荐系统作为武器来制衡供应商,《一网打尽》中提到过这个事情:

亚马逊在和大型出版商谈判的时候,就会使用他们的「推荐系统」作为杀手锏。如果出版商没有达到他们的要求,亚马逊就威胁将他们的书从人机自动化推荐系统中撤下,这也就意味着他们将不会向客户推荐这本书。最开始出版商根本不知道亚马逊这样做会有什么效果,他们大多数人不知道他们销售额增长的原因正是因为他们处于显眼的推荐位置。亚马逊通过这种方法来展示其强大的市场力量。如果一家出版商不妥协,亚马逊就会关闭推荐其书目的算法,出版商的销售额一般会下降 40%。然后,通常 30 天左右出版商就会回过头来说,「哎哟,我们怎么做这项工作?」

这个故事也从侧面印证了原论文的假设是多么不靠谱。简单讲,这篇被批判的 paper 最大的问题之一,就是把推荐仅当做「买了还买」这么一项功能来看,推荐系统现在绝不仅仅是一个算法或者一项功能了,它承载着传递用户价值的重大作用。

最后,关于「买了还买」这个推荐领域的经典应用,在 Greg Linden 的《Early Amazon》[4] 也里有过相关的内容,推荐给大家:

亚马逊有一个广为人知的功能,「买过某本书的顾客还买过」。这是发现相关书籍的绝佳途径。

在内部,我们管这个功能叫做「相似推荐」。通过使用这个功能,不断地从一本书跳转到另一本书,叫做「相似推荐漫游」。

这个功能的第一版是一位叫做 Eric 的攻城狮开发的,他很聪明,开发经验也很丰富。和 Eric 一起工作的感觉很棒,从他身上我学到了很多。

第一版的相似推荐功能非常受欢迎。但是它有一个问题,即所谓的「哈利波特问题」。

嗯,是的,就是那个哈利波特。哈利波特是那种老少通杀的畅销书,孩子会买它,大人也会买它,所有人都会买它。

然后你可以任选一本书。当你关注买了这本书的顾客还买过其他哪些书的时候,放心吧,其中的大多数顾客都买过哈利波特。

这种相似推荐是没有太大用处的。你感受一下,当你在浏览《The Psychology of Computer Programming》这本书的时候,给你推荐哈利波特是不是挺没用的。如果能够推荐《Peopleware》和《The Mythical Man Month》,就有用多了。

要解决这个问题并不像乍看起来那么简单。有一些显而易见的解决方案会带来另外的问题,其中一些甚至比哈利波特问题本身还要严重。

通过大量的实验,我发明了一种新的相似推荐方法,工作得相当不错。新方法给出的相似推荐,更新颖也更有帮助。而且与此同时,我还对程序性能做出了一些提升。整个过程非常有趣。

当这个新版本的相似推荐功能上线之后,贝索斯冲入我的办公室,跪倒在我面前,向我高呼,「你丫的酷毙了!你丫的酷毙了!」

我和我的小伙伴们都惊呆了,不知道该作何反应,即使到现在回想起来,仍然会觉得手足无措。那一刻,永远地停留在了我的记忆中。

屏幕快照 2016-07-11 15.53.08.png

对《Early Amazon》全系列感兴趣的,请关注 ResysChina 微信公众号,回复「amazon」即可。

参考资料:

[1] https://www.quora.com/Was-Amazon-s-recommendation-engine-crucial-to-the-company-s-success

[2] https://medium.com/@amit_sharma/how-much-traffic-do-recommender-systems-actually-cause-2e0c6708801f

[3] https://www.quora.com/What-do-Recommender-Systems-experts-think-of-the-Estimating-the-causal-impact-of-recommendation-systems-from-observational-data-paper

[4] http://glinden.blogspot.com/2006/03/early-amazon-similarities.html

 

 

 

 

Amazon 的推荐系统到底行不行?

发表在 B2C, 算法+数据结构 | 留下评论

密码保护:无条件协议

这是一篇受密码保护的文章,您需要提供访问密码:

发表在 Mind and life | 要查看留言请输入您的密码。