微信扫码
与创始人交个朋友
我要投稿
很多朋友可能问了,现在市面上,一大堆工具实现啦!包括我们课程,都有demo做出来啊!
为什么要学GraphRAG?
这就好比【成品衣柜】和【定制衣柜】!
市场上大部分的工具,是所谓标准化+水桶化产物!
因为他要给足够多的人,都能用起来!往水桶化设计!不信你去看!
但!是否用得好?
AI开发者+创业者,不仅要懂得用,还要懂如何做!
根据用户的需求,做定制,你要找到这些需求背后,真正!有价值的技术!
懂得拆开他背后的构成组件!还要懂得如何根据需求,做出来!
AI产品大量迸发的时代,你才能找到自己的,价值所在!
我们
前几天,雄哥在会员群里发了哈工大-CPubMed-KGv2_0.txt(HIT CPubMed-KG)
本次实践,我们以此为示例,准备【高质量】知识图谱数据导入!
今天,我们只从数据本身出发,确保数据质量情况下,把数据揉捏成知识图谱要求的样子,准备塞进去!
整个系列是这样的:
day1:数据处理!把数据,转为知识图谱标准数据!【本篇】
day2:构建知识图谱!把数据存到Neo4J中!
day3:企业批量创建!工程化批量处理知识数据!
day4:RAG学习合集!深入浅出学langchain核心!
day5:与GraphRAG融合!增强RAG,构建kg+rag应用!
今天,雄哥从一份超高质量+超大规模的人工校验数据,开始!
1.0版本,雄哥就在会员圈介绍过,现更新2.0版本!
460万+三元组!181万+实体!超高质量人工校准!超难得!
这是一份基于中华医学会的大规模医学文献数据,利用自然语言处理技术与信息抽取技术构建的中文医学文献知识图谱,CPubMed-KG2.0依靠海量的优质文献来获取覆盖大部分疾病、大规模、高质量的医学结构化知识,并采用人工校验与多细粒度机器校验结合的方式提升知识的可靠性,目前CPubMed-KG2.0包含了558645种疾病、186663种药物、153226种症状以及各类诊疗技术在内的总计超过181万个实体,并涵盖药物治疗、并发症、实验室检查、适应症、高危因素、多发群体、死亡率等40余种关系,结构化知识三元组总量达到460万。
所有会员都可以通过会员盘下载:
人的专注力只有10分钟,那!话不多说!
① 本系列学习环境搭建
② 观察+思考!数据是怎样的?kg需要怎样的数据?
③ 转换!把手上的数据,转为知识图谱要求格式!
整个过程,3个阶段!不可跳过!
与以往雄哥做内容节奏不同,深度思考与实操,一起上!
雄哥除了上传知识图谱外,同步还将本次实践的所有代码和环境打包到这里了!
直接到会员盘下载!
下载到本地,不管你放在哪里,不要有中文路径!
你还未加入知识星球吗?点击这里加入,或在末尾联系工程师-小胖,领优惠券加入!还可加群!
现在付费成员520+,而且以一线城市AI创业者或国内大厂技术方向为主!
会员都是实干派!
本系列环境
操作系统:三大系统均可,雄哥本次用win11
开发语言:Python 3.10
实践环境:conda/jupyter
算力要求:0
大模型:API
图数据库:neo4j
RAG框架:langchain
数据处理:Pandas
之前!雄哥在KG课程部分,已全面做了本地环境的0-1搭建指引!
考虑部分会员刚加入,未参与本地搭建,本系列核心板块均采用API来开展!
准备在本地开始的朋友,不用想,马上加入KG系列学习!举一反三!
直接cd进去下载的这个文件夹中!
cd day1
这里,雄哥把环境都已经打包了下来,并存在文件-->"medkg_environment.yml“
conda env create -f environment.yml
这里需要等几分钟,要看你本地的网速!
他会把雄哥的环境,复现到你本地,你直接就能用起来了!
先激活环境!这个环境是独立的,要养成习惯,1个项目就是1个环境!
conda activate medkg
如果你有其他的环境管理工具,怎么顺手怎么来,其他朋友跟雄哥操作!
到这里,你可以继续后面内容!
这里,雄哥收到一份数据,要先分析!
这份数据是怎样的,然后才能对应到知识图谱的要求,去做处理策略!
现状-->目标
中间才能想到策略!
我们都以此方法工作,而不围绕某个小部分,去拎!
否则大概率啥都干不成!
原始数据是一份TXT格式数据,总共460万行+!每一行就是一个完整的三元组+属性表示!
你在会员盘下载的数据有两份,另外一份是雄哥团队处理后的数据,csv格式(未清洗)!
你,看看数据,想想怎么搞?
数据结构如下:
子宫急性穿孔损伤 | 疾病 | 影像学检查 | 超声诊断 | 检查 |
围产儿死亡 | 疾病 | 病因 | 胎儿因素 | 社会学 |
大鼠脑动静脉瘘 | 疾病 | 辅助治疗 | 右侧颈总动脉结扎 | 其他治疗 |
月经异常 | 疾病 | 实验室检查 | 带器妊娠率 | 检查 |
失眠 | 疾病 | 临床表现 | E/A比值减少 | 症状 |
胫骨平台骨折 | 疾病 | 手术治疗 | 延迟手术 | 手术治疗 |
SLE | 疾病 | 实验室检查 | 流式细胞分选术 | 检查 |
老年内科 | 疾病 | 辅助治疗 | 前馈控制护理管理 | 其他治疗 |
小肠出血 | 疾病 | 影像学检查 | 多层螺旋CT诊断 | 检查 |
怎样!
看出来什么门道没?
数据,均以!“头实体 头实体类型 关系 尾实体 尾实体类型” 格式构建!
头实体 | 头实体类型 | 关系 | 尾实体 | 尾实体类型 |
head_entity | entity_type | relation | tail_entity | entity_type |
胃十二指肠出血 | 疾病 | 辅助治疗 | 禁食 | 其他治疗 |
胃十二指肠出血 | 疾病 | 辅助治疗 | 消化内镜治疗 | 其他治疗 |
胃十二指肠出血 | 疾病 | 辅助治疗 | 氩离子凝固方法 | 其他治疗 |
胃十二指肠出血 | 疾病 | 实验室检查 | 抽签法 | 检查 |
胃十二指肠出血 | 疾病 | 手术治疗 | 消化内镜 | 手术治疗 |
胃十二指肠出血 | 疾病 | 内窥镜检查 | 消化内镜 | 检查 |
... | ... | ... | ... | ... |
1行就是1组数据!
胃十二指肠出血是一种疾病,通过手术-->消化内镜来治疗!
超高质量三元组数据!
这类图数据,对于RAG来说,爆杀!
当用户问到:
胃十二指肠出血怎么办?
会直接锁定这个节点,把他N跳后相关的所有节点,一次打包!作为提示词给大模型!
强大的数据关系表示能力下!无所遁形!
甚至比1.0版本都上一个档次!
专家的力量!
这个项目有些朋友还是我们意友圈成员;
但现在是txt格式,而且元数据有460万+条!太大,我们无法做更多数据分析!
稍后,跟着雄哥一边摸这份数据,一边想对策!
这样的数据,是知识图谱需要的吗?
需要3类数据!这里以课程中用到的NebulaGraph示例!其他数据库产品可能名字不同,大同小异!
点用来保存实体对象,特点如下:
点是用点标识符(VID
)标识的。VID
在同一图空间中唯一。VID 是一个 int64,或者 fixed_string(N)。
点可以有 0 到多个 Tag。
边是用来连接点的,表示两个点之间的关系或行为,特点如下:
两点之间可以有多条边。
边是有方向的,不存在无向边。
四元组 <起点 VID、Edge type、边排序值 (rank)、终点 VID>
用于唯一标识一条边。边没有 EID。
一条边有且仅有一个 Edge type。
一条边有且仅有一个 Rank,类型为 int64,默认值为 0。
属性是指以键值对(Key-value pair)形式表示的信息。
标签(Tag):Tag 由一组事先预定义的属性构成。
边类型(Edge type):Edge type 由一组事先预定义的属性构成。
看数据,你觉得哪些是点,哪些是边?哪些是属性?
头实体 | 头实体类型 | 关系 | 尾实体 | 尾实体类型 |
胃十二指肠出血 | 疾病 | 辅助治疗 | 禁食 | 其他治疗 |
为什么呢?
建模没有完美方案,数据、场景、目标都是不同的,不同的数据间,可能会有取舍,只能找到最契合目标的方案!
而不是完美方案!
我们要在知识图谱中设计模型,非常重要!
本次仅针对数据来分析,不涉及其他场景、生产环境等因素!
看到这份数据,我们要看,哪些是常量,哪些是常变量!
还是,这份数据!
常量(3个):“疾病”、“其他治疗”、“辅助治疗”
常变量(2个):“胃十二指肠出血”、“禁食”
头实体 | 头实体类型 | 关系 | 尾实体 | 尾实体类型 |
胃十二指肠出血 | 疾病 | 辅助治疗 | 禁食 | 其他治疗 |
A点 | A点属性 | 边 | B点 | B点属性 |
这份数据,最适合的方案,就是这样!
但是,这份数据还有一些未探明区域(txt还不能做太多探索),仅肉眼可见,他还有这样的数据:
心肌细胞 | 同义词 | hESC-CM |
这样就是两个头、尾实体,“同义词”是边;
还有多少这类数据,还未知,这种导入+处理方案不同,都是需要单独处理的,清洗后,才能拎出来!
这里讲到了导入,除了kg产品间迁移方案,大部分的kg产品,都是支持csv格式的文件导入的!
即雄哥上面演示!
这样才能导入到kg数据库中!
接着来吧!
基本市面能看到的kg产品,都可以用csv格式导入,utf-8格式更佳!
理解了CPubMed-KG v2.0的格式,处理再简单不过!
这里!雄哥工程师写了一份脚本,直接用Python代码,把txt文件,转为csv!
先打开代码!
把你存放txt的文件的绝对路径,填写到上面!
把导出的路径也一并填上!
不能有中文!
# 输入文件路径和输出文件路径input_filename = '/home/yiyiai/kg/med-kg/CPubMed-KGv2_0.txt'output_filename = '/home/yiyiai/kg/med-kg/CPubMed-KGv2_0.csv'
回到我们刚刚打开的终端中!
直接运行代码!
python txttocsv.py
因为我们已经知道知识图谱的数据要求,以及我们手上的数据情况!
写这个.py代码就非常快了!
这里工程师用了逐行读取+写入的方案做的!
最重要的代码段如下:
# 逐行读取数据并写入CSV文件
for line in txt_file:
# 移除行尾的换行符并按制表符分割
parts = line.strip().split('\t')
# 处理每部分中的'@@',将它们转换为两个独立的列
new_parts = []
for part in parts:
if '@@' in part:
# 分割'@@'并将结果插入到列表中
split_part = part.split('@@')
new_parts.extend(split_part)
else:
new_parts.append(part)
运行代码后,会自动处理,处理完成后,会自动在窗口打印“转换完成”!
好!
今天完成了转换,雄哥就可以,对这个数据做更多探索!
这份超高质量数据!究竟有多少干扰数据?有多少缺失值?
如何导入到知识图谱数据库中!?
后面我们继续往前探!
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-11-15
大语言模型与图结构的融合:推荐系统中的新兴范式
2024-11-15
利用LLM构建非结构化文本的知识图谱
2024-11-13
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
2024-11-13
利用LLM Graph Transformer实现知识图谱的高效构建
2024-11-12
什么是知识图谱和AI多模态推理
2024-11-12
Graph Maker:轻松使用开源大模型将文本转为知识图谱,发现新知识!
2024-11-11
iText2KG:使用LLM构建增量知识图谱(KG)
2024-11-08
NebulaGraph 在中医药领域的应用:构建鼻炎知识图谱
2024-07-17
2024-07-11
2024-07-13
2024-08-13
2024-07-08
2024-07-12
2024-07-26
2024-07-04
2024-06-10
2024-06-24
2024-11-04
2024-10-10
2024-10-03
2024-09-27
2024-09-08
2024-09-05
2024-08-27
2024-08-24