新闻个性化推荐系统(python)-(附源码 数据集)

2023-05-16

1.背景

 
       最近参加了一个评测,是关于新闻个性化推荐。说白了就是给你一个人的浏览记录,预测他下一次的浏览记录。花了一周时间写了一个集成系统,可以一键推荐新闻,但是准确率比较不理想,所以发到这里希望大家给与一些建议。用到的分词部分的代码借用的jieba分词。数据集和代码在下面会给出。
 

2.数据集

 
 
一共五个字段,以tab隔开。分别是user编号,news编号,时间编号,新闻标题,对应当前月份的日(3就是3号)
 

3.代码部分

 
先来看下演示图  
 

     (1)算法说明

    
     举个例子简单说明下算法,其实也比较简单,不妥的地方希望大家指正。我们有如下一条数据
5738936	100649879	1394550848	MH370航班假护照乘客身份查明(更新)	11

       5738936这名用户在11号看了“MH370航班假护照乘客...”这条新闻。我们通过jieba找出11号的热点词如下。
 
失联	311	三周年	马方	偷渡客	隐形	护照	吉隆坡	航班	护照者	

       我们发现“航班”、“护照”这两个keywords出现在新闻里。于是我们就推荐5738936这名用户,11号出现“航班”、“护照”的其它新闻。同时我们对推荐集做了处理,比如说5738936浏览过的新闻不会出现,热度非常低的新闻不会出现等。
 

 (2)使用方法

  
      整个系统采用一键式启动,使用起来非常方便。首先建立一个test文件夹,然后在test里新建三个文件夹,注意命名要和图中的统一,因为新闻是有时效的,每一天要去分开来计算,要存储每一天的内容做成文档。test文档如下图,就可以自动生成。(下面的github链接提供了完整的test文档结构)
 
使用的时候,要先在Global_param.py中设置好test文件夹的路径参数。一切设置完毕,只要找到wordSplite_test包下面的main()函数,运行程序即可。
 
Global_param中设置参数说明:
      number_jieba:控制提取关键词的数量
      number_day:从第一天开始,要预测的天数
      hot_rate:预测集预测的新闻热度,数值越大热度越高
 

(3)代码流程

 
     首先我们从main()看起。
import Get_day_data
import Get_keywords
import Get_keynews
import Delete_Repeat
import Get_hot_result
import Global_param
def main():
    for i in range(1,Global_param.number_day):
        Get_day_data.TransforData(i)
        Get_day_data.TransforDataset(i)
        Get_keywords.Get_keywords(i)
        Get_keynews.Get_keynews(i)
    Delete_Repeat.Delete_Repeat()
    Get_hot_result.get_hot_result(Global_param.hot_rate)

main()    

    1.首先Get_day_data.TransforData(i)函数,找到最后一次浏览的是第i天的新闻的用户行为,存放在test/train_lastday_set目录下。
 
   2.Get_day_data.TransforDataset(i)函数,区分每一天的新闻,存放在test/train_date_set1目录下
 
   3.Get_keywords.Get_keywords(i)函数,调用jieba库,挑出每一天最火的keywords,存放在test/key_words下
 
   4.Get_keynews.Get_keynews(i)函数,通过每一个用户最后一次浏览的新闻,比对看有没有出现当天的热门keywords。如果出现,就推荐当天包含这个keywords的其它新闻。循环Global_param.number_day天,生成test/result.txt文件
 
   5. Delete_Repeat.Delete_Repeat()函数,去除result中的重复项,生成test/result_no_repeat.txt
 
   6.Get_hot_result.get_hot_result(Global_param.hot_rate)函数,因为上面生成的result_no_repeat函数可能出现,每个用户推荐过多的情况,影响准确率。所以用这个函数控制数量,每个用户只推荐新闻热度相对高的候选项。 最终结果集
test/result_no_repeat_hot.txt
 
 
注意:test下的result.txt文件每执行一次程序要手动清空,其它文件都是自动生成不用处理。
项目地址:https://github.com/X-Brain/News-Recommend-System(src文件夹下是代码,test下是数据、和文档结构)
 
----------------------------------
来自5年后的补充:

 

故事的背景这样滴

 

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

总结

 

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

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

新闻个性化推荐系统(python)-(附源码 数据集) 的相关文章

  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • Django 的内联管理:一个“预填充”字段

    我正在开发我的第一个 Django 项目 我希望用户能够在管理中创建自定义表单 并向其中添加字段当他或她需要它们时 为此 我在我的项目中添加了一个可重用的应用程序 可在 github 上找到 https github com stephen
  • 使用字典映射数据帧索引

    为什么不df index map dict 工作就像df column name map dict 这是尝试使用index map的一个小例子 import pandas as pd df pd DataFrame one A 10 B 2
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • 如何将张量流模型部署到azure ml工作台

    我在用Azure ML Workbench执行二元分类 到目前为止 一切正常 我有很好的准确性 我想将模型部署为用于推理的 Web 服务 我真的不知道从哪里开始 azure 提供了这个doc https learn microsoft co
  • Python,将函数的输出重定向到文件中

    我正在尝试将函数的输出存储到Python中的文件中 我想做的是这样的 def test print This is a Test file open Log a file write test file close 但是当我这样做时 我收到
  • 如何在不丢失注释和格式的情况下更新 YAML 文件 / Python 中的 YAML 自动重构

    我想在 Python 中更新 YAML 文件值 而不丢失 Python 中的格式和注释 例如我想改造 YAML 文件 value 456 nice value to value 6 nice value 界面类似于 y yaml load
  • Jupyter Notebook 找不到 Python 模块

    不知道发生了什么 但每当我使用 ipython 氢 原子 或 jupyter 笔记本时都找不到任何已安装的模块 我知道我安装了 pandas 但笔记本说找不到 我应该补充一点 当我正常运行脚本时 python script py 它确实导入
  • pip 列出活动 virtualenv 中的全局包

    将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
  • Python3 在 DirectX 游戏中移动鼠标

    我正在尝试构建一个在 DirectX 游戏中执行一些操作的脚本 除了移动鼠标之外 我一切都正常 是否有任何可用的模块可以移动鼠标 适用于 Windows python 3 Thanks I used pynput https pypi or
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • Pandas 将多行列数据帧转换为单行多列数据帧

    我的数据框如下 code df Car measurements Before After amb temp 30 268212 26 627491 engine temp 41 812730 39 254255 engine eff 15
  • 根据列 value_counts 过滤数据框(pandas)

    我是第一次尝试熊猫 我有一个包含两列的数据框 user id and string 每个 user id 可能有多个字符串 因此会多次出现在数据帧中 我想从中导出另一个数据框 一个只有那些user ids列出至少有 2 个或更多string
  • Python:XML 内所有标签名称中的字符串替换(将连字符替换为下划线)

    我有一个格式不太好的 XML 标签名称内有连字符 我想用下划线替换它 以便能够与 lxml objectify 一起使用 我想替换所有标签名称 包括嵌套的子标签 示例 XML
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我
  • 如何应用一个函数 n 次? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设我有一个函数 它接受一个参数并返回相同类型的结果 def increment x return x 1 如何制作高阶函数repeat可以
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解
  • 使用 z = f(x, y) 形式的 B 样条方法来拟合 z = f(x)

    作为一个潜在的解决方案这个问题 https stackoverflow com questions 76476327 how to avoid creating many binary switching variables in gekk

随机推荐

  • Android apk图片资源目录存放规则(drawable和mipmap的区别)

    mipmap mdpi 48 48 mipmap hdpi 72 72 mipmap xhdpi 96 96 mipmap xxhdpi 144 144 mipmap xxxhdpi 192 192 drawable ldpi xff1a
  • 动态代理实现AOP

    阅读目录 代理静态代理动态代理动态代理的应用场景AOPAOP实例1AOP实例2 回到顶部 代理 代理顾名思义 xff1a 代为处理 不是对目标对象的直接操作 xff0c 而是通过代理对目标对象进行包装 xff0c 此时可以在目标对象的基础上
  • 使用linux系统提供的信号量集和共享内存实现生产者和消费者问题

    使用linux系统提供的信号量集和共享内存实现生产者和消费者问题 实验目的 了解和熟悉linux系统下的信号量集和共享内存 实验任务 使用linux系统提供的信号量集和共享内存实现生产者和消费者问题 实验要求 1 写两个程序 xff0c 一
  • XML学习准备(HTML、CSS、JavaScript)

    1 学习前的准备html 1 每个网站开发人员都有必要了解以下几方面的知识 xff1a 万维网如何工作 HTML 语言 如何使用层叠样式表 CSS JavaScript 编程 XML 标准 服务器脚本技术 使用 SQL 来管理数据 2 HT
  • 如何判断系统是32位的还是64位的?

    1 最简单的一种方法 xff1a xff08 1 xff09 XP系统 右击 我的电脑 34 属性 34 xff0c 如果是32为系统 xff0c 则显示 Microsoft Windows XP Professional xff0c 即不
  • No embedded stylesheet instruction for file:奇怪的错误

    今天在看Spring的一些东西 xff0c 刚开始看 xff0c 编写了一个HelloWorld xff0c 中间除了不少错误 xff0c 但是都排除了 xff1b 但是 xff0c 最后的一个错误实在是摸不着头脑 xff1a 21 11
  • 修改Windows的默认文件查看方式

    Windows文件夹中查看文件的方式有 xff1a 缩略图 xff0c 平铺 xff0c 列表 xff0c 图标 xff0c 详细信息 xff0c 默认方式为平铺 那么如何修改成其它的默认方式呢 xff1a 进入一个文件夹 xff0c 选择
  • windows右键添加cmd

    1 运行regedit打开注册表 2 在注册表 HKEY CLASSES ROOT Directory shell分支下新建一项命名为 CommandPrompt xff0c 修改右侧窗口中的 默认 键 值为 命令提示符 xff08 你想要
  • 如何查看端口被哪个程序占用

    假如我们需要确定谁占用了我们的3306端口 1 Windows平台 在windows命令行窗口下执行 xff1a C gt netstat aon findstr 34 3306 34 TCP 127 0 0 1 9050 0 0 0 0
  • 写个心得

    唉 xff0c 菜鸟就是悲哀啊 刚刚花了将近一个小时来学习for命令 xff0c 以前一看这么复杂 xff0c 就不想学了 xff0c 总想着虽然复杂 xff0c 但也是简单的 xff0c 将来用的时候 xff0c 查查就知道了 就这样 x
  • 视图绑定功能

    文章目录 前言 以下为Kotlin语言环境在android官方文档中 视图绑定可以用于替代findViewById 并且 当启用视图绑定之后 系统会为项目中的每个XML文件生成一个绑定类 绑定类的实例包含其布局中的所有具有ID的直接引用 一
  • Android 一键分享功能

    之前在做项目时遇到这么个需求 xff0c 就是用户点击Menu或者一个按钮可以把文字分享到各大微博例如新浪微博 腾讯 人人 开心 校内等 现在我给大家演示一下 xff08 一 xff09 先建一个工程文件ShareDemo xff08 二
  • 怎么根据Comparable方法中的compareTo方法的返回值的正负 判断升序 还是 降序?

    public int compareTo Student o return this age o age 比较年龄 年龄的升序 应该理解成return 1 this age o age 计算机没有所谓的正序和逆序 xff0c 他只管大还是小
  • 自动驾驶技术-环境感知篇:V2X技术的介绍

    V2X技术概述 在前面的几篇文章分别介绍了自动驾驶在环境感知领域的相关技术点 xff0c 主要介绍了如何通过雷达配合视觉技术实现车辆自身的智能 其实在环境感知方面 xff0c 除了利用车辆自身的智能 xff0c 还可以借助外部环境实现信息的
  • 深度学习分布式策略优化、显存优化、通信优化、编译优化综述

    综述 因为我个人最近在从事可能是AI领域对性能挑战最大的方向 xff0c 自动驾驶领域 xff0c 所以对整个深度学习训练的优化尤为关注 xff0c 最近一直在学习相关内容 xff0c 谨以此篇文章做一个总结 我一直很看好深度学习训练优化这
  • 量子计算机的优势和建设挑战

    1 为什么需要量子计算机 目前大家日常使用的计算机都是经典计算机 xff0c 经典计算机计算性能的发展遵循摩尔定律 xff0c 在价格不变时 xff0c 集成电路上可容纳的晶体管数目 xff0c 约每隔18个月便会增加一倍 性能也将提升一倍
  • 浅谈ChatGPT对生产关系及工具的颠覆影响

    xff08 先歪个楼 xff0c 配图是三体乱纪元 xff0c 证明三体问题无解 xff0c 而ChatGPT证明了AIGC问题是可解的 xff09 最近ChatGPT越来越热 xff0c 仿佛看到了资本市场又一次的爆发 最近周末也会跟几个
  • 蓟门边studio-码农创业路的起点

    蓟门边工作室 xff0c 开张了 先简单介绍下lz的情况吧 xff01 lz是北邮在读硕士 xff0c 码农一枚 断断续续写代码也有一两个年头了 xff0c 但是感觉总是在外面飘着 xff0c 没写过什么大的项目 xff0c 也没真正依靠技
  • 【机器学习算法-python实现】逻辑回归的实现(LogicalRegression)

    转载请注明出处 xff1a http blog csdn net buptgshengod 1 背景知识 在刚刚结束的天猫大数据s1比赛中 xff0c 逻辑回归是大家都普遍使用且效果不错的一种算法 xff08 1 xff09 回归 先来说说
  • 新闻个性化推荐系统(python)-(附源码 数据集)

    1 背景 最近参加了一个评测 xff0c 是关于新闻个性化推荐 说白了就是给你一个人的浏览记录 xff0c 预测他下一次的浏览记录 花了一周时间写了一个集成系统 xff0c 可以一键推荐新闻 xff0c 但是准确率比较不理想 xff0c 所