本文引自http://i.cnblogs.com/EditPosts.aspx?opt=1
如果说过去的十年是搜索技术大行其道的十年,那么个性化推荐技术将成为未来十年中最重要的革新之一。目前几乎所有大型的电子商务系统,如Amazon、CDNOW、Netflix等,都不同程度地使用了各种形式的推荐系统。而近来以“发现”为核心的网站正开始在互联网上崭露头角,比如侧重于音乐推荐的八宝盒,侧重于图书推荐的豆瓣等等。
那么,一个好的推荐系统需要满足什么目标呢?
个性化推荐系统必须能够基于用户之前的口味和喜好提供相关的精确的推荐,而且这种口味和喜欢的收集必须尽量少的需要用户的劳动。推荐的结果必须能够实时计算,这样才能够在用户离开网站前之前获得推荐的内容,并且及时的对推荐结果作出反馈。实时性也是推荐系统与通常的数据挖掘技术显著不同的一个特点。
一个完整的推荐系统由三部分构成:行为记录模块、模型分析模块和推荐模块。行为记录模块负责记录能够体现用户喜好的行为,比如购买、下载、评分等。这部分看起来简单,其实需要非常仔细的设计。比如说购买和评分这两种行为表达潜在的喜好程度就不尽相同完善的行为记录需要能够综合多种不同的用户行为,处理不同行为的累加。模型分析模块的功能则实现了对用户行为记录的分析,采用不同算法建立起模型描述用户的喜好信息。最后,通过推荐模块,实时的从内容集筛选出目标用户可能会感兴趣的内容推荐给用户。因此,除了推荐系统本身,为了实现推荐,还需要一个可供推荐的内容集。比如,对于音乐推荐系统来说,一个音乐库就是这样的内容集。我们对内容集本身需要提供的信息要求非常低,在经典的协同过滤算法下,内容集甚至只需要提供ID就足够。而对于基于内容的推荐系统来说,由于往往需要对内容进行特征抽取和索引,我们就会需要提供更多的领域知识和内容属性。这种情况下,还是拿音乐举例,歌手、流派之类的属性和音频信息就成为必需的内容集信息。
迄今为止在个性化推荐系统中,协同过滤(Collaborative Filtering)技术是应用最成功的技术。目前国内外互联网上有许多大型网站已经应用这项技术为用户更加智能的推荐内容。如果你想要研究协同过滤,一定不能错过MovieLens(
http://movielens.umn.edu/)。它是协同过滤最著名的研究项目之一。
第一代的协同过滤技术,又被称为基于用户(User-based)的协同过滤。基于用户的协同过滤,基本原理是基于用户行为选择的相关性。用户的行为选择这里指的是下载、购买、评价等等能够显式或者隐式体现出用户喜好的行为。在一个典型的基于协同过滤技术的推荐系统中,输入数据通常可以表述为一个m×n 的用户内容矩阵R,m是用户数,n是内容数。矩阵的值与内容的类型有关,通常由行为记录模块决定。如果内容是网上书店中的书,则矩阵的值可以表示用户购买与否,例如1表示购买,0表示没有购买;或者表示用户对它的评价有多高,这样的评价值就可以有几个等级,比如常见的1~5级评价制。
基于用户的协同过滤,通过比较目标用户的一系列行为选择和其他用户之间的相似性,来识别出一组相互具有类似喜好的用户,又可以称为“同好”。一旦系统能够识别一个用户的同好用户,就能够将他们最感兴趣的内容作为当前用户的推荐结果推荐给这个用户。也就是说,以前的行为选择与你相似的用户,在以后的行为中很可能也会和你相似。因此将这些用户做为基准来向你推荐内容。
协同过滤的核心问题是寻找与目标用户兴趣相近的一组用户。这种相似用户通常被称为最近邻居(Nearest Neighbor)。用户之间的相似度是通过比较两个用户的行为选择矢量得到的。目前,比较行为选择矢量的相似度计算方法有许多种,比较经典的算法包括泊松相关系数(Person Correlation Coefficient)和余弦相似性(Cosine-based Similarity)。
“最近邻居”产生后,我们就能够计算得到用户最可能感兴趣的内容集(也叫做TopN推荐集)。为了得到推荐集,分别统计“最近邻居”中的用户对不同内容的兴趣度,取其中排在最前面的内容作为推荐集。下面是一个简化的示例:假如用户张三有两个同好:李四和王五。
张三喜欢看电影A;
李四喜欢看电影A,B,C和D;
王五喜欢看电影A,B,D,E和F;
这样,推荐系统就能够过滤出相似用户都喜欢的电影B和D作为张三最可能也会喜欢的电影推荐给张三。
基于用户的协同过滤技术在个性化推荐系统中获得了极大的成功,但它有自身的局限性。推荐集的产生方式意味着一个内容只有已经被用户选择(购买)后才有机会被推荐给其他用户。对于一个网上书店来说,新上架的书因为还没有被相当数量的用户购买或者评价的记录,便很少有机会被用户的“最近邻居”筛选进入推荐集。这个问题,也被称之为协同过滤的“冷启动”问题。
此外,因为计算用户的相似度时,是通过将目标用户的历史行为记录与其他每一个用户的记录相比较得出的,所以对于一个现实的推荐系统来说,扩展性将成为非常严重的问题。设想一下,对于一个拥有上百万用户的网站来说,每计算一个用户都将涉及到上百万次的比较,更不要说其中会带来的大量数据库IO操作的开销。
于是第二代基于内容项(Item-based)的协同过滤技术就产生了。与基于用户的技术不同的是,这种方法比较的是内容项与内容项之间的相似度。Item-based 方法同样需要进行三个步骤获得推荐:1)得到内容项(Item)的历史评分数据;2)针对内容项进行内容项之间的相似度计算,找到目标内容项的“最近邻居”;3)产生推荐。这里内容项之间的相似度是通过比较两个内容项上的用户行为选择矢量得到的。举个例子,假设用户和内容项如下:
|
电影A |
电影B |
电影C |
电影D |
张三 |
喜欢 |
|
|
|
李四 |
喜欢 |
喜欢 |
喜欢 |
喜欢 |
王五 |
不喜欢 |
|
不喜欢 |
不喜欢 |
赵六 |
喜欢 |
喜欢 |
|
喜欢 |
可以看出,电影A与D是最相似的。因为张三喜欢A,所以电影D就可以推荐给张三。
不论是第一代的基于用户方法,还是第二代的基于内容项方法,都不可避免的遇到数据稀疏的问题。在任何一个网站中,用户的评分记录或者购买记录,相对整个可供选择的内容集来说,都是很小的一部分。所以在许多推荐系统中,每个用户涉及的数据量相当有限,在一些大的系统如Amazon中,用户最多不过就评价过上百万本书的1%,造成评估数据相当稀疏。当用户评价过的内容之间找不到交集时,就难以判断用户的口味是否相似,难以找到相似用户集,导致推荐效果大大降低。为了解决用户数据的稀疏问题,最方便的办法就是将用户对没有选择过的内容项的评分设为一个固定的缺省值,例如用户的平均评分。针对如何预测遗漏的评分业内又提出了很多种方法,不过一般来说采用最简单的改进方法就可以有效地提高协同过滤推荐系统的准确度。
另外一方面,即便采用了基于内容项的方法,在数据量巨大的时候,计算复杂度仍然成为性能瓶颈。为了进一步解决协同过滤技术的扩展性能问题,目前比较有效的办法是在用户评分数据上做一次聚类分析(clustering)。聚类技术首先将具有相似兴趣爱好的用户分配到相同的分类中。聚类产生之后,它或者将“最近邻居”搜索对象限制在最相近的聚类中,根据类中其他用户的评价预测目标用户的评价,或者用聚类的中心作为近似提取推荐结果。由于用户之间的分类相对变化比较小,因此聚类过程往往可以离线进行,而无需实时计算,这样就大大降低了实时推荐的计算压力,提高推荐系统的速度。一般来说,聚类将用户分为多少个类,推荐系统的整体速度就能够提高多少倍。具体选择什么样的聚类算法,又会因应用领域和数据的分布特性而不同。如果聚类算法选择不当,反而会降低推荐的准确性。近年来,推荐系统的算法技术的发展也有了一些新的方向,比如SlopeOne,SVD等方法,就不一一列举了。
在我看来,一个商用推荐系统的尤其关键之处在于对海量用户数据的处理。因为推荐系统是数据优先,数据的积累越多对推荐的精度就越有好处。而当用户的行为数据真正积累到上百万甚至上亿时,如何在合理时间内得出有效的推荐,就是对推荐技术最大的考验。除此之外,一个优秀的推荐系统需要能够结合内容相似与用户行为相。传统的协同过滤方法是忽略内容本身的属性的,这一方面固然是对数据要求少的优点,但另一方面也带来了难以避免的“冷启动”问题。其实,随着标签系统在互联网上的广泛应用,标签本身就不失为是一种很好的内容属性。如何利用也是值得大家探讨的。充分利用到内容本身的属性,将不同的相似性结合起来,这会给基于协同过滤的推荐技术带来新的动力。最后一点,设计良好的推荐技术要能够从用户对推荐内容的反馈中自行调整和学习。因为实际上每个用户对于推荐的内容都有不同的要求,比如有的用户可能偏好比较热门的内容,有的用户更愿意发现冷门的内容。针对不同用户的反馈来不断学习每个用户的特征,才能够避免所采用算法本身先天的偏差,获得较为理想的效果。
- 为什么要用深度学习来做个性化推荐 CTR 预估
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:苏博览 深度学习应该这一两年计算机圈子里最热的一个词了.基于深度学习,工程师们在图像,语音,NLP等领域都取得了令人振奋的进展.而深 ...
- 个性化推荐调优:重写spark推荐api
最近用spark的mlib模块中的协同过滤库做个性化推荐.spark里面用的是als算法,本质上是矩阵分解svd降维,把一个M*N的用户商品评分矩阵分解为M*K的userFeature(用户特征矩阵) ...
- TensorFlow实战——个性化推荐
原创文章,转载请注明出处: http://blog.csdn.net/chengcheng1394/article/details/78820529 请安装TensorFlow1.0,Python3. ...
- 技术漫谈 | 远程访问和控制云端K8S服务器的方法
对于部署在云端的K8S容器编排系统,可以先通过SSH远程登录到K8S所在主机,然后运行kubectl命令工具来控制K8S服务系统.然而,先SSH登录才能远程访问的二阶段方式,对于使用Linux桌面或者 ...
- 个性化推荐产品功能的设计和B端产品的功能策划方式
宜信科技中心财富管理产品部负责人Bob,与大家一起聊聊个性化推荐产品功能的设计和B端产品的功能策划方式. 拓展阅读:回归架构本质,重新理解微服务|专访宜信开发平台(SIA)负责人梁鑫 智慧金融时代,大 ...
- 使用Python3.7配合协同过滤算法(base on user,基于人)构建一套简单的精准推荐系统(个性化推荐)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_136 时至2020年,个性化推荐可谓风生水起,Youtube,Netflix,甚至于Pornhub,这些在互联网上叱咤风云的流媒体 ...
- 射频识别技术漫谈(10)——识别号的格式变化【worldsing笔记】
从事RDID行业的朋友经常会遇到这样的情况,同一张ID卡,在不同厂家生产的读卡器上读出的识别号完全不一样,有时甚至差之千里.ID卡的识别号一般是在出厂时被固化在卡片的ROM里,本身是不会改变的,问题出 ...
- DNN个性化推荐模型
0 推荐技术 1)协同过滤: (1)基于user的协同过滤:根据历史日志中用户年龄,性别,行为,偏好等特征计算user之间的相似度,根据相似user对ite ...
- 从0开始做垂直O2O个性化推荐-以58到家美甲为例
从0开始做垂直O2O个性化推荐 上次以58转转为例,介绍了如何从0开始如何做互联网推荐产品(回复"推荐"阅读),58转转的宝贝为闲置物品,品类多种多样,要做统一的宝贝画像比较难,而 ...
随机推荐
- 查看Windows服务器登录日志
本文以Windows7系统为例:[控制面板]——[管理工具]——[查看事件日志]——[Windows日志]——[安全].此时在视图窗口应该可以看到登录信息了,如果需要知道具体信息那么可以点击某条记录或 ...
- JavaScript 详说事件机制之冒泡、捕获、传播、委托
DOM事件流(event flow )存在三个阶段:事件捕获阶段.处于目标阶段.事件冒泡阶段. 事件捕获(event capturing):通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会 ...
- sk_buff封装和解封装网络数据包的过程详解(转载)
http://dog250.blog.51cto.com/2466061/1612791 可以说sk_buff结构体是Linux网络协议栈的核心中的核心,几乎所有的操作都是围绕sk_buff这个结构体 ...
- LSD-SLAM深入学习(2)-算法解析
前言 在LSD-SLAM深入学习(1)中我们已经完成基本的安装与测试,在此我们继续解析算法与代码,由于lsd-slam本身利用了一部分李群与李代数的知识,需要一定的数学功底. 个人理解错误的地方还请不 ...
- js基础到精通全面教程--JS教程
适合阅读范围:对JavaScript一无所知-离精通只差一步之遥的人 基础知识:HTML JavaScript就这么回事1:基础知识 1 创建脚本块 1: <script language=”J ...
- NC JDK报tools.jar错误(61版本)
添加jdk/lib目录下的tools.jar 然后设置环境变量
- XE3随笔18:实例 - 解析 Google 关键字搜索排名
同上例类似, 通过 'http://clients1.google.cn/complete/search?&q=' + "关键字" 可以获取 Google 的关键字搜索排名 ...
- EAA脚本语言0.2
对上一版的改进.IL生成问题大部分解决了. 运行效果 脚本源码 #using "System"; #using "System.Drawing"; #using ...
- vs2015 command prompt here
网上搜的很多方法都不能用,比如:http://app.paraesthesia.com/CommandPromptHere/ 主要是都搞错了注册表路径,写成了: HKCR,Directory\Shel ...
- Html命名锚
这个有什么用 案例 参考资料 这个有什么用 嘛, 不管写博客,还是公司的wiki,一般开头都会有个目录什么的, 这时候命名描就有用了, 所谓的描就是书签. 案例 比如这篇博客的目录,首先建立一个无序列 ...