Graph-Cot:图上迭代推理

论文:https://arxiv.org/pdf/2404.07103

代码:https://github.com/PeterGriffinJin/Graph-CoT

提出背景

GRAPH-COT框架提出的背景和目的:

  • 解决的类别问题:GRAPH-COT框架是为了解决那些需要在大量相互关联的文本单元中进行深入推理的问题。

这类问题通常出现在知识密集型任务中,如学术研究、法律分析、医疗诊断等领域,其中涉及的信息不仅包含在单个文本中,还蕴含在文本之间的联系和结构中。

  • 解决的具体问题:具体来说,GRAPH-COT旨在解决大型语言模型(LLMs)在处理这类任务时出现的两个主要问题:
    • 幻觉问题(Hallucinations):LLMs有时会生成看起来合理但缺乏事实依据的内容。
    • 缺乏基础性知识(Lack of Grounded Knowledge):LLMs虽然能够参数化地记忆世界知识,但它们难以引用具体的知识源。

GRAPH-COT通过在图上进行迭代推理,帮助LLMs更好地利用外部知识库,从而提高其在复杂知识任务上的表现和准确性。

你有一堆拼图,每块拼图都是一个故事的一部分,但是它们都是混在一起的。

GRAPH-COT就像一个神奇的规则,它帮助你一步步地找出哪块拼图应该放在哪里,直到整个故事变得清晰。

在这里插入图片描述

├──  GRAPH-COT【Graph Chain-of-Thought 框架】
│      ├── 框架概述【Overview】
│      │      └── 目的:增强大型语言模型通过在图上进行推理【Purpose】
│      ├── 输入【Input】
│      │      └── 问题:需要解答的查询【Question】
│      ├── 处理过程【Process】
│      │      ├── LLM reasoning【推理】
│      │      │      └── 确定需要从图中获取的信息【Determine Information】
│      │      ├── LLM-graph interaction【交互】
│      │      │      ├── 根据推理结果与图交互【Interact based on reasoning】
│      │      │      └── 使用预定义的图函数【Use predefined graph functions】
│      │      └── Graph execution【执行】
│      │              ├── 执行图函数并获取信息【Execute functions and retrieve information】
│      │              └── 返回结果以供下一步推理使用【Return results for reasoning】
│      ├── 输出【Output】
│      │      └── 最终答案:LLM推理的结论【Final Answer】
│      └── 技术与方法的衔接【Integration】
│           ├── LLM reasoning 到 LLM-graph interaction【Transition】
│           │      └── 基于推理结果生成交互查询【Generate queries from reasoning】
│           ├── LLM-graph interaction 到 Graph execution【Transition】
│           │      └── 将LLM的查询转化为图操作【Translate queries to graph operations】
│           ├── Graph execution 到 LLM reasoning【Feedback】
│           │      └── 将图操作结果反馈给LLM【Feedback results to LLM】
│           └── 迭代过程:直到得出最终答案【Iteration】
│               └── 循环上述步骤直到收敛【Loop until convergence】

GRAPH-COT 对比 MindMap

当比较GRAPH-COT与基于思维导图的多链推理方法(MindMap)时,我们可以从各自的特性和处理流程来进行分析:

  1. 框架基础

    • GRAPH-COT:专门设计用于与图结构数据交互,强调在图上进行迭代推理,以提取和利用图中的节点和边所蕴含的知识。
    • MindMap:侧重于使用思维导图来组织和可视化信息,构建推理图来支持多链推理。
  2. 输入处理

    • GRAPH-COT:通过LLM与图的交互,逐步探索和执行图上的操作,以收集信息。
    • MindMap:从证据子图中提取信息,转换成自然语言描述,构建推理图。
  3. 推理方法

    • GRAPH-COT:采用迭代的方法,LLM在每个迭代中进行推理、与图交互,然后执行图上的操作。
    • MindMap:使用Langchain技术,支持多链推理,同时探索多个推理路径。
  4. 知识利用

    • GRAPH-COT:主要依赖图结构中的显式知识,通过图的遍历和节点特征的检索来进行推理。
    • MindMap:结合了LLM内部的隐含知识和外部证据图中的显式知识。
  5. 推理过程

    • GRAPH-COT:LLM通过与图的交互来逐步构建答案,每次迭代都可能需要新的图上操作。
    • MindMap:通过构建思维导图来组织推理过程,直观地展示不同推理链。
  6. 输出结果

    • GRAPH-COT:最终输出是LLM得出的答案,可能包括推理过程中的关键步骤摘要。
    • MindMap:提供总结性答案、推理过程描述以及可视化的思维导图。
  7. 技术特点

    • GRAPH-COT:强调图结构数据的直接操作和LLM的迭代交互。
    • MindMap:侧重于使用思维导图作为推理过程的组织和可视化工具。
  8. 适用场景

    • GRAPH-COT:适用于需要深入分析和利用图结构数据的场景,如学术研究、法律分析等。
    • MindMap:适用于需要广泛探索不同推理路径并需要直观展示推理过程的场景。

GRAPH-COT与MindMap的多链推理方法在处理复杂问题时都采用了迭代和多步骤的推理过程,但它们在信息组织、知识利用和推理可视化方面各有侧重。

GRAPH-COT更专注于图结构数据的深入分析,而MindMap方法则提供了一个更为直观的推理过程可视化表示。

GRAPH-COT 和 MindMap 多链推理方法结合

案例一:复杂症状的诊断

背景:患者出现多种症状,如发热、咳嗽和乏力,这些症状可能与多种疾病相关。

GRAPH-COT应用

  1. 构建图结构:将症状、疾病、检查结果等医学信息构建成图结构,其中节点代表实体(如症状、疾病),边代表关系(如“可能导致”、“常见于”)。
  2. 迭代推理:使用GRAPH-COT进行迭代推理,每次迭代中,根据当前症状和已识别的疾病,查询图中相关的进一步症状或疾病。

MindMap应用

  1. 构建推理图:将GRAPH-COT中得到的实体和关系转换为自然语言描述,构建思维导图的推理图。
  2. 多链推理:在思维导图中同时探索多个推理链,例如,发热可能与感冒、肺炎等多种疾病相关。

结合使用

  • 使用GRAPH-COT深入挖掘图结构数据中的潜在联系。
  • 利用MindMap将这些联系和推理过程可视化,帮助医生全面考虑所有可能性。

案例二:罕见病的诊断

背景:患者出现不常见的症状组合,难以直接诊断。

GRAPH-COT应用

  1. 利用图结构:在医学知识图谱中,探索罕见症状与已知疾病之间的关系。
  2. 深度交互:通过GRAPH-COT框架,深入查询与罕见症状相关的医学文献和案例报告。

MindMap应用

  1. 整合隐含知识:结合医生的经验和隐含知识,构建包含多种可能的推理路径的思维导图。
  2. 消歧和识别:在思维导图中识别和消歧不同的疾病实体,确保正确的诊断方向。

结合使用

  • GRAPH-COT提供了一个结构化的方法来探索和验证假设。
  • MindMap帮助医生整合非结构化的经验和直觉,提供一个更全面的视角。

案例三:治疗方案的制定

背景:确诊后,需要制定个性化的治疗方案。

GRAPH-COT应用

  1. 药物相互作用查询:在药物和疾病图谱中,使用GRAPH-COT查询不同药物之间的相互作用。
  2. 患者特征分析:考虑患者的年龄、性别、过敏史等特征,使用GRAPH-COT进行个性化治疗推荐。

MindMap应用

  1. 整合治疗方案:在思维导图中整合不同的治疗选项、药物副作用和患者偏好。
  2. 多角度评估:探索治疗的经济、心理和社会影响。

结合使用

  • GRAPH-COT提供了基于数据的治疗选项和相互作用分析。
  • MindMap帮助医生和患者理解各种治疗方案的利弊,做出更全面的决策。

GRAPH-COT提供了一个基于数据和图结构的推理框架,而MindMap则提供了一个直观和全面的思维工具,两者结合使用可以提高医学问诊的效率和准确性。

解法拆解

目的

  • 增强大型语言模型(LLMs)在知识密集型任务中的性能,尤其是在需要利用外部知识库进行推理的场景。

问题

  • LLMs在处理某些任务时可能会产生幻觉(hallucinations),即生成看似合理但缺乏事实依据的内容。
  • LLMs可能缺乏对具体知识源的引用能力,导致其在知识密集型任务中表现不佳。

解法

  • 解法:迭代图推理框架(因为需要逐步利用图结构数据进行推理)

子解法拆解:

  1. 子解法1:图结构构建(因为存在大量结构化数据)

    • 通过将知识库中的信息构建成图结构,节点表示实体,边表示关系。

     
    例子:在医学领域,可以将疾病、症状、药物等作为节点,它们之间的关系如“导致”、“治疗”等作为边。

  2. 子解法2:LLM与图交互(因为需要结合LLM的推理能力与图数据)

    • 使LLM能够提出问题或假设,并在图中检索相关信息。

     
    例子:如果LLM提出一个问题“某种症状可能由哪些疾病引起?”,系统将在图上检索与该症状相关联的疾病节点。

  3. 子解法3:迭代推理(因为复杂问题可能需要多步骤推理)

    • 通过迭代过程,LLM逐步收集信息,直到得出结论。

     
    例子:在诊断过程中,根据患者的症状,LLM可能需要多次迭代,每次迭代都可能发现新的相关症状或需要进行的检查。

  4. 子解法4:图执行(因为需要在图上执行具体操作以获取信息)

    • 在图上执行操作,如节点检索、邻居查找、路径跟踪等,以收集信息。

     
    例子:为了找出两种疾病之间的关联,系统可能需要执行路径跟踪操作,找出连接这两个疾病节点的所有可能路径。

  5. 子解法5:结果反馈与调整(因为需要根据反馈优化推理过程)

    • 将图推理的结果反馈给LLM,并根据结果调整后续的推理方向。

     
    例子:如果初步推理结果指向了一个不太可能的疾病,医生可以根据临床经验反馈给系统,系统据此调整搜索策略或提出新的假设。

之所以使用这些子解法,是因为它们共同构成了一个系统化的框架,能够有效地结合LLM的文本处理能力和图结构数据的丰富关系,以解决复杂的知识推理任务。

每个子解法针对的是问题解决过程中的一个特定方面,从数据结构化到信息检索,再到迭代推理和结果反馈,形成了一个闭环的解决问题流程。

GRAPH-COT 医学问诊

  1. 逻辑推理与 LLMs

    • 医生输入一个复杂病例的问题,例如:“患者出现头痛、发热和乏力,可能是什么疾病?”
    • LLMs 进行逻辑推理,确定需要从医学知识图谱中获取哪些信息,例如确定需要检索与这些症状相关的疾病信息。
  2. LLMs 与图谱的交互

    • 根据逻辑推理的结果,LLMs 与医学知识图谱进行交互,使用预定义的图谱函数来检索信息:
      • RetrieveNode("头痛") 检索与头痛相关的疾病节点。
      • NeighborCheck("发热", "症状") 检查与发热相关的其他症状节点。
      • NodeDegree("疾病节点ID", "症状") 确定某个疾病节点与多少种症状相关联,以评估可能性。
  3. 图谱上的执行

    • 执行上述函数调用,图谱返回相关信息,如相关疾病列表和它们的症状。
    • LLMs 根据返回的信息进行进一步的逻辑推理,比如比较不同疾病的相似性和差异性。
  4. 迭代过程

    • 如果第一次迭代未能得出确切的诊断,LLMs 将基于当前信息进行下一轮的逻辑推理,可能需要考虑更多的症状或排除某些疾病。
    • 例如,如果初步怀疑是流感,但患者有其他不寻常的症状,LLMs 可能需要考虑其他罕见疾病。
  5. 得出结论

    • 经过几轮迭代后,LLMs 根据收集到的信息和逻辑推理,得出最可能的疾病诊断。
    • 例如,最终诊断可能是:“根据患者的症状和医学知识图谱中的信息,最可能的诊断是登革热。”
  6. 与 LLM 代理的连接

    • 在整个过程中,LLMs 作为代理,使用预定义的图谱函数与医学知识图谱环境交互,探索可能的诊断,并回答医生的查询。
python+opencv简谱识别音频生成系统源码含GUI界面+详细运行教程+数据 一、项目简介 提取简谱中的音乐信息,依据识别到的信息生成midi文件。 Extract music information from musical scores and generate a midi file according to it. 二、项目运行环境 python=3.11.1 第三方库依赖 opencv-python=4.7.0.68 numpy=1.24.1 可以使用命令 pip install -r requirements.txt 来安装所需的第三方库。 三、项目运行步骤 3.1 命令行运行 运行main.py。 输入简谱路径:支持片或文件夹,相对路径或绝对路径都可以。 输入简谱主音:它通常在第一页的左上角“1=”之后。 输入简谱速度:即每分钟拍数,同在左上角。 选择是否输出程序中间提示信息:请输入Y或N(不区分大小写,下同)。 选择匹配精度:请输入L或M或H,对应低/中/高精度,一般而言输入L即可。 选择使用的线程数:一般与CPU核数相同即可。虽然python的线程不是真正的多线程,但仍能起到加速作用。 估算字符上下间距:这与简谱中符号的密集程度有关,一般来说纵向符号越稀疏,这个值需要设置得越大,范围通常在1.0-2.5。 二值化算法:使用全局阈值则跳过该选项即可,或者也可输入OTSU、采用大津二值化算法。 设置全局阈值:如果上面选择全局阈值则需要手动设置全局阈值,对于.\test.txt中所提样例,使用全局阈值并在后面设置为160即可。 手动调整中间结果:若输入Y/y,则在识别简谱后会暂停代码,并生成一份txt文件,在其中展示识别结果,此时用户可以通过修改这份txt文件来更正识别结果。 如果选择文件夹的话,还可以选择所选文件夹中不需要识别的文件以排除干扰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值