图是现实世界中十分常用的数据结构(例如社交网络和推荐系统等),让大语言模型(后文简称大模型)学会处理图的能力,是迈向更高级通用智能的关键一步。近期,许多研究者提出将大模型扩展到需要图理解和分析的场景,然而我们认为现有研究存在以下主要缺点:
核心思路:为解决上述不足,我们模仿人类专家解决问题的思路,首次提出让大语言模型通过编写代码来解决图分析推理问题的方法:例如在百万级节点的图中计算最短路时,人类专家不会把整个图装进大脑做逐步推理,而是会调用NetworkX等Python库使用几行代码快速准确地解决问题。具体而言,在模型进行图分析任务时,我们引导模型编写代码并调用相关Python库,之后我们提取并执行模型回答中的相关代码来获得答案。这种基于编程的解决方式可以从文件中读取图数据,从而避开大模型上下文长度的限制,应用于任意规模的图数据分析。 为了更好地提高大模型编写代码解决图分析问题的表现,我们探索了如下方法对模型进行能力提升。
图1 开源(左)和闭源(右)大模型图分析能力增强流程 对于闭源模型,我们从网络上获取了常用图分析任务Python库的文档,并对其进行加工处理后,使用检索增强生成(RAG)提高闭源模型的表现。 对于开源模型,我们首先基于API文档,使用反向指令(back-instruction)构造问答数据集对模型进行微调:在回答中我们使用两步推理的方式,让模型在回答问题前思考相关的API信息,之后再编写代码解决问题。
图2 两步推理思考过程示例
图3 基准评测集构建流程 为了评估不同方法的有效性,我们构造了基准评测集ProGraph。首先,我们选取了6个主流的Python库,挑选一些主流的API,并收集其各种信息,包括示例代码等。之后,我们邀请专业的人类标注人员,使用一些随机图生成模型生成图数据,并根据API文档信息,构造适用于API的问题,并手工编写答案和对应的解决问题的示例代码。最后,我们使用大模型将问题描述融入到真实场景中。
从表格中可以看出,如果不加任何方法,直接让模型通过编写代码解决ProGraph的问题,所有模型在ProGraph上表现都很差。即使GPT-4o,也只能达到60.2%的代码编译通过率和36.3%的问题正确率。
图4 使用本文构建的数据集对开闭源大模型的性能提升 通过我们提出的数据集和方法对大模型进行增强后,我们可以看到闭源模型的性能获得了一定提升,开源模型的性能有了非常显著的提高,验证了本工作的有效性。
图5 RAG检索文档数对闭源模型效果的影响 我们进行了消融实验,随着RAG使用文档信息数量的增多,模型的代码编译执行通过率和回答问题正确率都有明显上升,表明增加文档信息对模型使用Python代码解决问题具有重要意义。
图6 不同模型代码错误类型统计 同时,我们分析了开源模型和闭源模型编写代码的出错类型,使用RAG的闭源模型的错误类型和数量各不相同,但微调后的开源模型其错误分布非常相似,为后续继续增强模型的性能给出了一定的优化思路。
在本文中,我们首次提出通过编程来提升大模型解决图分析推理任务的能力,并使用主流的开源模型和闭源模型进行研究。我们提供了新的基准数据集ProGraph,用来衡量模型解决复杂图分析推理任务的能力,也构建了用于对开源模型进行指令微调的LLM4Graph数据集。实验表明检索增强生成(RAG)和指令微调等方式可以有效利用我们构造的数据集,提升现有大模型的性能。