【原创】360购物小蜜的背后:探推荐引擎初探

来源:互联网 发布:js date 函数 编辑:程序博客网 时间:2024/05/04 13:05

360购物小蜜的背后:探推荐引擎初探


作者:jxy (360电商技术组)

 

 

相信经常上网的小伙伴,已经习惯了网站为大家做出的各种个性化推荐:京东会推荐你喜欢的电子设备,淘宝会推荐你爱吃的零食,爱奇艺为你推荐“长腿欧巴”的影片……当前推荐系统已经无时无刻影响着大家网上体验了。而360购物小蜜(mi.360.cn)的是一款用户在访问电商网站的时候,给用户找到最低价的相关商品和用户可能会喜欢的商品的小软件,帮助用户进行购物选择和给用户推荐喜欢的商品。

 

所有这些推荐结果都来自于推荐系统精密、复杂的一些列处理过程它依靠背后数以百计的计算机强大的计算能力,经过分析、挖掘用户数以亿计的上网行为(浏览、购买、收看、收听等),从而为用户挑选出他可能会喜欢,可能要购买的内容信息。

 

推荐系统前所未有的将更便利、友好的体验带给用户。推荐系统的设计初衷是为了提高电商网站的销售额,而现在,推荐系统几乎成为了各网站的标配,其身影无处不在。

 

近些年来,推荐系统有了相当大的进展,不再是类似随机预测的简单粗陋;随着用户数据的增长以及不同类型数据的增加,推荐系统将创新算法应用于这份大数据之上,使得系统预测的准确性得到不断的改善,可以不夸张地说:推荐系统越来越了解你,早晚有一天它会比你自己更了解你。

 

  (老版)

 
​(新版)


不知道大家有没有注意到浏览器左下角的这个小东西,别看这个小条不大,是360电商技术部N名性感帅气的工程师数百个昼夜、code无数才有了今天小蜜的靓丽!

 

接下来,通过360购物小蜜带大家一起了解下常规推荐引擎的内部构造。


 

小蜜是如何“猜你喜欢”的

 

首先,你在小蜜眼里是什么样子呢?

答案是,你是一个很大很大的表格里的一串数字。对,你就是大学数学里学过的,矩阵中的一行,一个向量而已。这串数字记录着你看过的每一个商品,在淘宝上搜索过的每一个词;你只是几千万个向量中的一个,当所有人在网上浏览商品时,这个巨大矩阵中的数字不断的变化,实时影响着小蜜为你推荐的结果。

 

 

 

协同过滤

 

推荐系统的算法有很多种,其中“协同过滤”是一种比较早而且效果很明显的一种算法。协同过滤的主要思想是,利用用户过去的行为或者意见来预测用户当前可能喜欢那些东西或者对哪些内容感兴趣。

 

基于用户的推荐

 

试想一下,如果一些跟你臭味相投的一群好基友看上了一款最新的nike鞋,那么这时候你是不是也会心动呢?

先看一个例子,下面的表格代表用户对商品的喜好,

 

 

 

现在假设你对商品的喜好向量如下

 

 

商品1

 商品2

 商品3

 商品4

商品5

3

3

1

1

 

假设这时的你对商品5还一无所知,那么小蜜该如何评价你对商品5是否喜欢,以及喜欢程度呢?

 

最紧要的事情一定是先找到和你臭味相投的人,所谓臭味相投就是和你有相似兴趣的人。对于如何确定这部分相似用户集,我们的小蜜会使用一些计算相似度的算法。这里我们使用一个叫做Pearson相关系数的算法,用户a和用户b的相似度sim(a,b)用下面的公式来计算:

 

 

由此可以算出你和每一个用户的相似度,从中找到和你最相似的用户。

好了,既然已经找到了和你相似的用户,那么又怎样知道你是否对商品5的感兴趣程度呢。为了预测商品5,我们需要考虑重视那些和你相似度高的用户意见(评分),即跟你相似的用户如果喜欢商品5,那么你就有一定的概率喜欢这个商品。在这个例子中,很显然更应该采取xx的意见。为了综合大家的意见,下面公式考虑了最相似的N个用户的意见,计算用户a对物品p的预测值公式:

 

 

怎么样,很简单吧,好多女孩子上街买衣服,一定要带上自己的闺蜜,在挑选衣服的时候给出合适的意见,就是这个道理。所以说呢,我们的小蜜并不是冷冰冰的一台机器,她可以是你的好闺蜜,也可以是好基友。在小蜜看来,所谓的机器学习,更多的是要学习人,要有感情。

 

 

基于物品的推荐

 

尽管基于用户的协同过滤方法已经成功的应用在了不同的领域,但是该方法有一定的局限性,相信很多聪明的小伙伴都已经看出来了,例如,商品实在太多了,每个小伙伴仅仅对其中的一部分商品有浏览、购买行为,这样用户两两之间有共同评分的就很少了,即找到很少的相似用户。而且这种方法要从几千万用户中找到相似的好友,可以想想看,小蜜从几千万的用户中找一圈需要多久啊,无法实现在线推荐。因此,一种不同的技术被引入进来:基于物品的推荐。

 

基于物品的协同过滤算法主要思想利用物品之间的相似度,而非人之间的相似度来计算预测值。

仍然以上面的例子,先找到与物品5相似的物品,然后看看你对这个相似物品集中的物品的喜好程度。如你已经买了一个篮球,买了一个打篮球的大裤衩,那么你一定需要一双篮球鞋。

 

所以呢,我们接下来先要计算出与物品5的相似的商品集合。上面的表格我们现在来竖着看,以商品作为向量,来计算两两的相似度,这样可以看出相似的商品在相同的人群中所被喜欢的程度是一样的,比如,喜欢篮球的人和不喜欢篮球的人,对篮球相关商品的评价总是一致的。聪明的小伙伴肯定在心里嘀咕,这不就是代数里面的矩阵转置吗。。。

 

然后我们开始计算相似度吧,下面还会有一个大家非常熟识的数学概念:三角函数的余弦定理。

 

 

计算两个商品的相似度使用两个向量之间的夹角来计量,即两个向量夹角越小越相似,为了量化计算,我们使用夹角余弦值来表示。a和b两个物品的相似度如下公式所示:

 

 

确定了物品之间的相似度之后,我们就可以通过计算用户对所有与商品5相似的商品加权评分总和来预测用户对商品5的评分,公式如下:

 

 

 

 

 

上图就是小蜜通过协同过滤技术的推荐结果

 

 

基于模型的推荐技术

 

协同推荐技术一般分为memory base和model base两种,以上所讲的基于用户的推荐属于memory base。model base的方法都会先离线处理原始数据,就像基于物品的过滤和一些降维技术。

接下来小蜜带大家一起回顾一下大学代数中常见的几个概念。

 

上面的两种方法都需要大量的相似度计算,无论是两两比较用户的相似度还是两两比较商品的相似度,复杂度是多少呢,想必大家都在心里默默的计算排列组合了吧有没有一个办法一步到位把矩阵中所有的相似度都计算出来呢?大家对代数中的矩阵运算——奇异值分解(SVD,Singular Value Decomposition)一定还有印象

 

假设我们有一个矩阵M行N列,这里我们设M=10000000,N=5000000,(大家可以想象一下,如果这个矩阵用5号字体打印出来,会有2个北京市区那么大),奇异值分解就是把上面这样一个大矩阵分解成三个小矩阵相乘,如图所示,

 

 

比如可以把矩阵分解为1000万x1000的矩阵,一个1000x1000的矩阵,一个1000乘500万的矩阵,这三个矩阵的所有元素加起来差不多是原矩阵的三分之一,大大减小了存储量。

 

这三个矩阵有着非常明确的物理含义。第一个矩阵X是对人兴趣的一个分类,每一行可以看成是一个人的兴趣分布,每一列是一个兴趣的维度。例如女装、数码等。这一行的非零元素表示这个人对这个维度的兴趣程度,越大说明越感兴趣。

 

最后一个矩阵是对商品的一个分类,转置一下和用户这个矩阵道理差不多。中间的矩阵是用户兴趣维度和商品的分类主题之间的相关性。

 

这个模型在数学上非常完美,只要对矩阵做一次奇异值分解就能够完成用户的分类,商品的分类,还能得到用户分类与商品分类的相关度。但是这个矩阵分解很难做,因为矩阵实在是太大了,关于矩阵的奇异值分解,小蜜有时间的时候再为各位娓娓道来。

 

有了上面的数据,小蜜就可以很简单的将这些基本数据融合到相关的推荐算法中去了。

 

 

关联规则挖掘

 

相信很多人都听过“啤酒和尿布”的故事。说的是沃尔玛超市中将啤酒放在尿不湿的旁边,这样增加了啤酒的销售额。之所以这样做是因为沃尔玛通过数据挖掘得出,买了尿不湿的人一般都会买两瓶啤酒带回家。后来经过观察得到了合理的解释:一般都是男人去超市买尿不湿,然后顺带着会买瓶啤酒带回家。

 

沃尔玛使用的这个数据挖掘技术叫做“关联规则”。这种技术所采用的方法是通过大规模交易数据的挖掘,识别出类似规则关系的模式。一个更显而易见的规则是“如果用户买了婴儿食品,那么他买尿不湿的可能性会是70%”。有了这种关系,小蜜就可以用来为用户进行推荐

 

我们要做的就是把所有用户行为中,包含 X=>Y例如(婴儿食品=>尿不湿)这样的规则找出来。看起来比较容易,但实际操作起来也是比较困难的事情。还好有牛逼的人搞出了很多算法,例如Apriori,这些算法的目标是自动找出这些规则,并计算这些规则的质量,比较好的规则才能拿来给我们用。

 

关联规则中有两个比较重要的概念,支持度和置信度。关联规则的支持度可以计算包含XUY所有用户行为相对所有用户行为的比例。置信度定义为包含XUY的所有用户行为相对于仅包含X的用户行为的比例。

可以简单的写为下面的公式:

支持度=sum(XUY)/sum(all)

置信度=sum(XUY)/sum(X)

 

小蜜就不为大家写出Apriori的算法了,如果写出来,相信大家一定不会再理小蜜了 ;(

有了支持度和置信度之后,小蜜就可以为大家做推荐了,使用如下公式:

 

 

如果物品的整体评分超过预定义的阈(这个字念yu,四声)值,物品就会被推荐给目标用户。

关联规则看起来是最简单的算法,而且在某些领域中有着优异的表现。不要因为它简单小瞧了它,由于数据量的巨大,实现起来却没那么容易。

 

小蜜偷偷的告诉大家,以后不要用啤酒和尿布的故事来讲关联规则了,时代变了,现在的规则是"啤酒=>手纸"。。。当然"啤酒=>炸鸡"也很火的,所以做推荐的时候要看情景,要灵活运用。

 

 

基于内容的推荐

 

讲了这么多,可以看到,除了用户对物品的偏好,协同过滤技术并没有使用推荐物品本身的任何信息。虽然这些方法能够得到不错的效果,但是要想根据物品的特性以及用户的特殊偏好非常直观选择可推荐物品,用纯粹的协同过滤方法是不可能实现的。为此我们可以将物品的特征描述和用户兴趣的描述做匹配,为用户提供推荐,这样的方法一般叫做基于内容的推荐。

 

首先我们需要使用NLP技术将商品描述成一些列的特征或者叫做属性集,例如一件连衣裙的特征描述:

颜色:白色

款式:泡泡袖

类别:女装

材质:雪纺

风格:森女

 

基于内容推荐系统的一般工作原理是,评估用户还没看到的物品与当前用户过去喜欢的物品的相似程度。在实际情况下,相似度可以由不同方法衡量。

 

下面简单介绍一下TF-IDF模型。

TF-IDF模型是信息检索领域的成熟技术,代表词频和反文档频率。词频描述某个词在一篇文档中出现的频繁程度,一个词语出现的次数越多,那么这个词语越能代表该文档的中心思想。但是现在有了一个新的问题,比如“我们”,“包邮”,这种常见词出现的特别多,就有可能造成这个词TF值不能正确反映出文档中词的重要程度,这时我们可以利用IDF,反文档频率是指仅出现在几篇文档中的词权重应该更高,亦即那些大众词、没有区分度的词应该给予更小的权重。设N为所有文档数量,n(i)为所有文档中出现过关键词文档的数量。i的反文档频率可以用如下公式计算:

 

 

文档j中关键词i的TF-IDF权值可以计算为这两个子量的乘积:

 

 

有了如上定义的特征集及特征的权重计算公式,我们就可以来表示物品的特征权重向量,计算物品的相似度、物品和人的兴趣的相似度。相似度算法可以利用上面提到的两种相似度算法,当然还有很多种相似度算法本文中没有提到,根据不同的场景选择一个最适合的相似度算法。

 

 

基于概率模型的推荐

 

还有一种确定用户是否对一个文档感兴趣的方法,即将推荐问题看作是分类任务,分为“喜欢”和“不喜欢”两类。把基于内容的推荐任务表示成分类问题后,原则上就可以应用各种标准的机器学习技术来实现,这样一个智能的推荐系统就可以自动决定用户是否对某个物品感兴趣。

 

下面简单介绍下基于朴素贝叶斯方法的推荐模型。

按照惯例,小蜜还要带着大家回忆下数学知识,这次是概率论。

大家一定都记得条件概率,对,就是下面这个很简单的概率公式:

 

 

其中X代表某物品,P(Y|X)为喜欢该物品的概率。

这个公式有个简单的前提假设,假设每个物品的特征是独立非相关的,当然有人要有疑问了,疑问很正常,我们就按照这个假设来吧,因为即使这个假设不成立,这个贝叶斯概率已经在各个行业中被验证是非常棒的了。

 

接下来,我们开始计算上面的公式,

右边

 

 

,其中Xi代表这个物品特征向量中的一个特征,如:蕾丝。。。

 

这些概率值都是通过对用户已有的行为数据统计出来的,当有一个新鲜的用户未见过的商品的时候,小蜜就将这个商品首先拆解为特征,然后带入到上面的公式中,就可以计算出一个具体的数值来表示用户对该物品的喜欢程度的,进而判断是否要将该商品推荐给用户。

好了,一个简单的个性化推荐就有了

 

 

怎么样,小蜜是不是已经很了解你了呢?

 

本文介绍了几种简单的推荐模型,还有很多种推荐技术,随着技术的发展,也不断的会有新的方法和理论加入到推荐系统之中,如比目前比较火的深度学习(小蜜偷偷的告诉你,小蜜也有用哦),小蜜有时间的时候再和大家一起慢慢聊。


360购物小蜜官方网站:http://mi.360.cn 




-------------------------------------------------------------------------------------

黑夜路人,一个关注开源技术、乐于学习、喜欢分享的程序员


博客:http://blog.csdn.net/heiyeshuwu

微博:http://weibo.com/heiyeluren

微信:heiyeluren2012  

想获取更多IT开源技术相关信息,欢迎关注微信!

微信二维码扫描快速关注本号码:


0 0
原创粉丝点击