新闻推荐系统:基于内容的推荐算法(Recommender System:Content-based Recommendation)

因为开发了一个新闻推荐系统的模块,在推荐算法这一块涉及到了基于内容的推荐算法(Content-Based Recommendation),于是借此机会,基于自己看了网上各种资料后对该分类方法的理解,用尽量清晰明了的语言,结合算法和自己开发推荐模块本身,记录下这些过程,供自己回顾,也供大家参考~

目录

一、基于内容的推荐算法 + TFIDF

二、在推荐系统中的具体实现技巧

正文

一、基于内容的推荐算法 + TFIDF

主流推荐算法大致可分为:

  • 基于内容(相似度)的推荐
  • 基于用户/物品相似度的协同过滤
  • 热点新闻推荐(你看到的那些头条新闻)
  • 基于模型的推荐(通过输入一些用户特征进入模型,产生推荐结果)
  • 混合推荐(以上十八般兵器一起耍!)

(本文只详述基于内容的推荐,其它的推荐方法大家可以另行搜索。)

概念

基于内容相似度的推荐:顾名思义,把与你喜欢看的新闻内容相似新闻推荐给你。基于内容的推荐算法的主要优势在于无冷启动问题,只要用户产生了初始的历史数据,就可以开始进行推荐的计算。而且随着用户的浏览记录数据的增加,这种推荐一般也会越来越准确。

这里有两个重要的关键点需要首先有个基本理解:

  1. 怎么知道用户喜欢看那些新闻;

用户有历史的浏览记录,我们可以从这些用户历史浏览的新闻中”提取”能代表新闻主要内容的关键词,看哪些关键词出现的最多。比如可以有”手机“,”电脑游戏“,”发布会“等等关键词。

或者,统计这些新闻所属的领域是哪些,比如国际政治、社会、民生、娱乐,找出用户看的新闻来源最多的几个领域。不过按这种方式判断用户兴趣容易太宽泛,哪怕是同一个领域下的新闻,可能也会差异很大。比如某用户可能喜欢A女星,而不喜欢B女星,而如果你只是认为该用户喜欢娱乐新闻,结果把B女星的新闻不停给用户推,那就肯定不好。而上述的关键词就可以比较好地规避这个问题。

  1. 怎么判断两个新闻内容相似;

找到定义用户喜好的方法——关键词,那么我们自然而然就可以想到,能不能提取出两个新闻的关键词,然后对比看它们两的关键词是不是相同的呢?恩!思路正确,不过毕竟一个新闻可以有好几个关键词,要想全部一样,还是比较困难的。所以我们需要对两个新闻的关键词匹配程度做一个合理的量化。

那么这时就要说到TFIDF算法了。

给大家一个链接去看TFIDF算法的具体原理,而此处只是简单地解释:TFIDF算法可以能够返回给我们一组属于某篇文本的”关键词-TFIDF值”的词数对,这些关键词最好地代表了这篇文本的核心内容,而这些关键词的相对于本篇文章的关键程度由它的TFIDF值量化。

好了,那我们现在也有了提取关键词并量化关键程度的方法,那么我们现在就可以来对比两篇文本的相似程度了。公式如下:

$$Similarity(A,B)= \Sigma_{i\in m}TFIDF_A*TFIDF_B$$

m是两篇文章重合关键词的集合。此即将两篇文本的共同关键词的TFIDF的积全部加在一起,获得最终代表两篇文本的相似度的值。

      举例:
          刚抓进系统的两个新闻,分别提取出关键词与TFIDF值如下:
          A新闻:“美女模特”:100,“女装”:80,“奔驰”:40
          B新闻:“程序员”:100,“女装”:90,“编程”:30
          两篇文章只有一个共同关键词“女装”,故相似度为:80*90=7200。

用户喜好衡量:喜好关键词表

但是实际操作中,以上思路有一个问题了,用户以前看了辣么多新闻,每个新闻有好些个关键词,我们难道拿刚抓进系统的新闻跟它们一个个比对吗?

为了解决这个问题,我们需要引入新的东西:喜好关键词表

其实很好理解:我们为每个用户在数据库里维持一个map,这个map里放的都是“用户喜好的关键词-喜好程度”这样的Key-Value对。而这个map最开始当然是空的,而从任意时刻开始,我们可以开始跟踪某用户的浏览行为,每当该用户新浏览了一条新闻,我们就把该新闻的“关键词-TFIDF值”“插入”到该用户的喜好关键词表中。当然这个“插入”要考虑关键词表里已经预先有了某预插入的关键词的情况,那么在这个基础上,我们可以将预插入的关键词的TFIDF值直接和词表里的值加起来。

当然,考虑到存储问题,我们可以为用户的喜好关键词表设定一个容量上限,比如最多1000个词,当然具体数值还是需要在实际运行过程根据效果做调整。

兴趣迁移——衰减机制

最后一个问题。

我们大家会不会想到,我们的兴趣点可能是会随时间改变的呢?比如这段时间苹果出了一款新产品,我关注一下,但一个月后,我可能就完全不在意这件事了,但是可能苹果相关的关键词还一直在我的关键词表里,那会不会导致我依然收到相似的我已经不关心的新闻的推荐呢?也就是如何处理这种兴趣迁移问题呢?

为了解决这个问题,我们可以引入一个衰减机制,即让用户的关键词表中的每个关键词喜好程度都按一定周期保持衰减。考虑到不同词的TFIDF值可能差异已经在不同的数量级,我们考虑用指数衰减的形式来相对进行公平的衰减。即引入一个$\lambda$系数,$1>\lambda>0$,我们每隔一段时间,对所有用户的所有关键词喜好程度进行*$\lambda$的衰减,那么就完成了模拟用户兴趣迁移的过程。

当然,一直衰减下去,也会使得一些本来就已经完全不感兴趣的关键词可能衰减到了0.0000001了,还在衰减,还死皮赖脸地待在词表里占位置,那么自然而然,我们可以设置一个阈值L,规定对每个用户的每次衰减更新完成后,将词表里喜好值小于L的关键词直接清除。

在推荐系统中的具体实现技巧

自己实现的推荐系统,包括了协同过滤、基于内容的推荐和基于热点新闻的推荐,放在Github上了,欢迎拍砖!

这里TFIDF值的提取我用的是ANSJ,有直接的TFIDF库函数,直接调用就行,都不用自己分词。

而在数据库里存储与读取用户的关键词表时,我用的是Json形式,相关的工具有fastjson和Jackson,大家选择自己喜欢的用都可以。

另外,推荐过程是用Quartz定时任务库定制在每天0点开始执行,包括像衰减机制,各个推荐算法生成各自的推荐结果,都是这个时候完成的。所以这个推荐并不是实时的,当然做成实时的完全也没问题,只要服务器性能够好。

后话

这里只是提出自己的一个实现思路,思路的形成过程也是在看了许多推荐系统相关的学术文献并进行了自己的总结与改变,并非权威的做法,欢迎各位提出修正意见。

听说几年前开始,ACM有一个每年举办的推荐系统学术会议叫RecSys,有兴趣的小伙伴们也可以关注一下。

有问题欢迎私信我!

原文地址:https://www.cnblogs.com/bluemapleman/p/9277202.html

时间: 2024-10-14 17:50:43

新闻推荐系统:基于内容的推荐算法(Recommender System:Content-based Recommendation)的相关文章

一个简单的基于内容的推荐算法

最近闲下来又开始继续折腾推荐系统了,声明一下,本文只是介绍一下最基础的基于内容的推荐系统(Content-based recommender system)的工作原理,其实基于内容的推荐系统也分三六九等Orz,这里只是简单的较少一下最原始的.最基本的工作流程. 基于内容的推荐算法思路很简单,它的原理大概分为3步: 1.为每个物品(Item)构建一个物品的属性资料(Item Profile) 2.为每个用户(User)构建一个用户的喜好资料(User Profile) 3.计算用户喜好资料与物品属

基于内容的推荐算法

输入 输入1:包含200部电影的数据集,集合中包含两列,一列为电影的id,一列为电影的流派集合,如下图所示: 输入2:一个用户的电影兴趣记录,like字段为1表示喜欢,0表示不喜欢,如下图所示: 输出 输出1:输入1的One-Hot编码形式,类似下图所示: 输出2:根据输入2和输出1,从电影数据集中给用户推荐用户没有看过的与用户相似度最高的k个电影. 前言 基于内容的推荐算法是一种比较经典的推荐算法,应用较广,可解释性强,准确率高,尤其是当今社会信息丰富,比如文本.音频等,有比较多的内容可以利用

基于特征的推荐算法【转】

http://in.sdo.com/?p=2779 推荐算法准确度度量公式: 其中,R(u)表示对用户推荐的N个物品,T(u)表示用户u在测试集上喜欢的物品集合. 集合相似度度量公式(N维向量的距离度量公式): Jaccard公式: 其中,N(u)表示用户u有过正反馈的物品集合. 余弦相似度公式: UserCF公式: 其中,S(u,k)表示和用户u兴趣最接近的K个用户集合:N(i)表示对物品i有过正反馈的用户集合:w(u,v)表示用户u和用户v的兴趣相似度:r(v,i)表示用户v对物品i的兴趣.

【读书笔记】《推荐系统(recommender systems An introduction)》第三章 基于内容的推荐

基于内容的推荐的基本推荐思路是:用户喜欢幻想小说,这本书是幻想小说,则用户有可能喜欢这本小说 两方面要求:(1)知道用户的喜好:(2)知道物品的属性 基于内容的推荐相比协同过滤方法(个人观点):协同过滤用到了大量用户的群体行为特征,两个特点,(1)要大量用户,(2)除了用户的行为之外,不需要其他信息:基于内容的推荐,需要用户和物品的额外信息,如:用户喜好.物品属性等等,但是不需要存储.处理大量的用户数据. 基于内容的推荐和基于知识的推荐没有明确界限,两者区别:前者更侧重于提取物品属性,后者更侧重

推荐系统第5周--- 基于内容的推荐,隐语义模型LFM

基于内容的推荐 制定分类/属性的困难使用专业人员(编辑)对商品进行整理分类,但这样会产生成本和效率瓶颈受限于编辑的专业水平,编辑的意见未必能代表用户的意见分类的粒度难于控制如果商品有多个分类,很难考虑周全多维度,多规角分类编辑很难决定商品在类别里的权重 隐语义模型 LFM的前丕今生 隐语义模型的适用性 关于训练集 常见同类问题求解思路 梯度下降法的几何意义 LFM损失函数极值用梯度下降法求解 LFM中的重要参数 模型中隐特征个数梯度下降法中选取的学习速率损失凼数中的惩罚项系数lambda训练集的

Recommender Systems基于内容的推荐

基于内容的推荐的基本推荐思路是:用户喜欢幻想小说,这本书是幻想小说,则用户有可能喜欢这本小说 两方面要求:(1)知道用户的喜好:(2)知道物品的属性 基于内容的推荐相比协同过滤方法(个人观点):协同过滤用到了大量用户的群体行为特征,两个特点,(1)要大量用户,(2)除了用户的行为之外,不需要其他信息:基于内容的推荐,需要用户和物品的额外信息,如:用户喜好.物品属性等等,但是不需要存储.处理大量的用户数据. 基于内容的推荐和基于知识的推荐没有明确界限,两者区别:前者更侧重于提取物品属性,后者更侧重

推荐算法简介:基于用户的协同过滤、基于物品的协同过滤、基于内容的推荐

参考来源: https://blog.csdn.net/u011748319/article/details/90269818 1.推荐算法 1.1.协同过滤 协同过滤是目前应用最广泛的推荐算法,它仅仅通过了解用户与物品之间的关系进行推荐,而根本不会考虑到物品本身的属性. 可分成两类: 1.基于用户(user-based)的协同过滤 2.基于商品(item-based)的协同过滤 1.1.1.基于用户的协同过滤 基本思想: 基于用户对物品的偏好找到邻居用户(相似用户),然后将邻居用户(相似用户)

基于内容的推荐(Content-based Recommendations)

基于内容的推荐(Content-based Recommendations) [本文链接:http://www.cnblogs.com/breezedeus/archive/2012/04/10/2440488.html,转载请注明出处] Collaborative Filtering Recommendations (协同过滤,简称CF) 是目前最流行的推荐方法,在研究界和工业界得到大量使用.但是,工业界真正使用的系统一般都不会只有CF推荐算法,Content-based Recommenda

基于内容的推荐(第二周)

说明:文章为初学者看推荐系统(蒋凡),结合网上资料做的笔记,不保证其正确性.欢迎指正^_ 1.  继续记录下svd的一个例子(参考http://blog.sina.com.cn/s/blog_7c76633901019oi8.html,http://blog.csdn.net/abcjennifer/article/details/8131087): 1)  看下图,表示9篇文章中,book,dads--value等词语的出现次数: 2)  可以使用相应的软件(例如matlab)进行svd分解,