# 新闻推荐系统总览
# 前言
在我编辑这段话的时候, 我刚刚完成了毕设答辩. 没了毕业的压力, 突然想起来自己已经两个月没写东西了, 正好先总结一下毕设的内容. 我的毕设题目是 "基于协同过滤算法的新闻推荐系统", 整个系统分为数据爬虫与用户前后端. 毕设从 19 年的 11 月开始, 中间断断续续, 直到 20 年的 5 月多才基本完成. 虽然写得一般, 但是这是我自己完成的结构最复杂, 内容最完整的系统.
这部分很多的内容都是自己的个人看法, 看看就好. 😃
# 项目概览
计划设计实现一个基于协同过滤算法的新闻推荐系统, 向目标用户推荐相似用户浏览过的内容. 系统需要的数据来源于今日头条. 为此, 系统利用 Selenium 工具来爬取数据并模拟部分用户数据. 至于用户系统, 前端基于 Vue.js, 后端基于 SpringBoot, 配合 MyBatis 连接 MySQL.
# 数据爬虫
数据爬虫从它出生到现在, 已经经历过很多次的改版, 需求也发生了比较大的变化. 一开始我认为这个爬虫只要获取新闻数据及文章作者的相关数据就可以了, 但是后期仔细地看一了下数据, 既然是做推荐, 怎么能少了新闻的受众, 也就是普通用户的行为. 于是我打算重写一遍这个爬虫 (不过让我意外的是, 这个 "一遍" 其实是很多遍), 可以说这个爬虫的编写史就是我的 Python 学习史或者说我对推荐系统的认识过程.
到后期, 因为毕设选题时计划使用的依赖用户相似度的协同过滤算法, 但是我无法获取大量的有效用户行为数据, 这导致数据库中几乎没有活跃用户, 如此, 协同过滤推荐就成了奢望. 为了避免项目的失败, 我在爬虫中添加了模拟数据的操作. 用尽可能少的数据完成持续的新闻推荐, 最后算是勉勉强强地 "完成了" 相似用户推荐的部分.
# 用户系统
用户系统分为五个基本功能模块: 新闻加载模块, 新闻编辑模块, 新闻搜索模块, 用户模块, 评论/回复模块. 模块的功能基本和字面意思一致. 其中最重要的新闻推荐的逻辑被包含在了新闻加载模块.
用户登入用户系统后, 一定会利用到上述的概念模块, 也就会产生用户行为, 这些行为一来会影响用户自己, 二来会影响新闻状态. 为此, 除了五个基本功能模块外, 还有一个用户行为数据更新模块, 它在用户产生行为后及时更新用户与新闻相关的统计数据, 为后续的新闻推荐提供数据支持.
# 推荐策略
整个系统一共有了两种推荐类型: 热点新闻推荐与核心的个性化推荐; 使用到的推荐方式: 一个是题目中提到的协同过滤算法, 另一种是新闻排分推荐. 说起来, 设计的时候, 我希望直接依赖协同过滤算法, 但是后来在真实数据的打击下, 我发现这是一个非常可笑的想法.