故事的背景这样滴

14年的时候,我还在读研究生,那时候机器学习还算不上是一个重要的计算机学科,如果能顺嘴说一说TF-IDF、Collaborative Filtering这种算法(虽然现在听起来很naive),在当时基本上就是技术潮男一般的存在,在五道口咖啡厅能横着“骗项目”、“骗钱”。

我因为当时正好在微创业,当时准备做一个智能猎头的项目,用算法去给每个程序员的能力打分,再把程序员推送给合适的公司应聘,然后给B端猎头公司做ToB服务(当时这个理念有点太geek,不过现在有些PAI的客户确实把这种事做起来了,我很欣慰)。

这其中涉及到很多文本分析和推荐相关的技术,于是我就自己开发了一套新闻推荐系统锤炼相关技术,从网上爬了真实的新闻数据,并把这个项目开源。

https://github.com/X-Brain/News-Recommend-System

项目动图:

还成了相关项目的搜索头条:

成了毕设热门项目

万万没想到,我的无心之举没想到成就了很多在校同学。每年毕设季都能收到非常多的来自同学们的私信,大致是下面这种。

也有很多同学在我的微信公众号留言,想交流这个项目。所以我想还是有必要跟大家把这个项目好好介绍下,因为这个项目虽然目前来看技术比较老,但是作为本科生毕设项目还是OK的,而且吃透后会给同学们很多收获。

技术点拆解

做这个项目一定要动手去做,去读代码,不要直接拿过来用。最核心的几个技术点我列一下:

1.crawler爬虫

做训练要有数据,可以在网上找下相关的爬虫开源项目,直接爬搜狐、新浪这样的网站。他们有反扒机制,如何破解这种机制是大家要掌握的。

2.分词

做文本分析一定要用到分词,我在项目里用的是jieba分词,14年的时候这个项目还是在比较初级阶段,现在应该好很多,大家可以看看有啥新功能。比如词性提取,新闻推荐系统建议只提取名词性相关的词语做TF-IDF。

3.算法

在项目里用了协同过滤和TF-IDF,这两个算法我是自己实现的,基本上是机器学习里最简单的算法,用的好像是hashtable的方式--具体想不起来了。虽然有很多开源版本,但是我建议有能力的同学这两个算法要自己写。我在做TF-IDF的时候有大量中间计算结果需要先落盘到硬盘上,这个主要是当时我的电脑内存太小,貌似只有1个G,所以没办法把所有计算压到内存做,现在大家可以试试全部内存计算的方式。

4.架构设计

其实前面三点,对于目前的本科同学应该都不难,因为现在网上的资料很多。真正要学习的是架构设计,因为一个推荐系统不光只有原子化的算法还要有一个好的设计把算法结果串起来。要思考哪些功能可以抽象成util或者tools这种工具包,比如统计、排序等功能。哪些计算中间结果可以在多个模块复用?

如何优化这个项目

这个项目是14年的老项目,算法更新迭代很快,那如何在这个基础上优化呢?

1.从词到主题

在整个项目里,我是基于每个人过去浏览的新闻中的关键词进行推荐。关键词的上一级是主题,能不能给每个用户喜爱的主题打标,基于主题推荐。比如现在的项目里可以抽象出用户A喜欢 费德勒、乔丹、跑步这样的关键词,那么能不能向上抽象一层,显示出用户A喜欢体育并且推送体育相关的新闻。

2.增加排序模型

现在的推荐系统只有召回没有排序,也就是说可以基于协同过滤或者TF-IDF计算出每个用户潜在的喜欢的文章,但是并不能确定这些文章哪个是用户最喜欢,哪个是第二喜欢。如果可以基于文本做特征提取,并且使用逻辑回归等排序算法训练出排序模型,那么推荐的准确率会大大增加。

这一点我在后续的很多项目做了类似的工作,比如:

https://blog.csdn.net/buptgshengod/article/details/40541949

总结

羡慕大家现在毕设就能接触到推荐系统,在我毕业那个年代还是比较少见的,给大家的建议就是一定要自己动手,能自己写的模块尽量自己写~还有就是,这个项目比较简单,可能只适合本科生,研究生同学建议搞点更高深的。这篇文章我会加到新闻推荐那个项目介绍的博客后面,方便以后更多的同学看到。

写给用我的“新闻推荐项目”做毕设的同学们相关推荐

  1. 天池-新闻推荐-多路召回

    前言读取数据 此次比赛是新闻推荐场景下的用户行为预测挑战赛, 是Datawhale与天池联合举办,该赛题是以新闻APP中的新闻推荐为背景, 目的是要求我们根据用户历史浏览点击新闻文章的数据信息预测用户 ...

  2. 天池-新闻推荐-数据分析

    前言读取数据 此次比赛是新闻推荐场景下的用户行为预测挑战赛, 是Datawhale与天池联合举办,该赛题是以新闻APP中的新闻推荐为背景, 目的是要求我们根据用户历史浏览点击新闻文章的数据信息预测用户 ...

  3. 【毕设项目】新闻推荐平台功能详解----新闻推荐系统

    系列目录 基于Python网络爬虫与推荐算法新闻推荐平台 新闻推荐平台功能详解----新闻爬虫 新闻推荐平台功能详解----数据分析系统 文章目录 系列目录 功能介绍 一.结构 二.具体实现 1.标签 ...

  4. (七)DKN:用于新闻推荐的深度知识感知网络

    摘要: 背景: 新闻语言是高度浓缩的,充满了知识实体和常识.然而,现有的方法并没有意识到一些外在的知识,也不能充分发现新闻之间潜在的知识层面的联系.因此,推荐给用户的结果仅限于简单的模式,不能进行合理 ...

  5. Datawhale第32期组队学习——task0:新闻推荐系统项目搭建:centos下前端配置

    文章目录 0.解决npm命令语法不正确问题 0.1 powershell报错 0.2 win10家庭版升级 nodejs 1.1 centos安装nodejs 1.2 win10安装nodejs 2. ...

  6. 喜报丨神策数据再获北京市广播电视局优秀推荐项目

    2021 年 11 月,第二届中国广电媒体融合发展大会在北京圆满举办.大会由国家广播电视总局.北京市人民政府指导,中共北京市委宣传部.北京市广播电视局主办,以"视听引领,融合未来" ...

  7. 中文版GPT-2,可用于写小说、诗歌、新闻等

    原文链接:https://www.sohu.com/a/336251713_610300 有人做出了中文版GPT-2,可用于写小说.诗歌.新闻等:15亿参数版GPT-2被两名研究生复现 2019-08 ...

  8. 程序员简历项目经历怎么写 ?三条原则不可忽视 【项目案例分享】

    程序员简历项目经历怎么写 ?三条原则不可忽视 [项目案例分享] 作为一个程序员,想必大家曾经都做过一些项目,可能现在手头上也还有一些项目. 不过还是有很多学生朋友来问我"没有项目怎么办&qu ...

  9. 新闻推荐笔记(2):Embedding-based News Recommendation for Millions of Users

    面向数百万用户的嵌入式新闻推荐 雅虎 KDD2017 摘要 基于ID的方法,如协同过滤和低阶分解,以推荐著称,但不适合用于新闻推荐,因为候选文章很快过期,并在短时间内被新的文章替换. 信息检索中经常使 ...

最新文章

  1. qt向服务器传输文字_Qt 模拟 HTTP 表单提交文字或文件到服务器
  2. Mysql之case when用法总结
  3. UPS及蓄电池的运行管理、维护操作和常见故障处理
  4. [网鼎杯 2020 青龙组]bang
  5. uva1628 最优路径问题
  6. 阿里技术专家:数据一致性检测的应用场景与最佳实践
  7. STM8L芯片启动时钟分频问题及发现(转)
  8. 编程语言EF速度测试(4):nsieve-bits
  9. trump可音译为“专普”
  10. ××× L2TP over IPSec 配置
  11. 在Windows 10中截取截图的6种方式 简介
  12. src 漏洞平台 应急响应中心 提交漏洞 简介
  13. 【软件质量保证与测试】2.4软件测试与软件开发的关系
  14. Application entry file “background.ts“ in the “**dist_electron\win-unpacked\resources\app.asar“ does
  15. Arduino 使用 旋转编码器
  16. 油气管道供应可视化数据大屏:连点成线,打破信息孤岛
  17. 寻找市场中的Alpha—WorldQuant的阿尔法设计理念(上)
  18. ActiveX控件的MFC实现(VS2017,OpenGL)
  19. 数影周报:程序员离职后锁公司硬盘;Salesforce 遭遇高管离职潮
  20. 【微信小程序】在组件中刷新页面

热门文章

  1. codeforce A - Sequence with Digits
  2. matlab的message函数,matlab用于数字调制,几个函数的使用问题
  3. php5ts.dll 注册码,修复php5ts.dll
  4. oracle和mysql登录方式_使用普通方式和连接池方式获取Oracle和Mysql链接
  5. timer计时器 java_java中基于timer计时器的图片播放
  6. python交互式终端是怎么实现的_python中的脚本和交互式终端客户端
  7. a eraser eraser还是an_eraser前面用a还是an
  8. java cmd 等待输入_JAVA:调用cmd指令(支持多次手工输入)
  9. accessors 作用_lombok @Accessors用法详解(一看就能就懂)
  10. C++虚继承下的内存模型(二)