他的有生之年

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

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

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

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

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

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

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

 

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

Aaron Swartz

发表在 Mind and life, Xmind | 留下评论

L’odyssée

If you are very unhappy one day. Remind yourself that we are just grains of stardust, some atoms fell from dying stars. We are only here in this world for a short moment, short as in the twinkling of an eye to the timescale of the Universe. So, enjoy your life. Enjoy it! It’s life that is the most thriving being in this world. Then, we live on.

发表在 Mind and life | 留下评论

她写的只是自白吧

【第三书】

四月二十九日

絮:

下午四点多时有一通电话,昨晚信写得太晚,人还在床上,今天的一天还没展开,一瞬间觉得可能是你打来要关心免免的葬礼,但来不及爬起来电话铃声就停了。我放弃了可能是你打来的念头。在这段努力要将我甩开、视我如洪水猛兽的时期,你大约不可能勉强榨出几滴真心关爱来罢。

絮,你这个月对我的所作所为是错的,你对待我的态度是错的;我必须对你这样说。站在一个人对人的立场上来讲,尽管我较你年长老成,尽管你再怎麽年轻不懂事,但每个人一生都要对自己做过的事,以及对他人犯过的错负责,每个人在内心里都逃不掉那份责任的,我也是,我也在为我对他人所犯的罪做偿还。

我认为人与人之间是有情有义的,至於情义的内容或范围是视两人间的默契或誓约而定的。人的内在、生命、人格的「一致性」愈高,就愈能真实地、诚信地活在这样的默契里;人间的这种「一致性」太低,就会不断地去对他人犯错,内在产生混乱,或是不得不完全封闲自己的精神。这种「一致性」就是Gabriel Marcel所探讨的fidelite(忠诚)的问题核心。这一个月,我又更用心地去研Marcel,我发现我的生命已发展到可以更加懂得他的整体精神,也可以和他的关怀范畴整个叠合了。我很高兴,像是找到知交一般,想要学小提琴有一部分也是被他所感动,想要追随他。

 

———————————————————————————————————-

她写的只是自白吧,也只能自白于己

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

beyond feeling 01

发表在 Mind and life, Xmind | 留下评论

以结果为导向的节奏

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

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

发表在 Mind and life | 留下评论

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

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

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

发表在 B2C | 留下评论

日本服饰 80s

日本杂志-夏之梦

春之媚

 

 

 

 

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

密码保护:枫色

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

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

贯与通

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

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

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

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

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, 数据库 | 留下评论