最近要为一个资讯类的项目加入个性化推荐的逻辑,以给用户展示更加符合其阅读偏好的文章,提高点击率。之前研究过相关理论,这次在工程中应用上,也属于一边摸索一边实践的过程。

概述

推荐系统中常用的推荐算法有:
- 基于内容的推荐content-based
- 协同过滤collaborative filtering
- 基于模型的推荐,隐语义模型(LFM, latent factor model)推荐,机器学习的模型等

不同的推荐算法有着不同的效果、优点、缺点,适合不同的场景,这个系列的文章用于记录这几种算法的实现过程。

基于内容的推荐

基于内容的推荐算法主要思想是为用户推荐与过去喜欢的item类似的item,比如一个用户看过绝地求生98K好用吗的的文章,那么就可以给他推荐绝地求生98k怎么好用的文章。
基于内容的推荐可以分为以下三步:

  1. 建立文章的特征向量,用来描述这篇文章的关键信息,这里可以使用TF-IDF模型建立一个特征矩阵来描述文章的特征
  2. 建立用户模型,用来描述用户具有哪些偏好,可以通过计算用户浏览过的文章的TF-IDF矩阵的均值作为用户模型
  3. 在推荐过程中,根据用户模型检索类似的文章,可以通过检索Top N个与用户模型特征向量相似的文章向量,作为用户的推荐

但是在这个流程中有一个问题,第3步在工程实现中,如果文章的数量很大,需要计算每篇文章与用户模型的相似度,时间和空间复杂度会很高,所以这里进行了简化,取用户当前浏览的文章作为用户模型,这样可以通过离线计算的方式,提前计算出每篇文章的相似结果。

准备阶段

无论是在构建TF-IDF矩阵还是为文章打标签的过程中,分词都是一个重要的阶段,而目前的数据中大部分是游戏相关的文章,多数主流的分词工具都是基于人民日报语料进行训练得到的词典,所以第一步需要对词典进行完善。也就是从这些语料中提取王者荣耀、绝地求生、阴阳师、天美工作室这样的领域化的词语。

这里参考了互联网时代的社会语言学:基于SNS的文本数据挖掘这个博客中提出的方法,后面会单独写一篇文章讲解这个思路和实现方式

将发现出的领域词汇增加到分词工具词典中,这里使用了清华大学的分词工具thulac,使得分词过程中可以提取出这些词语。

对500万字的语料进行分析,提取了16000个词,包括了贪玩蓝月、红莲斗篷、反伤刺甲等词

基于内容推荐

第一步:将文章向量化
语言都是由词和句组成的,利用出现在文章中的词表示该篇文章,每个词的权重使用信息检索中的TF-IDF来计算,利用这种方法,就将一篇文章用一个向量来表示。可以很方便的使用scikit-learn提供的函数计算。

第二步:计算文章相似度
现在已经将每一篇文章用一个向量表示,那么下一步就是要找到与某一篇文章相似的文章,也就是与一个向量相似的向量。计算向量相似度的方法有很多,像欧几里得公式、余弦相似度公式、杰卡德公式等。这里使用了余弦相似度进行计算,这个计算方法也比较好理解,空间上的两个向量其夹角越小即越相似,也就是余弦值越接近1越相似。

scikit-learn同样提供了方便的函数进行计算,可以参考这篇文章,通过计算所有文章向量之间的相似度,得到了一篇文章与哪些文章相似,将其存在redis等存储中。

第三步:推荐给用户
当用户点击一篇文章时,读取存储中与该篇文章相似度前K的文章,推荐给用户。

效果观察

在实现了第一版后,发现存在两个问题:
一是当文章比较多时,需要两两计算余弦相似度,计算量比较大
二是当文章不够多时,推荐算法召回的文章数量过少

解决方案:由于资讯类文章具有一部分时效性,所以每次只计算3天或者一周内的相似文章,做一个折中。

个性化阅读中的推荐系统(一)相关推荐

  1. delphi usb 读写_写作论语 | 崔嵘:写我所读——国外整本书阅读中读写结合的理论与实践(上)...

    崔嵘简介 崔嵘,博士,首都师范大学初等教育学院副教授.硕士研究生导师, 澳大利亚弗林德斯大学教育学院客座副教授,美国明尼苏达大学访问学者,北京市语文现代化研究会秘书长.全国名师工作室联盟学术委员会学术 ...

  2. 转:RSS阅读、社会化阅读与个性化阅读

    转自 望月的博客 RSS阅读.社会化阅读与个性化阅读 标签: flipboard,rss,zite,个性化阅读,社会化阅读,鲜果联播 Go to comemnt 自从传统RSS阅读器的代表Google ...

  3. 【个性化阅读】ZapTxt的提醒姗姗来迟

    ZapTxt的提醒姗姗来迟,都已经设定了半个月了,才终于给我送过来一篇Alert. 我在上一篇<个性化阅读的过去和未来[一]>中提到:"Zaptxt,也是同样的思路,搜索范围也是 ...

  4. 个性化推荐中的数据稀疏性

    个性化推荐中数据稀疏性怎么理解 造成的原因是什么? 每个领域对稀疏性的定义和解决方法都不一样,拿感兴趣地点推荐来说. 假定我拥有一群在上海的用户和他们最近一个月所到过的地点的记录.现在我想根据他所去过 ...

  5. 2018深度学习在个性化推荐中的应用

    深度学习在个性化推荐中的应用 结论 得益于深度学习强大的表示能力,目前深度学习在推荐系统中需要对用户与物品进行表示学习的任务中有着不错的表现,但优势不如图像与文本那么显著[1]. 深度学习与分布式表示 ...

  6. [附源码]计算机毕业设计JAVAjsp基于个性化的汽车购买推荐系统

    [附源码]计算机毕业设计JAVAjsp基于个性化的汽车购买推荐系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Ecl ...

  7. 基于pyspark的个性化电商广告推荐系统

    个性化电商广告推荐系统 1. 数据介绍 2. 项目实现分析 2.1 数据概况 2.2 业务流程 3. 预处理behavior_log数据集 3.1 创建spark session 3.2 读取文件并修 ...

  8. 视频网站中的推荐系统

    转自:http://www.programmer.com.cn/9242/ 文 / 郑华 随着互联网特别是社会化网络的快速发展,我们正处于信息过载的时代.用户面对过量的信息很难找到自己真正感兴趣的内容 ...

  9. 个性化教育中的自然语言理解和生成

    公众号:系统之神与我同在 个性化教育中的自然语言理解和生成 本文包括一下四个部分 市场的痛点,个性化教育的缺失 LeapEnglish,英语个性化教学的理解与生成 Math Bridge 自然学科个性 ...

最新文章

  1. Globalization Resources
  2. 空间谱专题01:信号模型
  3. 关于ogrebullet中角色的控制
  4. 人工智能技术为大脑制作地图 前沿
  5. tomcat 配置方法
  6. PHP实现图片马赛克效果
  7. DLL入门浅析(2)——如何使用DLL
  8. HDSF主要节点解说(二)工作原理
  9. linux pid t 头文件_pid和tid及线程调度
  10. 工具系列————linux系统中安装fortran编译器(ifort)
  11. Unix网络编程5种IO模型
  12. 2022中青杯A题-高校数学建模竞赛与课程Sz教育
  13. 面向部件的整车E/E架构开发咨询服务
  14. UI设计中,颜色的搭配
  15. TIdTCPClient
  16. 虚拟打印机直播软件 无人直播互动打印系统 含搭建教程
  17. python 天勤 金叉 编程代码_GitHub - Oscar201106/tqsdk-python: 天勤量化开发包, 期货量化, 实时行情/历史数据/实盘交易...
  18. 前端canvas画海报
  19. python 豆瓣电影top250_python 爬豆瓣电影top250
  20. 新年金市上行动力堪忧 美债收益率大幅上涨

热门文章

  1. string.intern()方法理解
  2. Linux 下vim中撤销键无法使用,按上下左右键出现‘C’字符?
  3. Web前端学习笔记——AngularJS之简介、起步、特性
  4. “东亚文化之都·温州”书法作品巡展敦煌站正式启动
  5. Vue在mounted里面调用methods里的function函数
  6. 部落冲突-家乡-兵种(训练营兵种、暗黑训练营兵种)
  7. PPT文本框设置实用技巧分享,你都知道哪些呢?
  8. 史蒂夫-乔布斯经典语录
  9. PTA L1-060:心理阴影面积 (python)
  10. autojs怎么获取微信的聊天记录?