论文标题:
RSL-SQL: Robust Schema Linking in Text-to-SQL Generation
论文链接:
https://arxiv.org/abs/2411.00073
代码链接:
https://github.com/Laqcce-cao/RSL-SQL
引言
Text-to-SQL(又称 NL2SQL)是一项将用户的自然语言问题转换为结构化查询语言(SQL)的任务,这项技术对非专家用户与关系数据库的交互至关重要。近年来,利用大型语言模型(LLM)强大的理解和生成能力,已成为提升 Text-to-SQL 任务性能的流行方法。
目前,基于 LLM 的 Text-to-SQL 主要分为两类技术路线,一类是对一些开源的参数较小的 LLM(如 Deepseek-7B) 进行微调,另一类则是基于闭源的参数较大的 LLM (如 GPT-4、GPT-4o)的提示工程方法。本文聚焦于后者,即构建一种新的提示工程框架,提升已有 LLM 在 Text-to-SQL 任务上的性能。
一个最基础、最直观的提示工程方案是,输入数据库的 Database Schema,即数据库的基本结构(包括表名、列名、主外键关系等等),以及用户的问题,提示模型输入该问题对应的 SQL 语句。这种提示范式可以很方便让 LLM 适应各种不同的数据库与对应的用户查询。
近期的一些研究表明,在输入中,额外增加表和列的文本描述、小样本示例(即 few-shot Question-SQL pairs)、一定格式描述的数据样本(即数据库中每一个表的随机几行数据样本)等信息有助于 LLM 更好地理解数据库结构,从而生成更准确的 SQL。
直观上来看,只要 LLM 理解数据库结构的能力足够强,提示中的给到的数据库描述越详细,SQL 最终生成的准确率也越高。
然而,在实际场景中,尤其是面对包含数百甚至上千字段的大型工业数据库时,在提示中包含完整的数据库信息会导致输入 token 过多,计算成本增加,更重要的是会引入大量噪音。由于用户查询通常只涉及数据库中的非常小部分元素,不相关的表和列可能容易混淆模型,从而降低 SQL 生成的性能。
为了解决这一问题,模式链接(Schema Linking)技术被广泛采用。
什么是模式链接?
模式链接是识别数据库中与用户问题相关的元素,并过滤掉无关的部分,以减少噪音和输入复杂性。具体来说,就是,在生成 SQL 之前,用一些方法提前找到与用户问题相关的表和列,然后,输入给大模型的是被显著简化后的 Database Schema,从而达到减小输入噪音并增强 SQL 生成性能的目的。
例如,MCS-SQL 方法利用 LLM 直接根据 Database Schema 和用户问题,提示 LLM 直接输出相关的表和列(仍然需要输入全部的 Database Schema,但是可以选择性舍弃一些信息,例如表和列的文本描述等),MCS-SQL 设置了较高的温度参数进行了 60 次随机解码,然后把 LLM 输出的 60 次结果进行合并并去重。
MCS-SQL 方法达到了 89% 左右的严格召回率(召回的表和列完全包含实际 SQL 包含的表和列的比例)。
Chess 方法则利用了更复杂的方法,对于每个用户查询,Chess 利用 LLM 依次判断每个表的每个列是否和用户问题相关,最终达到 90% 左右的严格召回率。对于每个问题,两种方法都吊用了大量次数的 LLM。
尽管模式链接(Schema Linking)在减少噪音方面取得了显著效果,但是已有的 Schema Linking 技术在对 SQL 生成性能的提升上远未达到预期。最近的研究显示,基于较强的 LLM(例如 GPT-4o),Schema Linking 甚至会导致模型性能下降,如 [1](https://arxiv.org/abs/2408.07702)所示。
我们将这个问题归因于 Schema Linking 带来的信息损失风险:
风险一:如果模式链接没有能召回所有必需的 Schema Elements(即相关的表和列),生成的 SQL 将不可避免地出错(假设 LLM 不产生幻觉,即其生成的 SQL 中的 Schema Elements 完全属于输入的 Database Schema)。
风险二:即使模式链接召回了所有相关的 Schema Elements,简化后的 Database Schema 已经不是原来的 Database Schema 了,这可能会破坏原始 Database 的结构完整性,从而导致性能提升未达到预期。
具体来说,简化 Database Schema 后,原来基于完整 Database Schema 回答错误的样例可能会被纠正(我们称其为正向收益),但原来能回答正确的样例可能也会被改错(我们称其为负向收益)。因此,即使在那些完全召