转自:

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

目录

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

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

正文

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

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

  • 基于内容(相似度)的推荐

  • 基于用户/物品相似度的协同过滤

  • 热点新闻推荐(你看到的那些头条新闻)

  • 基于模型的推荐(通过输入一些用户特征进入模型,产生推荐结果)

  • 混合推荐(以上十八般兵器一起耍!)

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

概念

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

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

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

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

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

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

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

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

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

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

    Similarity(A,B)=Σi∈mTFIDFA∗TFIDFB
  1. m是两篇文章重合关键词的集合。此即将两篇文本的共同关键词的TFIDF的积全部加在一起,获得最终代表两篇文本的相似度的值。

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

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

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

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

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

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

兴趣迁移——衰减机制

最后一个问题。

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

为了解决这个问题,我们可以引入一个衰减机制,即让用户的关键词表中的每个关键词喜好程度都按一定周期保持衰减。考虑到不同词的TFIDF值可能差异已经在不同的数量级,我们考虑用指数衰减的形式来相对进行公平的衰减。即引入一个λ

系数, 1>λ>0,我们每隔一段时间,对所有用户的所有关键词喜好程度进行* λ

的衰减,那么就完成了模拟用户兴趣迁移的过程。

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

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

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

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

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

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

后话

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

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

有问题欢迎私信我!

新闻推荐系统:基于内容的推荐算法——TFIDF、衰减机制(github java代码)相关推荐

  1. 推荐系统-基于内容的推荐算法(Content-Based)

    基于内容的推荐算法(Content-Based) 简介 基于内容的推荐方法是非常直接的,它以物品的内容描述信息为依据来做出的推荐,本质上是基于对物品和用户自身的特征或属性的直接分析和计算. 例如,假设 ...

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

    2018/10/04更新 这篇文章似乎被越来越多的小伙伴看到了,所以觉得有必要做一些进一步的详细说明. 首先按照本文所讲解的推荐思路进行新闻推荐的推荐系统,我已经实现并已经放在Github上了.欢迎小 ...

  3. 《网络电视节目推荐系统----基于用户协同过滤与基于内容的推荐算法的后融合》

    文章目录 一.什么是推荐系统 二.产生原因 由上我们可以得知,推荐系统产生的两大原因 三.应用场景 四.推荐系统的评测方法 1. 推荐系统的三大实验方法 a. 离线实验: b. 用户调查 c. 在线实 ...

  4. 一文全面了解基于内容的推荐算法

    作者丨gongyouliu 来源 | 转载自大数据与人工智能(ID:ai-big-data) 这篇文章我们主要关注的是基于内容的推荐算法,它也是非常通用的一类推荐算法,在工业界有大量的应用案例. 本文 ...

  5. 一文看懂基于内容的推荐算法

    作者 | gongyouliu 来源 | 数据与智能 从本篇开始我们来详细讲解各类推荐算法.这篇文章我们主要关注的是基于内容的推荐算法,它也是非常通用的一类推荐算法,在工业界有大量的应用案例. 本文会 ...

  6. 常用的基于内容的推荐算法实现原理

    这篇文章我们主要关注的是基于内容的推荐算法,它也是非常通用的一类推荐算法,在工业界有大量的应用案例. 本文会从什么是基于内容的推荐算法.算法基本原理.应用场景.基于内容的推荐算法的优缺点.算法落地需要 ...

  7. 经典推荐算法(基于内容的推荐算法)

    基于内容的推荐算法(Content-Based Recommendations,CB)是一种经典推荐算法,一般只依赖于用户及物品自身的内容属性和行为属性,而不涉及其他用户 的行为,在 冷启动 的情况下 ...

  8. 推荐算法(一)—— 基于内容的推荐算法

    推荐算法(一)--  基于内容的推荐算法 1 基于内容的推荐算法 基于内容的推荐系统本质是对内容进行分析,建立特征:基于用户对何种特征的内容感兴趣以及分析一个内容具备什么特征来进行推荐. 1.1 基于 ...

  9. 吴恩达机器学习系列23:基于内容的推荐算法

    如今,推荐算法已经深入到我们生活的各个方面,比如说淘宝根据我们之前的浏览记录给我们推荐想要购买的商品:抖音不停地给我们推荐各种我们感兴趣的视频(虽然我个人不太喜欢抖音,觉得抖音会让我们丧失独立思考的能 ...

最新文章

  1. 安装brew提示/usr/local/bin is not in your PATH.
  2. eclipse工作空间在哪里配置?
  3. tomcat站点配置
  4. 揭秘腾讯会议背后的视频编码“神器”
  5. 周志華《機器學習》圖4.4和图4.9繪制(轉載+增加熵顯示功能)
  6. 6.6(java学习笔记)文件分割(IO综合例子)
  7. pl sql代码提示手动提示设置
  8. zabbix配置微信报警
  9. 推理速度快千倍!谷歌开源语言模型Transformer-XL
  10. 已解决:关于navicat premium数据库激活一直不成功的解决方法
  11. 努比亚NX549 miniS 刷机遇坑记录,最终完美解决方案
  12. coreldraw橙子怎么画_cdr怎么画一杯橙汁?CorelDRAW简单绘制的一杯满满的橙汁教程...
  13. 【PRD】倒推“Soul”APP产品需求文档
  14. 我承认 IDEA 2021.3 有点强!
  15. hdoj-2567 寻梦
  16. 【Python_046】网页爬虫(绕过SSH认证)
  17. InputStream的read方法
  18. java转json字符串
  19. 索尼揮師視頻下載業與蘋果再決高下
  20. 阿里外包java程序员分享,看完你还会去外包吗?

热门文章

  1. 监控视频行为分析算法
  2. IntelliJ IDEA 创建Java项目
  3. 阿里物联网iot 网关配置 gateway 与子设备
  4. 域名如何绑定到服务器ip
  5. CNFs/CNTs复合薄膜-供应高储能效率铁电聚合物基电介质/ 三硒化二铟In2Se3/ 硒化铟(InSe和In2Se3)纳米/Cu(In,Ga)Se_2和Cu_2ZnSnSe_4薄膜定制
  6. zTree实现基本树
  7. 【测试开发】web 自动化测试 --- selenium4
  8. 雷克萨斯品牌舆情监测-危机后,如何重新赢得消费者的认可?
  9. Android的.9图片使用问题
  10. python 浮点数精度不准确_浮点数的 “floor division” (例如在python中)是否会导致精度不准?...