知识图谱推荐系统MCRec的Python项目源码与教程

版权申诉
4星 · 超过85%的资源 3 下载量 125 浏览量 更新于2024-10-26 11 收藏 4.25MB ZIP 举报
资源摘要信息: 本资源包含基于知识图谱的推荐系统算法MCRec的Python实现源码,以及相关的项目说明文档和数据集。MCRec算法利用知识图谱来增强推荐系统的性能,通过构建用户-物品交互图和知识图谱的融合,提高推荐的准确性和个性化水平。 运行环境要求为Python 3.7.0,以及一系列Python库,包括torch 1.12.0、pandas 1.1.5、numpy 1.21.6和sklearn(版本信息未提供,但通常应为0.22.2或更高版本)。资源中提供了四个不同的数据集:music(音乐)、book(书籍)、ml(电影)和yelp(商户),用于实验和训练推荐算法。 数据集文件中,ratings.txt记录了用户对项目的点击行为,其中1表示用户点击了该项目,0表示没有点击。kg.txt是知识图谱文件,记录了实体之间的关系,其中包含头实体、尾实体和它们之间的关系。user-list.txt则提供了用户及其ID的列表。 项目结构中还包含了项目说明文档(项目说明.md),以及两个主要的Python脚本:main-get_path.py 和 main-MCRec.py。前者可能用于处理和获取数据路径等初始化任务,而后者则是运行MCRec推荐算法的核心脚本。文件夹data包含所有相关数据集文件,src可能包含源代码实现,而 IDEA文件夹表明这个项目可能包含了用于开发的IDE配置文件。 知识图谱是一种语义网络,通过实体和关系构建链接起来的知识库。在推荐系统中,知识图谱可以用来提供物品或用户的丰富背景信息,从而帮助算法更好地理解用户偏好和物品特征。MCRec算法使用知识图谱,能够捕捉到用户与物品之外的间接关系,为推荐算法提供了更多的上下文信息。 推荐系统是帮助用户发现他们可能感兴趣的新产品或服务的技术。传统的推荐算法通常只关注用户的行为数据,而基于知识图谱的推荐系统则进一步利用图谱中丰富的语义信息,进行更深层次的推理和推荐。MCRec算法结合了协同过滤和知识图谱的优势,通过建立用户和物品的交互关系图和知识图谱的映射,增强了推荐系统的推理能力和准确度。 本资源适合计算机科学、人工智能、通信工程、自动化、电子信息等专业背景的学习者,无论是在校学生、老师还是企业员工都可以使用本资源进行学习和研究。资源的易用性也使之成为初学者的入门好选择,而且可以作为毕业设计、课程设计或作业的实践项目,甚至可直接用于项目的初期演示。 学习本资源的过程中,学习者将有机会深入理解知识图谱构建、推荐算法原理以及Python编程实践。通过实际的代码调试和数据分析,可以进一步提高解决实际问题的能力。此外,本资源的开放性和可扩展性还允许学习者在此基础上进行二次开发,实现新的功能或改进现有算法,从而加深对相关领域的理解和掌握。
2023-07-20 上传
<项目介绍> 该资源内项目源码是个人的毕设,代码都测试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类关系判断在知识图谱中实体间两两之间的关系,从而计算出患该种疾病的概率。定义知识图谱实体间关系的描述性统计特征如下表所示。 医生推荐 在医生推荐模块,平台期望寻找到历史数据中与用户最相似的患者,并找到与之对应到相应的医生,来完成个性化的推荐。具体而言,平台首先通过用户的描述文本获