NeurIPS 2024 让大语言模型使用代码解决图分析推理任务

 

©作者 | 李鑫

单位 | 北邮GAMMA Lab

 

背景与动机
图是现实世界中十分常用的数据结构(例如社交网络和推荐系统等),让大语言模型(后文简称大模型)学会处理图的能力,是迈向更高级通用智能的关键一步。

近期,许多研究者提出将大模型扩展到需要图理解和分析的场景,然而我们认为现有研究存在以下主要缺点:

  • 现有工作解决问题的过程完全基于大模型的逐步推理。但即使在思维链(CoT)的帮助下,当前大模型的推理深度仍然很浅。这意味着当图分析任务难度较大时,很容易出现幻觉或推理错误,导致任务失败;

  • 现有工作需要在提示(prompt)中对图结构进行描述,受限于上下文长度限制,无法适用于大规模图数据的处理;

  • 对于 Llama 等开源模型,仍然缺乏面向图分析推理场景的指令微调数据集,导致结果并不理想;

  • 对于 ChatGPT 等闭源模型,也需要构建面向图分析推理场景的外部知识库而不是仅通过提示工程来提高模型的表现。
核心思路:为解决上述不足,我们模仿人类专家解决问题的思路,首次提出让大语言模型通过编写代码来解决图分析推理问题的方法:例如在百万级节点的图中计算最短路时,人类专家不会把整个图装进大脑做逐步推理,而是会调用 NetworkX 等 Python 库使用几行代码快速准确地解决问题。
具体而言,在模型进行图分析任务时,我们引导模型编写代码并调用相关 Python 库,之后我们提取并执行模型回答中的相关代码来获得答案。这种基于编程的解决方式可以从文件中读取图数据,从而避开大模型上下文长度的限制,应用于任意规模的图数据分析。
为了更好地提高大模型编写代码解决图分析问题的表现,我们探索了如下方法对模型进行能力提升。
1. 对于开源模型,我们构造了包含两步思维链推理(先推理应该使用的 API,再编写代码)的问答数据集,使用指令微调的方式让模型学会编写代码解决问题;
2. 对于闭源模型,我们收集了包括 NetworkX 在内 6 个 Python 库的 API 文档,然后使用检索增强生成(RAG)技术,让模型在回答问题前先熟悉文档信息,然后再基于文档编写代码,从而提高模型的表现;
3. 我们分析了不同模型在编写代码方面的错误原因,未来可以基于这些分析,进一步提高开源模型和闭源模型编写代码解决图分析问题的能力。

论文题目:

Can Large Language Models Analyze Graphs like Professionals? A Benchmark, Datasets and Models

论文链接:

https://arxiv.org/abs/2409.19667

代码链接:

https://github.com/BUPT-GAMMA/ProGraph

 

 

模型框架

问题处理流程

▲ 图1. 开源(左)和闭源(右)大模型图分析能力增强流程

对于闭源模型,我们从网络上获取了常用图分析任务 Python 库的文档,并对其进行加工处理后,使用检索增强生成(RAG)提高闭源模型的表现。
对于开源模型,我们首先基于 API 文档,使用反向指令(back-instruction)构造问答数据集对模型进行微调:在回答中我们使用两步推理的方式,让模型在回答问题前思考相关的 API 信息,之后再编写代码解决问题。
▲ 图2. 两步推理思考过程示例

基准构造

▲ 图3. 基准评测集构建流程

为了评估不同方法的有效性,我们构造了基准评测集 ProGraph。首先,我们选取了 6 个主流的 Python 库,挑选一些主流的 API,并收集其各种信息,包括示例代码等。
之后,我们邀请专业的人类标注人员,使用一些随机图生成模型生成图数据,并根据 API 文档信息,构造适用于 API 的问题,并手工编写答案和对应的解决问题的示例代码。最后,我们使用大模型将问题描述融入到真实场景中。

 

实验设置
数据集:ProGraph 
模型:Llama-3-8B-Instruct, Deepseek-Coder-7b-Instruct-v1.5, GPT-4o, GPT-4-turbo, GPT-3.5, Gemini-Pro-1.5, Gemini-Pro-1.0, Claude-3-Haiku, Claude-3-Sonnet, Claude-3-Opus 
评测方法:用代码执行通过率(pass rate)衡量模型编写代码的基本能力,用正确率(accuracy)衡量模型解决问题的能力
微调模型框架:alignment-handbook 

微调模型数据集:LLM4Graph

实验结果

基准实验

从表格中可以看出,如果不加任何方法,直接让模型通过编写代码解决 ProGraph 的问题,所有模型在 ProGraph 上表现都很差。即使 GPT-4o,也只能达到 60.2% 的代码编译通过率和 36.3% 的问题正确率。

开源模型和闭源模型的性能提升

▲ 图4. 使用本文构建的数据集对开闭源大模型的性能提升

 

通过我们提出的数据集和方法对大模型进行增强后,我们可以看到闭源模型的性能获得了一定提升,开源模型的性能有了非常显著的提高,验证了本工作的有效性。

闭源模型RAG分析

▲ 图5. RAG检索文档数对闭源模型效果的影响

我们进行了消融实验,随着 RAG 使用文档信息数量的增多,模型的代码编译执行通过率和回答问题正确率都有明显上升,表明增加文档信息对模型使用 Python 代码解决问题具有重要意义。
Python代码错误类型分析

▲ 图6. 不同模型代码错误类型统计

同时,我们分析了开源模型和闭源模型编写代码的出错类型,使用 RAG 的闭源模型的错误类型和数量各不相同,但微调后的开源模型其错误分布非常相似,为后续继续增强模型的性能给出了一定的优化思路。

总结
在本文中,我们首次提出通过编程来提升大模型解决图分析推理任务的能力,并使用主流的开源模型和闭源模型进行研究。我们提供了新的基准数据集 ProGraph,用来衡量模型解决复杂图分析推理任务的能力,也构建了用于对开源模型进行指令微调的 LLM4Graph 数据集。
实验表明检索增强生成(RAG)和指令微调等方式可以有效利用我们构造的数据集,提升现有大模型的性能。
基于多智能体合作的大模型图分析系统 
GraphTeam:

https://arxiv.org/abs/2410.18032

Github链接:

https://github.com/BUPT-GAMMA/GraphTeam

(文:PaperWeekly)

发表评论