论文链接:https://arxiv.org/abs/2404.10150
代码链接:https://github. com/mahadi-nahid/TabSQLify
背景
大语言模型在处理自然语言理解和生成方面表现出色,但在处理大表格时由于输入长度的限制常常表现不佳。这篇论文提出了一种利用文本到SQL生成的方法,将大表格分解为包含必要信息的小表格,从而在进行推理任务之前显著减少输入上下文的长度。
整体框架
提出的TabSQLify,这是一种将符号方法与大语言模型的推理能力相结合的新颖方法。 TabSQLify 利用文本到 SQL 生成将大型表分解为较小且相关的子表,以执行表推理任务。 该方法包括两个关键步骤:**(1)在少样本提示下,使用大语言模型从自然语言问题或语句生成SQL查询,然后在原始表上执行SQL查询以获得包含以下内容的子表:只提供回答问题或验证陈述的必要信息,(2)使用大语言模型与子表和问题或主张来生成答案。 该方法的核心理念是利用大语言模型的自然语言理解和生成优势,同时减轻其表编码和推理的负担(见图2)。 将表分解为子表具有多种优点,包括(1)减少输入长度以提高涉及大型表的推理任务的可扩展性和效率,(2)**过滤掉不相关的和对推理过程没有贡献的冗余信息,从而使推理更加集中,并且 (3) 提供更可解释和更容易的中间表示(在本例中为 SQL 查询和子表)可解释用于追踪和验证目的。
具体方法实现
1、表预处理
标准化数值和日期字段-统一删除了所有数字条目中的逗号;将所有日期格式标准化为 YYYY-MM-DD 格式。 例如,我们将“360,000”等数字转换为“360000”,并将不同的日期格式(例如“2008 年 10 月 31 日”)转换为标准化的“2008-10-31”
2、子表选择
通过三种策略来完成:**(1)选择必要列、(2)选择必要行、(3)**选择重要的列和行
在此步骤中,我们不是将整个表提供给大语言模型,而是
提供基本的表信息,例如标题、列名称和问题旁边的三个示例行
\textcolor{red}{提供基本的表信息,例如标题、列名称和问题旁边的三个示例行}
提供基本的表信息,例如标题、列名称和问题旁边的三个示例行。具体的提示设计如下图所示。
3、推理和答案生成
在这一步中,使用了一个大语言模型,其中我们输入上一步得出的SQL、执行SQL查询得到的子表和问题。 根据领域的不同,还可以合并其他上下文信息,例如周围的文本。 采用这种方法是为了帮助模型专注于相关部分,以理解上下文并回答问题。具体的提示设计如下图所示:
优势
- 减少输入长度:通过将大表格分解为小表格,显著减少了输入上下文的长度,提高了处理大规模表格推理任务的可扩展性和效率。
- 提高性能:在WikiTQ和TabFact基准测试中,TabSQLify的表现优于其他基于LLM的方法。
- 可解释性:提供了中间表示形式(如SQL查询和子表),便于追踪和验证推理过程。
实验结果
在四个具有挑战性的表格推理数据集上(WikiTQ、FeTaQA、TabFact和WikiSQL),TabSQLify展示了其优越的性能,特别是在WikiTQ基准上,准确率达到了64.7%,在TabFact基准上,准确率高达79.5%。
WikiTQ数据集:
TabFact数据集:
FeTaQA数据集:
WikiSQL数据集:
错误分析
识别出的错误分为不正确的列、不正确的条件、不正确的推理和漏报。(在这种情况下,“缺失列”是指 TabSQLify 选择不正确的列或省略回答问题所需的列的情况。 “缺失行”表示生成的 SQL 查询在 WHERE 子句中包含错误条件的情况。 提取的子表足以回答问题,但大语言模型无法提供正确答案的情况,被标记为“推理不正确”。 此外,在数据集中,存在黄金答案不正确或被评估者误判的情况,我们将其归类为“不正确的标注”。)
结论
TabSQLify方法通过文本到SQL生成的方式,将表格分解为更小且相关的子表,从而提高了大语言模型在表格推理任务中的性能。该方法在减少计算负担的同时不牺牲性能,为表格推理研究提供了新的视角和方向。