Structgpt: A general framework for large language model to reason over structured data
StructGPT是首个能统一提升大型语言模型(LLMs)对多种结构化数据(知识图谱KG、表格Table、数据库DB)推理能力的框架,其核心是通过“专用接口+迭代阅读-推理流程”,让LLMs无需微调即可高效处理结构化数据相关任务,在零样本/少样本场景下显著优于直接使用LLMs的效果。
一、研究背景与待解问题
LLMs(如ChatGPT、GPT-4)虽在自然语言任务中表现出色,但在结构化数据推理上存在明显短板,核心问题可归纳为三点:
- 结构化数据理解难:LLMs预训练以文本为主,对KG的三元组、表格的行列结构、数据库的外键关联等特殊格式不熟悉,难以直接解析。
- 数据规模与输入限制冲突:结构化数据通常规模庞大,直接线性化为文本会超出LLMs的输入长度限制,无法完整输入。
- 现有方案通用性差:此前方法要么针对单一结构化数据(如仅处理表格),要么需要全数据微调(如UnifiedSKG),无法零样本适配多种数据类型和任务。
二、核心方法:StructGPT的两大支柱
StructGPT的核心思路是“解耦阅读与推理”——用专用接口处理结构化数据的“阅读”(提取证据),让LLMs专注于“推理”(基于证据生成答案),具体通过“接口设计”和“IRR框架”实现。
1. 面向三类结构化数据的专用接口
针对KG、表格、数据库的特性,设计了轻量化接口,功能是“精准提取相关证据”,避免LLMs处理数据格式细节。接口设计如下:
| 结构化数据类型 | 核心接口 | 接口功能 |
|---|---|---|
| 知识图谱(KG) | Extract_Neighbor_Relations(e) | 提取实体e的所有相邻关系(如“Jeff Probst”的“spouse”“is_a”) |
| Extract_Triples(e, {r}) | 提取实体e与指定关系{r}对应的三元组(如“Jeff Probst + spouse”对应的<Jeff Probst, spouse, Lisa Ann Russell>) | |
| 表格(Table) | Extract_Column_Name(T) | 提取表格T的所有列名(如“Team”“Stadium”“Capacity”) |
| Extract_Columns(T, {c}) | 提取表格T中指定列{c}的所有内容(如“Stadium”列的“Provident”“DW”) | |
| Extract_SubTable(T, {c}, {j}) | 提取表格T中“指定列{c}+指定行{j}”构成的子表(如“Stadium列+第2行”) | |
| 数据库(DB) | Extract_Table&Column_Name(D) | 提取数据库D的所有表名及各表的列名(如“visitor表:ID、Age;museum表:Mus_ID、Name”) |
| Extract_Tables_Information({T}) | 提取指定表集{T}的列名、外键关联(如“visitor.ID 关联 visit.visitor_ID”) |
2. 迭代阅读-推理(IRR)框架
通过“调用接口→线性化证据→LLM生成”的迭代流程,逐步逼近最终答案,解决“单次提取证据不足”的问题。具体步骤如下:
- 调用接口(阅读):根据当前任务进度,选择合适接口提取相关证据(如KGQA先调用Extract_Neighbor_Relations获取关系)。
- 线性化证据:将接口输出的结构化证据转为LLMs可理解的文本,例如:
- KG三元组转为“(Jeff Probst, spouse, Lisa Ann Russell)”;
- 表格行转为“row 2: (Team, Wigan Warriors), (Stadium, DW), (Capacity, 25138)”。
- LLM生成(推理):设计两类Prompt引导LLMs推理:
- 证据筛选Prompt:“以下是10个关系,哪些与问题‘Jeff Probst的妻子是谁’最相关?”(输出“spouse”);
- 答案生成Prompt:“基于三元组(Jeff Probst, spouse, Lisa Ann Russell),回答问题‘Jeff Probst的妻子是谁’”(输出“Lisa Ann Russell”)。
通过多轮迭代,LLMs可逐步获取更精准的证据(如先选关系、再提三元组),最终生成答案或可执行SQL。
3. 任务实例化:适配三大核心任务
StructGPT可直接适配KGQA、TableQA、Text-to-SQL三类任务,具体流程差异如下:
- KGQA(如“Harper Lee毕业于哪所高中”):
- 调用Extract_Neighbor_Relations(Harper Lee)获取关系(如“education”“birthplace”);
- LLM筛选出相关关系“education”;
- 调用Extract_Triples(Harper Lee, {education})获取三元组;
- LLM从三元组中提取答案“Monroe County High School”。
- TableQA(如“表格中最后一个体育馆是什么”):
- 调用Extract_Column_Name获取列名“Stadium”;
- 调用Extract_Columns提取“Stadium”列所有内容;
- LLM筛选出最后一行内容“DW”作为答案。
- Text-to-SQL(如“查询30岁以下访客数量”):
- 调用Extract_Table&Column_Name获取表名“visitor”及列名“Age”;
- 调用Extract_Tables_Information确认“Age”列属性;
- LLM生成SQL“SELECT count(*) FROM visitor WHERE age < 30”。
三、实验设计与核心结果
论文在8个数据集(覆盖三类任务)上验证效果,对比“全数据微调基线”“直接使用LLMs”,核心结论是:StructGPT在零样本/少样本场景下显著提升LLMs性能,部分场景接近全数据微调效果。
1. 实验设置
- 数据集:
- KGQA:WebQSP(2跳推理)、MetaQA(1/2/3跳推理);
- TableQA:WikiSQL(过滤聚合)、WTQ(排序推理)、TabFact(事实验证);
- Text-to-SQL:Spider(复杂查询)、Spider-SYN(同义词干扰)、Spider-Realistic(无列名提示)。
- 基线:
- 全数据微调:如KGQA的GraftNet、TableQA的TAPEX、Text-to-SQL的RESDSQL-3B;
- 直接LLMs:零样本使用Davinci-003、ChatGPT(6月/8月版本)。
- 评估指标:
- KGQA:Hits@1(Top1答案准确率);
- TableQA:准确率(TabFact)、指示准确率(WTQ/WikiSQL);
- Text-to-SQL:执行准确率(预测SQL与标准答案执行结果一致率)。
2. 关键结果
- 零样本场景提升显著:
- KGQA:ChatGPT在WebQSP的Hits@1从61.2%(直接用)提升至72.6%(+IRR),涨幅11.4%;
- TableQA:ChatGPT在TabFact的准确率从82.9%提升至87.1%,涨幅4.2%;
- Text-to-SQL:ChatGPT在Spider的执行准确率从70.1%提升至74.8%,涨幅4.7%。
- 少样本场景进一步优化:加入32个示例后,Davinci-003在WikiSQL的指示准确率从49.1%(零样本+IRR)提升至64.6%(少样本+IRR)。
- 鲁棒性验证:对8月版本ChatGPT(性能略有变化),+IRR后仍能提升:WebQSP从62.1%→75.3%,Spider从75.2%→77.1%。
3. 错误分析
通过100个错误案例抽样,发现主要错误类型及分布:
- 选择错误(30%-74%):LLMs未筛选出正确证据(如KGQA中选错关系),WebQSP中占比最高(74%);
- 推理错误(8%-30%):有证据但无法生成正确答案(如Text-to-SQL中生成错误SQL逻辑),Spider中占比21%;
- 格式错误(2%-34%):生成答案格式不规范(如多输出无关内容),WikiSQL中占比34%。
四、局限性与未来方向
论文明确指出StructGPT的三大局限,也是未来优化方向:
- LLM适配性有限:仅验证了ChatGPT、Davinci-003(指令跟随能力强),需在指令理解弱的LLMs(如开源模型Llama 2)上测试;
- 任务覆盖范围窄:仅评估了“基于结构化数据的QA任务”,需扩展到“数据转文本”“形式语言转文本”等场景;
- 格式错误待解决:LLMs生成答案格式不统一,需设计更精准的Prompt和解析规则。
五、核心贡献总结
- 通用性突破:首个统一处理KG、表格、数据库三类结构化数据的LLM推理框架,无需针对单一数据类型设计方案;
- 方法创新:通过“专用接口解耦阅读”“迭代流程逼近答案”,解决LLMs对结构化数据的理解难、输入长限制问题;
- 效果验证:在8个数据集上证明零样本/少样本场景的有效性,为LLMs处理结构化数据提供新范式。