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

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

总结

 

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

 

  • 41
    点赞
  • 315
    收藏
    觉得还不错? 一键收藏
  • 43
    评论
这是一个基于Python语言开发的电影个性化推荐系统的计算机毕业设计项目。该项目旨在为用户提供个性化的电影推荐服务,帮助用户发现他们可能感兴趣的电影。该系统结合了多种推荐算法,包括基于内容的推荐、协同过滤推荐和混合推荐等,以实现更准确、多样化的推荐结果。 项目包含一个完整的论文,详细介绍了系统的需求分析、设计思路、实现技术和测试结果。论文首先分析了当前电影推荐系统的现状和存在的问题,然后提出了基于Python语言的电影个性化推荐系统的设计和实现方案。论文还探讨了如何利用Python语言的优势,提高推荐系统的性能和可扩展性。 此外,项目还提供了毕设源代码和详细的说明文档。源代码包含了系统的所有关键模块和算法实现,注释清晰,易于理解和修改。说明文档则详细阐述了系统的使用方法、运行环境和注意事项,以便用户能够快速上手并定制自己的推荐系统。 该系统具有很好的二次开发潜力。用户可以根据自己的需求和兴趣,对系统的推荐算法、数据集和界面等进行调整和优化。同时,由于系统采用了模块化设计,用户可以方便地添加新的功能和模块,以满足更复杂的应用场景。 总之,这个基于Python语言的电影个性化推荐系统是一个具有较高实用价值和可扩展性的毕业设计项目。它可以为用户提供个性化的电影推荐服务,同时也为研究者提供了一个实践和研究个性化推荐技术的平台。
<项目介绍> 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到94.5分,放心下载使用! 该资源适合计算机相关专业(如人工智能、通信工程、自动化、软件工程等)的在校学生、老师或者企业员工下载,适合小白学习或者实际项目借鉴参考! 当然也可作为毕业设计、课程设计、课程作业、项目初期立项演示等。如果基础还行,可以在此代码基础之上做改动以实现更多功能。 本项目主要实现了疾病自诊和医生推荐两个功能并构建了医生服务指标评价体系。疾病自诊主要通过利用BERT+CRF+BiLSTM的医疗实体识别, 建立医学知识图谱, 从而实现基于患者问诊文本的疾病初诊。这个功能帮助患者初步了解自身的疾病情况并为下一步与医生的交流提供支持。 第二个功能是医生推荐。本平台采用基于Jacard距离的Minhash和minhashLSHForest算法来进行推荐, 匹配患者的咨询文本和医生的历史问诊信息,从而为患者推荐最适合的医生。最后我们使用django框架进行项目发布。 数据采集 本项目除了使用公开的医疗数据集外,还采集了中国领先医疗平台的数据集。 `spiders`模块提供了数据采集的信息。 39crawler用于获取39健康网的数据,hdf用于获取好大夫网的数据(scrapy)。 我们还提供了编译后的代码程序,感兴趣的同学可以通过百度网盘获取。 链接:https://pan.baidu.com/s/149ttC2KJJLA9HJl8YYKkLg 提取码:见资源 运行程序在dist文件夹中,双击spider_run.exe即可运行爬虫程序。 爬取指定的疾病信息,在disease.txt加入科室名称(拼音)或者疾病名称(拼音),每一个科室或者科室占据单独一行。 无论你在disease.txt文件中添加多少行,爬虫只会爬取第一行对应的科室或疾病,结果将在程序运行完成后,输出为doctor.csv,disease.csv。 如需爬取第二个疾病,请将第一行科室或者疾病删去,重新运行程序。 ## 3.疾病自诊 在疾病自诊模块,平台会读取用户疾病描述的语义信息,首先进行文本预处理,然后通过实体识别模型抽取出其中的关键成分,即:疾病症状、并发症、身体部位等医学实体。然后,这些医学实体会输入到平台后端的知识图谱(基于大规模数据集构建)中。最终,通过知识图谱的快速查询和计算,平台将返回基于患者疾病描述的疾病推断以及相应的概率值。同时,疾病相关的介绍、需要去就诊的科室和疾病多发人群的相关信息也会推送给用户。 ### 3.1. 医学实体识别 医疗实体识别是指从给定句子中识别出医疗实体。在本项目中,需要从患者咨询的病情描述中识别出疾病、症状、科室等多种类型的医疗实体,找到与疾病特征相关的关键词。 `entity_extract`模块提供了有关医学实体识别的有关信息。 支持识别的实体类型 ~~~~ body:患病部位,如:胃,皮肤 drug :药品,如:产妇康清洗液 feature:患病程度,如:严重 disease:疾病,如:前列腺炎 symptom:疾病症状,如:胃壁增厚 department:科室,如:五官科 test:疾病相关的检查,如:血常规 模型选择 我们在训练集上检验了BERT、BERT+CRF、BERT+BiLSTM和BERT+BiLSTM+CRF各模型的准确率、召回率和micro_f1值后,我们发现BERT+BiLSTM+CRF模型具有更好的医疗实体识别能力,因此,在本项目中,我们选用`**BERT+BiLSTM +CRF**`模型完成后续医疗实体识别的任务。 知识图谱构建 为了进行准确的疾病诊断,我们依托于大规模数据集构建知识图谱。 `build_kg`模块提供了有关知识图谱构建的信息。 我们将应用于疾病自诊这一模块的所需实体标记为诊断检查项目、科室、疾病、药品、患病的部位、疾病症状、患病程度,在用户输入一段文本后,我们首先通过实体识别将以上这些关键实体识别出来。 通过事先考察,我们发现在进行疾病诊断的过程中,不仅仅是以身体的症状为依据,也有许多其他的所属关系可供我们参考。因此在进行关系抽取中,我们将各个实体间的关系分为8类,分别为属于、疾病常用药品、疾病对应科室、疾病别名、疾病所需检查、疾病部位、疾病症状、疾病并发疾病。我们通过以上8类关系判断在知识图谱中实体间两两之间的关系,从而计算出患该种疾病的概率。定义知识图谱实体间关系的描述性统计特征如下表所示。 医生推荐 在医生推荐模块,平台期望寻找到历史数据中与用户最相似的患者,并找到与之对应到相应的医生,来完成个性化推荐。具体而言,平台首先通过用户的描述文本获
对于Python个性化视频推荐系统源码的下载,可以通过以下几个步骤来实现: 1. 确认源码来源:首先需要确定源码的具体来源,比如是否来自一个开源项目、一个论文研究、或者是一个商业产品。确保源码的可靠性和合法性。 2. 在代码托管平台或相关网站搜索:常见的代码托管平台如GitHub、GitLab等以及其他技术社区和论坛,如Stack Overflow、CSDN等,都可能存在相关的个性化视频推荐系统源码。 3. 进行关键词搜索:使用关键词“Python个性化视频推荐系统源码”在各大搜索引擎中进行搜索,会得到一些相关的参考资料和链接。需要注意的是,确保使用可信的来源并遵守相关的开源协议规定。 4. 领域专业网站:某些领域的专业网站可能会提供一些相关的源码下载链接,例如学术研究领域的网站或会议论文集。 总之,在下载任何源码之前,应该注意以下几点: 1. 确认源码的可靠性和来源,并且确保符合所需的技术和需求。 2. 遵守相关的开源协议和法律规定,不要侵犯他人的知识产权。 3. 阅读和理解源码的使用说明文档,以确保正确安装和配置所需环境。 4. 如果需要改进或修改源码,应该遵循相应的规定并注明原作者。 总之,通过合法途径下载和使用个性化视频推荐系统源码,能够为用户提供更好的视频推荐体验,并为开发相应的推荐系统提供参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值