继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

基于图的检索增强生成技术在医疗文档问答中的应用:GraphRAG与NVIDIA NIM的结合

临摹微笑
关注TA
已关注
手记 325
粉丝 32
获赞 170

GraphRAG(图检索增强生成)是一种结合图数据结构和检索增强生成(RAG)的技术,RAG是一种常用在大型语言模型(LLMs)中的方法。这种结合旨在通过引入结构化知识表示(如图)来增强检索过程,从而提升模型性能。

GraphRAG背后的关键概念有:

  1. 检索增强的生成(RAG)
  • RAG 结合了 检索生成。语言模型从外部知识库中检索相关文档或信息,然后利用检索到的信息生成回复。
  • 这使得模型能够利用最新的、特定的信息,这对于需要外部知识的任务(如问答)来说至关重要。

2. 基于图的知识表示

  • 一个图形由节点(表示实体、概念或数据点)和边(表示节点间的关系)组成。
  • 图非常适合表示结构化知识,因为它们可以捕捉实体间的复杂关系。
  • 在GraphRAG中,这些图形作为增强检索的工具,利用数据点间的关系来检索更相关的上下文信息。
为什么要GraphRAG很重要:
  1. 更好的上下文理解能力

    图表让模型不仅能理解孤立的事实,还能理解这些事实间的关系。特别是在需要复杂推理的任务中尤其有用,因为在这些任务中,理解这些概念间的依赖关系或联系至关重要。

知识整合
以下是知识整合的内容:

  • 传统的检索方法,比如密集向量检索,依赖于文本嵌入之间的相似性,可能会忽略数据点间固有的结构关联。通过GraphRAG,将结构化知识(例如来自知识图谱的知识)整合进来,这样模型就可以生成更连贯和上下文准确的回答。

3. 更适合处理复杂查询。

  • 当查询需要在大量相互关联的数据之间导航时,基于图的检索比传统方法更有效,这种方法。GraphRAG 可以帮助模型沿着多个相关路径检索信息,提供更全面的回复。

4. 更好的泛化能力

  • 通过利用图的结构特性,GraphRAG 可以帮助模型在涉及关系或上下文信息的任务中更好地适应,比如推荐系统、基于知识的问答系统,或者需要深度理解和上下文感知响应的对话代理。GraphRAG 是一个专有名词,表示某种特定的图模型。

5. 实时和动态的知识应用

  • 由于基于RAG的模型可以实时检索外部信息,GraphRAG可以通过使用最新信息动态调整其回答。这在医学、金融和法律等专业领域特别有用,因为在这些领域,新数据不断更新。
GraphRAG的一些应用:
  • 问答(QA):它可以提高复杂问答任务的效率,其中答案不依赖于单个事实,而是依赖于理解各种数据点之间的关系。
  • 推荐系统:通过使用用户行为图或项目关系图,可以使推荐更加准确和符合上下文。
  • 科学研究:研究人员可以更有效地在相互关联的研究、引用和概念之间导航。
  • 法律应用:对于法律助手等系统,GraphRAG 对于理解法律判例、案件和法规之间的关系非常有用。

总之,GraphRAG(一种通过引入基于图的知识来增强传统的检索增强生成模型的技术)在需要理解和处理关系数据及结构化数据的任务中更加有效。

我们将利用langchain技术,并使用其中的nvidia端点。

    !pip install langchain langchain_community langchain_nvidia_ai_endpoints
    import os  
    import time  
    from langchain.chains import GraphQAChain  
    from langchain_community.graphs.networkx_graph import NetworkxEntityGraph  
    import pandas as pd

参阅 — NVIDIA 开发者 | 适用于开发者的 NIM

from langchain_nvidia_ai_endpoints 导入 ChatNVIDIA  # 从 langchain_nvidia_ai_endpoints 导入 ChatNVIDIA

client = ChatNVIDIA(  # 初始化客户端
  model="meta/llama-3.1-405b-instruct",  # 模型名称
  api_key="your_api_key",  # API密钥
  temperature=0.2,  # 温度参数
  top_p=0.7,  # 上界概率
  max_tokens=1024,  # 最大token数
)

Meta的LLaMA 3.1 405B是一个拥有4050亿个参数的强大大型语言模型,旨在推动自然语言理解和生成的边界。它侧重于提高效率、准确性和上下文理解能力,使它在问答、内容生成和推理等复杂任务中表现出色。LLaMA 3.1 在早期模型的基础上进一步发展,为各种自然语言处理应用表现出最先进性能。

我们将利用输入数据来进行医疗问答系统。该文件详细描述了各种医学状况之间的关系,以下是关键字段的介绍。

  • 来源条件:列出主要条件(例如,“心脑血管疾病史”)。
  • 相关条件:列出相关联的条件(例如,“高血压”,“二型糖尿病”)。
  • 描述:提供来源条件与相关条件之间联系的详细信息(例如,“高血压是心脑血管疾病史中的一个重要组成部分”)。

每一行,定义了源状态和目标状态之间的关系,并包含描述、权重和排名等信息的元数据。

df = pd.read_parquet('/content/create_final_relationships.parquet') # 从给定路径读取Parquet文件并将其赋值给df
df.head() # 显示DataFrame的前几行

我们将使用 NetworkxEntityGraph() 类来创建图。

  1. 添加节点:第一个循环遍历数据框(df)中的每一行,并将sourcetarget值作为节点添加到图中。
  2. 添加边:第二个循环根据sourcetarget在节点之间添加边(sourcetarget),同时添加一个称为relation的边属性,用于存储节点间关系的描述信息。
graph = NetworkxEntityGraph()  

# 开始添加节点吧  
for id, row in df.iterrows():  
    graph.add_node(row['source'])  
    graph.add_node(row['target'])  

# 现在来添加边  
for id, row in df.iterrows():  
    graph._graph.add_edge(row['source'],  
                          row['target'],  
                          relation=row['描述']  
                          )
chain = GraphQAChain.from_llm(  
    llm=client,  # 从LLM创建GraphQAChain对象
    graph=graph,  
    verbose=True  # 启用详细日志输出
)

我们将打算使用GraphQAChain类创建一个链式结构,利用语言模型(LLM)来理解并解释图中的信息,从而构建一个基于图的问答(QA)链式结构。

  1. 链的创建GraphQAChain.from_llm 初始化一个使用提供的 llm(语言模型客户端)和 graph(一个 NetworkxEntityGraph)的问题回答链。
  2. 问题:变量 question 包含问题(“2 型糖尿病在心血管疾病中起作用吗?”)。
  3. 运行链chain.run(question) 使用图和 LLM 处理问题,通过遍历图中的关系和实体提取答案。verbose=True 参数确保详细记录处理过程中的信息。
    question = "2型糖尿病是否在心血管病中扮演角色?"  
    chain.run(question)

结尾

NVIDIA NIM 与 LangChain 集成得非常好,提供了强大的支持来应对大规模语言模型,并且能够构建高级的自然语言处理管道。以下是集成可以有多顺畅:

  1. LLM 模型访问:NVIDIA Nim 提供了经过优化、适合高性能需求的预训练模型。当与 LangChain 集成时,NIM 的模型可以用于多种任务,例如摘要生成、问答和文本生成,提供多功能性和扩展性。
  2. 效率与定制化:NIM 专为在 NVIDIA 硬件上进行高效推理而设计。LangChain 的基础设施支持轻松定制和组合不同的模块,如检索器、向量存储和转换器,这与 Nim 的能力相辅相成。
  3. 端到端工作流:LangChain 支持将 NIM 的高性能模型与外部数据源(例如文档搜索、图形嵌入)结合的端到端工作流。这种集成使用户能够构建快速且适应各种应用场景的流水线。
  4. 部署灵活性:NIM 的模型经过优化,既可以在云端部署,也可以在本地环境中部署,使得 LangChain 工作流可以在不同的生产环境中轻松扩展。

简单来说,NIM 和 LangChain 两者结合在一起提供了一个强大的组合,平滑集成支持高效的大型 AI 解决方案。

参考:

可以看看这些:

  1. 使用 NVIDIA NIM 部署生成式 AI | NVIDIA
  2. langchain.chains.graph_qa.base.GraphQAChain — 🦜🔗 LangChain 0.1.18
  3. https://www.ema.europa.eu/en/documents/assessment-report/vazkepa-epar-public-assessment-report_en.pdf
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP