StructGPT 论文粗读

 

<StructGPT>论文粗读💡 Meta Data Title StructGPT: A General Framework for Large Language Model to Reason over Structured Data Journal  (10.18653/v1/2023.emnlp-...

<StructGPT>论文粗读


💡 Meta Data

| Title | StructGPT: A General Framework for Large Language Model to Reason over Structured Data | | —————————————————————— | ——————————————————————————————————————————————————– | | Journal |  (10.18653/v1/2023.emnlp-main.574) | | Authors | Jiang Jinhao,Zhou Kun,Dong Zican,Ye Keming,Zhao Xin,Wen Ji-Rong | | Pub.date | 2023 |

📜 研究背景 & 基础 & 目的 (Motivation)


  • 目的:以统一的方式提升大型语言模型 (LLMs) 在结构化数据上的推理能力

  • motivation:当前LLM在引入外部知识的时候,通常使用有结构的数据库,而数据库存放的数据通常是结构的,而LLM无法完全理解

    • 直接解决方法:直接线性化(直接拼接成一长串句子)

      • 缺点:但是数据量很大的时候,不可能全部都直接假如到prompt中。

🔬 研究方法


问题描述

使用LLM解决基于结构化数据的复杂推理任务

输入: 自然语言问题、结构化数据(知识图谱、表格、数据库)

输出: 结果(自然语言或结构化表达式)

解决思路

  • 引入专门的APi操作结构化的数据记录

    • 如何为特定任务设计合适的接口
    • 如何利用这些接口让LLMs进行推理

提出了 Iterative Reading and Reasoning 框架解决结构化数据的问答任务——Struct GPT

Iterative Reading and Reasoning 框架

  • reading 读取:构建了专门的机构从结构化数据收集相关证据
  • reasoning 推理:让LLM专注于收集到的信息的推理任务

具体过程:invoking-> linearzation -> generation

struct API定义

因为用LLM来结构化数据不好,所以作者自己设计了API而不是使用LLM

  1. 知识图谱:

    • Extraction_Neighbor_Relations(e)
    • Extract_Triples(e,{r})
  2. 表格:

    • Extract_Columns(T,{c})
    • ……
  3. 数据库

    • Extract_Table\&Column_Name (D)
    • ……

Invoking

调用接口从结构化数据中提取相关信息,送到LLM中

Information Linearization

根据提取的信息,将其转换为可被大型语言模型理解的文本句子

每个结构定义一种线性化规则

来自知识图谱的信息:将其连接成一个长句子,并用特定的分隔符和边界符号标记。

对于表格:

例如“(第1行,年份,1896)”和“(第1行,城市,雅典)”。然后,对于每一行,我们将行索引提取到句首,并在三元组中省略行索引,以组成简化的句子,例如“第1行:(年份,1896),(城市,雅典)”。对于多行数据,我们通过特殊的分隔符将它们连接成一个长句子。

LLM for Generation

有两种prompt:

  • 筛选数据:从线性的数据中根据问题筛选有用的数据
  • 给出答案:生成最终答案(可以是自然语言也可以是形式化语言(SQL))

举例解释流程

以知识图谱为例:

  1. 根据问题 query 中提到的实体 搜索调用接口Extract_Neighbor_Relation、Extract_Triples
  2. 然后线性化
  3. 利用LLM根据问题选择有用的关系
  4. 调用Extract_Triples收集头实体 eT 和 {r} 中关系的相关三元组
  5. 然后线性化此信息
  6. LLM应评估当前信息是否足以回答问题,然后,LLM将根据评估结果采取相应操作(停止或迭代)
  7. 使用大型语言模型选择最相关的三元组,其尾实体将被视为最终答案

🚩 结论


在8个数据集上的实验结果表明,我们的方法可以有效提升LLMs在零样本和少样本设置下对结构化数据的推理性能,甚至可以与具有竞争力的全数据监督微调方法相媲美。

在KGQA、TableQA和text-to-SQL任务中,与在零样本设置下直接使用ChatGPT相比,我们的方法在WebQSP上实现了11.4%的Hits\@1提升,在TabFact上实现了4.2%的准确率提升,在Spider上实现了4.7%的执行准确率提升。

错误:

  • 选择错误:相关信息不是LLM选的
  • 推理错误:有相关信息但是LLM推理错误
  • 生成答案格式错误:无法被结果解析识别(数据集不同很难控制生成对应的格式)
  • 幻觉问题

📌 感想 & 疑问


  • 是什么情况下few-shot比zero-shot更差的?
  • 这种固定的pipeline可能无法让LLM选择自己要的数据
  • 这种自己定义数据的线性化,是不是太死板了,他说用LLM结构化不太好,但是后面有人做了,是可以的。
  • 总体来说并不算是真正的工具学习,因为不是 LLM 自主调用的,而是固定的步骤。