基于KNN的相关内容推荐
如果做网站的内容运营,相关内容推荐可以帮助用户更快地寻找和发现感兴趣的信息,从而提升网站内容浏览的流畅性,进而提升网站的价值转化。相关内容 推荐最常见的两块就是“关联推荐”和“相关内容推荐”,关联推荐就是我们常说的购物篮分析,即使用购买了某商品的用户同时购买了什么这个规则来发现商品间 的潜在联系,之前有相关的文章介绍——向上营销、交叉营销与关联推荐;关联推荐是基于用户行为分析的推荐,而相关内容推荐是基于内容固有特征的推荐,只与内容本身有关,与用户的行为完全无关,所以相关内容推荐的模型是一种“冷启动”的算法,不需要任何历史浏览访问数据的支持。
内容固有属性
相关内容推荐因为完全不借助用户浏览行为的数据,所以底层数据不依赖于网站的点击流日志,唯一的基础数据就是内容的固有属性及完整信息。我们以豆瓣网的几大块内容为例来看看对于这些内容一般包含哪些固有属性:
书籍-书名、作者、出版时间、出版社、分类、标签
音乐-专辑名、歌手、发行时间、发行方、风格流派、标签
电影-电影名称、导演、演员、上映时间、制片方、类型、标签
豆瓣很多地方都使用了“标签”这个词,用贴标签的形式来完成内容的分类和标识,但其实标签又分为很多种,有些标签是在内容生成时就被贴上的,有些可 能是后续用户贴上去的,而且豆瓣一般为内容和标签定义了原始分类,如书籍分为文学、流行、文化……既然分类和标签内容源生就带有,那同样可以作为内容的固 有属性。
还需要说明的是,这里不涉及文本挖掘和字符切分模糊匹配等问题,因此内容的标题、简介和全文不参与文本相似度的分析,虽然这些可能在构建完整的相关 内容模型中不可缺少,但这里只考虑一些固有属性是否相同实现简单应用。基于上述豆瓣几类内容的属性特征,选择和整理适合分析的内容属性如下:
“作者”就是指内容的创造者,“来源”指内容的发布方或获取渠道,“分类”为内容归属的类别,“标签”可以包含对内容的各类描述信息和关键词等。这 里为了能够尽可能清晰地描述整个分析模型和思路只选取了大部分内容都包含的一些属性,如果要构建更加高效的相关内容分析模型,需要更完整的内容属性,可以 根据自身内容的特征进行属性的定义和选取。
KNN算法及应用
KNN(K-Nearest Neighbor algorithm),K最近邻算法,通过计算样本个体间的距离或者相似度寻找与每个样本个体最相近的K个个体,算法的时间复杂度跟样本的个数直接相关, 需要完成一次两两比较的过程。KNN一般被用于分类算法,在给定分类规则的训练集的基础上对总体的样本进行分类,是一种监督学习(Supervised learning)方法。
这里我们不用KNN来实现分类,我们使用KNN最原始的算法思路,即为每个内容寻找K个与其最相似的内容,并推荐给用户。相当于每个内容之间都会完 成一次两两比较的过程,如果你的网站有n个内容,那么算法的时间复杂度为Cn2,即n(n-1)/2。但是用内容固有属性有一个好处就是因为固有属性一旦 创建后基本保持不变,因此算法输出的数据一旦计算好之后不需要重复计算去刷新,也就是对于网站内容而言,原有内容的数据在首次初始化之后可以不断重复使 用,只要更新新增内容的数据就可以,数据的统计计算可以使用增量更新的形式,这样可以有效地减少服务器的计算压力。
相关内容模型
有了基础数据和算法的支持,我们就可以创建数据模型了。先看下基础数据的类型,作者、分类、来源和标签都是字符型,其中作者、分类、来源基本可以当 做是单个值的属性,标签一般包含多个值。首先由于都是字符可以确定属性之间相似性的判定只能通过“是否相同”,无法体现数值上的差异,所以对于作者、分 类、来源这几个单值属性而言,比较的结果就是一个布尔型的度量,相同或者不相同;对于标签这个多值属性可以考虑使用Jaccard相关系数,但因为每个内 容标签的个数存在较大差异,使用验证后的结果并不理想,所以不考虑使用(当然,如果内容的标签个数比较固定,Jaccard相关系数是有效的)。因此,直 接创建加权相似度模型如下,首先是标签的相似度分值设定:
再结合作者、分类和来源,通过加权设定总体的相似度分值:
将所有属性加权相似度分值的结果相加应该分布在[0,100],分值越高说明内容间的相似度越高。对于这种简单的加权相似度评分模型,估计又有很多 人要问权重是怎么确定的,确实,这里的权重并没有通过任何定量分析模型的方法去计算,只是简单的经验估计,但估计的过程经过反复地调整和优化,也就是不断 地尝试调整各属性的权重系数并输出结果,抽样检验结果是否符合预期、是否有提升优化的空间。
基于上述内容间相似度的计算结果,套用KNN的原理实现相关内容推荐就异常简单了,只要根据每个内容与之比较的所有内容的相似度分值降序排列取前K个内容 作为该内容的最相关内容推荐给用户就可以了。当然中间可能会涉及相同相似度分值的内容如何排序的问题(因为模型的关系分值分布可能不会很离散),建议如果 相似度分值相同使用随机排序,以保证推荐结果有一定的变化,均匀内容的曝光。
好了,所有的分析流程介绍完了,好像跟前一篇的距离和相似度度量完 全没有关系,其实距离和相似度度量是KNN的基础算法,因为KNN的个体相似度或邻近的距离都会选择距离度量和相似度度量中的某种方法进行计算,但这里考 虑到了现实的数据情况和应用环境,并不是KNN就一定要硬套欧氏距离,其实换一种简单的方法可能反而更加适合整个模型,而且模型的最终效果可能会更理想。 所以一切的数据挖掘算法的选择和使用都是基于数据模型的有效性和输出结果的效果来决定的,并不是简单的算法效果就一定不好,而高级复杂的算法一定更加有 效。对了,如果你已经做了相关内容推荐,那么优化相关内容推荐这篇文章里面介绍的一些方法将是检验推荐效果的一个很好的参考。
基于KNN的相关内容推荐的更多相关文章
- 基于Tags的简单内容推荐的实现
原来为了简单方便,自己小网站上的文章页的相关内容推荐就是从数据库里随机抽取数据来填充一个列表,所以一点相关性都没有,更本没有办法引导用户去访问推荐内容. 算法选择 如何能做到相似内容的推荐呢,碍于小网 ...
- 基于Spring的最简单的定时任务实现与配置(三)--番外篇 cron表达式的相关内容
本来这篇文章是会跟本系列的前两篇文章一起发布的.但是,昨天在找资料总结的时候遇到了一点意外,就延后了一些. 本篇的内容主要参考了 这篇博文:http://www.cnblogs.com/junrong ...
- [转] 基于 Apache Mahout 构建社会化推荐引擎
来源:http://www.ibm.com/developerworks/cn/java/j-lo-mahout/index.html 推荐引擎简介 推荐引擎利用特殊的信息过滤(IF,Informat ...
- Struts2(四)——页面相关内容
上篇博客总结了数据流转各个方面的内容,这篇重点说一下框架对于界面上知识. 一,说到页面,记得在总体介绍中,说到Struts2比Struts1的一方面优势就是它支持更多的视图技术(Freemarker, ...
- 基于 Apache Mahout 构建社会化推荐引擎
基于 Apache Mahout 构建社会化推荐引擎 http://www.ibm.com/developerworks/cn/views/java/libraryview.jsp 推荐引擎利用特殊的 ...
- HBase在搜狐内容推荐引擎系统中的应用
转自:http://www.aboutyun.com/thread-7297-1-1.html Facebook放弃Cassandra之后,对HBase 0.89版本进行了大量稳定性优化,使它真正成为 ...
- MySQL的日志相关内容
本篇文章介绍一下mysql的备份和日志,由于备份时需要用到日志,所以在讲备份前,如果日志内容篇幅过长,将会把日志和备份分开单独来讲,先简单介绍一下mysql的日志相关内容. MySQL日志 日志是my ...
- linux用户权限相关内容查看
linux用户权限相关内容查看 1 用户信息 创建用户一个名为 webuser 的账号,并填写相应的信息: root@iZ94fabhqhuZ:~# adduser webuser Adding ...
- 基于Spark ALS构建商品推荐引擎
基于Spark ALS构建商品推荐引擎 一般来讲,推荐引擎试图对用户与某类物品之间的联系建模,其想法是预测人们可能喜好的物品并通过探索物品之间的联系来辅助这个过程,让用户能更快速.更准确的获得所需 ...
随机推荐
- Java之JSP基础语法
1.JSP页面元素简介及page指令 2.JSP注释,3种不同注释 <!-- 我是HTML注释,在客户端可见 --> <%--我是JSP注释,在客户端不可见 --%> ...
- Codeforces Round #346 (Div. 2) B Qualifying Contest
B. Qualifying Contest 题目链接http://codeforces.com/contest/659/problem/B Description Very soon Berland ...
- My网页
开始更新|Version:2.46|更新内容:/=====================================//1.新增秒低价次数//2.优化捉鬼停留过久的问题//3.优化其他任务上的效 ...
- fidder https以及Fiddler抓取HTTPS协议
一.浅谈HTTPS 我们都知道HTTP并非是安全传输,在HTTPS基础上使用SSL协议进行加密构成的HTTPS协议是相对安全的.目前越来越多的企业选择使用HTTPS协议与用户进行通信,如百度.谷歌等. ...
- android studio genymotion插件
下载andriod studio 2.2 正式版,我的版本带SDK,一直安装, 1.在设置SDK的位置. 2.安装好后在安装虚拟机插件,genymotion去官网下载不带虚拟机的. 下载地址https ...
- MD5加密 js文件
var hexcase = 0; var b64pad = ""; var chrsz = 8; function hex_md5(s){ return binl2hex(core ...
- CocoaPods 报错 [!] Error installing JSONModel
pod install p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #34bd26 } span.s1 { } ...
- C# 深入了解泛型
本文是根据网上&书本总结来的. 1. 介绍 泛型程序设计是程序设计语言的一种风格或范式. 泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时(instantia ...
- 微信小程序入门——Mustache语法学习
微信小程序中用到了大量Mustache语法,特发此文学习一下 1.简单的变量调换:{{name}} 1 var data = { "name": "Willy" ...
- 第八十六节,html5+css3pc端固定布局,网站结构,CSS选择器,完成导航
html5+css3pc端固定布局,网站结构,CSS选择器,完成导航 页面采用1280的最低宽度设计,去掉滚动条为1263像素. 项目是PC端的固定布局,会采用像素(px)单位. 网站结构语义 在没有 ...