用AI大模型将CSV文件转为图谱,发现数据间关系,以健康医疗场景为例

最近,我发现了一个 neo4j-runway 项目。Neo4j Runway 是一个 Python 库,简化了将关系数据迁移到图数据库的过程。

它提供了与 OpenAI 交互的工具,用于数据发现和生成数据模型,还提供了生成代码和将数据加载到 Neo4j 实例中的工具。

换句话说,通过上传 CSV 文件,大模型将识别节点之间关系,并自动生成知识图谱。

在健康医疗领域,知识图谱是一种强大的工具,用于组织和分析复杂的医疗数据。

这些图谱以一种更易于理解的方式结构化信息,使得不同实体之间的关系更加清晰,例如疾病、治疗、患者和医疗提供者。

知识图谱在健康医疗行业有以下一些有用的应用:

整合多样化的数据源。知识图谱可以整合来自各种来源的数据,如电子健康记录(EHRs)、医学研究论文、临床试验结果、基因组数据和患者历史记录。

改进临床决策。通过链接症状、诊断、治疗和结果,知识图谱可以增强临床决策支持系统(CDSS),因为它们考虑了大量相互关联的医学知识,可能提高诊断准确性和治疗效果。在本文中,我将探讨这一主题。

个性化医疗。通过将患者特定数据与更广泛的医学知识相关联,促进制定个性化治疗计划。这包括理解基因信息、疾病机制和治疗反应之间的关系,从而提供更量身定制的医疗。

加速新药研发。在制药研究中,知识图谱可以通过识别潜在药物靶点和理解疾病涉及的生物路径,加速新药研发。

公共卫生与流行病学。有助于追踪疾病爆发、理解流行病学趋势和规划干预措施。因为它们可以整合来自各种公共卫生数据库、社交媒体和其他来源的数据,提供关于公共卫生威胁的实时洞察。

1

Neo4j Runway 是由 Alex Gilmore 创建的开源库。你可以在这里找到代码库。

代码库:https://github.com/a-s-g93/neo4j-runway

目前,该库仅支持使用 OpenAI 的大模型解析 CSV,并提供以下功能:

  • • 提取数据:利用大模型从数据中提取有意义的见解。
  • • 图数据建模:使用 OpenAI 和 Instructor Python 库开发准确的图数据模型。
  • • 数据摄取:利用 Runway 内置的 PyIngest ,将数据加载到 Neo4j 中。
  • • 无需编写 Cypher 语句, 因为大模型会完成所有工作。

本文除了演示用大模型把CSV文件转为知识图谱外。我还使用了 Langchain 的 GraphCypherQAChain,用提示词生成 Cypher,无需编写一行 Cypher(用于查询 Neo4j 图数据库的 SQL 类语言)即可查询图谱。

该库给了一个金融行业的示例,本文我将测试在健康医疗场景中的效果。

从 Kaggle 上一个非常简单的数据集开始(疾病症状和患者档案数据集)。

该数据集只有 10 列(疾病、发烧、咳嗽、疲劳、呼吸困难、年龄、性别、血压、胆固醇水平和结果变量),我希望能够向大模型提供医疗报告,以获得诊断假设。

数据集:https://www.kaggle.com/datasets/uom190346a/disease-symptoms-and-patient-profile-dataset

2

让我们直接进入代码部分。

加载所需的库和环境变量

首先,加载所需的库:

sudo apt install python3-pydot graphviz
pip install neo4j-runway
import numpy as np
import pandas as pd
from neo4j_runway import Discovery, GraphDataModeler, IngestionGenerator, LLM, PyIngest
from IPython.display import display, Markdown, Image

加载环境变量:在 Neo4j Aura 中创建实例并进行身份验证。

在这里插入图片描述

加载医疗数据并整理格式

从 Kaggle 网站下载 CSV 文件,并将其加载到 Jupyter notebook 中。这个数据集非常简单,但对于测试概念非常有用。

在这里插入图片描述

图片

例如,我们可以创建一个列表,列出所有导致呼吸困难的疾病,这不仅对选择图中的节点很有趣,也有助于开发诊断假设:

disease_df[disease_df['Difficulty Breathing']=='Yes']

所有变量必须是字符串(库是这样设计的),即使是整数。

然后,我们保存 CSV 文件:

在这里插入图片描述

现在,我们将为大模型描述数据,包括每个字段的可能值:

DATA_DESCRIPTION = {
'Disease': 'The name of the disease or medical condition.',
'Fever': 'Indicates whether the patient has a fever (Yes/No).',
'Cough': 'Indicates whether the patient has a cough (Yes/No).',
'Fatigue': 'Indicates whether the patient experiences fatigue (Yes/No).',
'Difficulty Breathing': 'Indicates whether the patient has difficulty breathing (Yes/No).',
'Age': 'The age of the patient in years.',
'Gender': 'The gender of the patient (Male/Female).',
'Blood Pressure': 'The blood pressure level of the patient (Normal/High).',
'Cholesterol Level': 'The cholesterol level of the patient (Normal/High).',
'Outcome Variable': 'The outcome variable indicating the result of the diagnosis or assessment for the specific disease (Positive/Negative).'
}

用大模型识别重要数据元素

下一步是让大模型分析表格数据,识别对生成图数据模型重要的数据元素。

在这里插入图片描述

这将生成数据分析的 Markdown 输出:

图片

创建初始模型

现在,让我们创建初始模型:

在这里插入图片描述

图片

这里,我的重点是疾病,所以我们将重新排列一些关系。

gdm.iterate_model(user_corrections=‘’’
Let’s think step by step. Please make the following updates to the data model:
\1. Remove the relationships between Patient and Disease, between Patient and Symptom and between Patient and Outcome.
\2. Change the Patient node into Demographics.
\3. Create a relationship HAS_DEMOGRAPHICS from Disease to Demographics.
\4. Create a relationship HAS_SYMPTOM from Disease to Symptom. If the Symptom value is No, remove this relationship.
\5. Create a relationship HAS_LAB from Disease to HealthIndicator.
\6. Create a relationship HAS_OUTCOME from Disease to Outcome.
‘’')

from IPython.display import Image, display
gdm.current_model.visualize().render(‘output’, format=‘png’)
# Load and display the image with a specific width
img = Image(‘output.png’, width=1200) # Adjust the width as needed
display(img

图片

用Neo4j生成图谱

现在我们可以生成 Cypher 代码和 YAML 文件,将数据加载到 Neo4j 中。

如果你只是测试或第二次执行此操作,可能需要将实例重置为空白状态(清除所有内容)。

在这里插入图片描述
在这里插入图片描述

一切准备就绪。让我们将数据加载到实例中:

PyIngest(yaml_string=pyingest_yaml, dataframe=disease_df)

进入 Neo4j Aura 实例,打开,输入你的密码,并通过 Cypher 运行此查询:

MATCH (n)
WHERE n:Demographics OR n:Disease OR n:Symptom OR n:Outcome OR n:HealthIndicator
OPTIONAL MATCH (n)-[r]->(m)
RETURN n, r, m

图片

按下 CTRL + ENTER,你将看到以下结果:

图片

检查节点和关系后,我们发现症状、健康指标和人口统计数据之间有大量的相互连接:

图片

让我们看看糖尿病。由于没有应用过滤器,男性和女性都会出现,以及所有的实验室、人口统计和结果的可能性。

MATCH (n:Disease {name: 'Diabetes'})
WHERE n:Demographics OR n:Disease OR n:Symptom OR n:Outcome OR n:HealthIndicator
OPTIONAL MATCH (n)-[r]->(m)
RETURN n, r, m

图片

或者查看所有在临床检查中表现出高血压的疾病:

// Match the Disease nodes
MATCH (d:Disease)
// Match HAS_LAB relationships from Disease nodes to Lab nodes
MATCH (d)-[r:HAS_LAB]->(l)
MATCH (d)-[r2:HAS_OUTCOME]->(o)
// Ensure the Lab nodes have the bloodPressure property set to 'High'
WHERE l.bloodPressure = 'High' AND o.result='Positive'
RETURN d, properties(d) AS disease_properties, r, properties(r) AS relationship_properties, l, properties(l) AS lab_properties

图片

3

接下来我们向大模型(在本例中是 Google 的 Gemini-1.5-Flash)提交一份医疗报告,让它通过 Langchain(GraphCypherQAChain)自动生成 Cypher 查询,基于症状、健康指标等,返回患者可能患有的疾病。

让我们开始吧:

在这里插入图片描述
在这里插入图片描述

从实例中获取知识图谱和模式:这里有节点属性和关系属性。

kg = Neo4jGraph(
    url=NEO4J_URI, username=NEO4J_USERNAME, password=NEO4J_PASSWORD, database=NEO4J_DATABASE

)
kg.refresh_schema()
print(textwrap.fill(kg.schema, 60))
schema=kg.schema

图片

初始化 Vertex AI Gemini-1.5-Flash:

在这里插入图片描述

现在是最难的部分。为 Gemini-1.5-Flash 创建详细的指令,让它自动生成 Cypher 查询图数据库并获取我们需要的结果。

我们需要一个主提示词!一步步思考+少样本提示。

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

编者注:上面的提示词中文版如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我们设置 GraphCypherQAChain

在这里插入图片描述
在这里插入图片描述

并提交医疗报告:

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

输出结果:这里 Gemini-1.5-Flash 生成 Cypher 查询图数据库,通过 JSON 返回结果给 LLM,LLM 解释并返回可读的响应:

图片

这个结果不考虑 Gemini-1.5-Flash 的知识库,只考虑它查询的知识图谱。想象一下,如果我们有一个包含 300 个特征的漂亮数据集!

注意,我们可以在 GraphCypherQAChain 中将 top\k 设置为 1 或其他值:

图片

如果我们运行最后一个查询,我们将得到包含这些症状的 77 种疾病列表,但 top\k 设置为 1:

图片


需要注意的是,当前 neo4j-runway 项目还不成熟,具有以下限制:

  • • 仅支持单个 CSV 输入用于数据模型生成
  • • 节点只能有一个标签
  • • 仅支持唯一性和节点/关系键约束
  • • 关系不能有唯一性约束
  • • CSV 列引用相同节点属性在模型生成中不受支持
  • • 目前仅支持 OpenAI 模型
  • • Runway 包含的修改版 PyIngest 函数仅支持加载本地 Pandas DataFrame 或 CSV。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值