大模型写 SQL 总翻车?JudgeSQL 这波操作直接把选对率拉满!
家人们谁懂啊!现在用大模型做 Text-to-SQL,也就是把自然语言问题转成 SQL 查询,看着挺方便,但藏着个巨坑 —— 模型能生成一堆 SQL 候选,可到底哪个才对?之前那些选 SQL 的方法,要么靠简单投票,要么凭感觉打分,遇到语义相近但结果天差地别的 SQL,直接就懵了。
不过别急!北航团队新出的 JudgeSQL 框架,直接把这个难题给破解了。它就像给 SQL 选了个 “专业裁判”,不光能精准判断对错,还能高效选出最优解,实测在 BIRD 基准上,不管是 7B 小模型还是 32B 大模型,性能都涨了不少,尤其是复杂查询,提升更明显。
先跟大家唠唠为啥之前的方法不行。你想啊,大模型生成 SQL 时,因为本身是概率解码,加上自然语言转 SQL 要复杂推理,所以会出一堆候选。之前常用的 “自一致性(SC)” 方法,就是看哪个 SQL 执行结果出现次数多就选哪个,可要是两个 SQL 执行结果差不多,但一个对一个错,它就分辨不出来了。还有些方法靠大模型直接打分,却没有中间的推理过程,打分忽高忽低,根本不靠谱。

图 1:在 BIRD 开发集(BIRD dev set)上,不同采样数量下,贪心解码(greedy decoding)、自一致性(self-consistency)及 Pass@k 方法的执行准确率(EX scores)变化趋势。
就像图 1 里展示的,在 BIRD 开发集上,不管是贪心解码、自一致性还是 Pass@k 方法,随着采样数量增加,执行准确率(EX)的提升都有瓶颈,而且和理想中的 “最优选择” 差了 10-20 个百分点,这说明选 SQL 的环节,还有巨多潜力没被挖掘出来。

《ChatBI核心技术》是刚上市的新书,本书旨在为读者提供一个全面的ChatBI学习框架。从基础概念到核心技术,再到实际应用场景,书中详细介绍了ChatBI的定义、特点、与传统BI的区别,以及其在企业决策支持、数据分析民主化、即时数据洞察等多场景中的应用。书中还深入探讨了提示工程、AI智能体、检索增强生成、大模型微调等关键技术,并通过实战案例展示了如何构建AI智能体和业务知识库,以及实现数据智能查询与可视化等功能。此外,书中还讨论了对话理解、智能分析、用户交互等重要环节,帮助读者全面掌握ChatBI的技术实现和应用思路。
那 JudgeSQL 是咋解决的呢?它核心靠两大招:一是 “会推理的 SQL 裁判模型”,二是 “加权共识锦标赛”,俩招配合,直接把选 SQL 的正确率和效率都拉满。
先说说这个 “会推理的 SQL 裁判模型”。它可不是随便打分,而是先通过 “推理轨迹蒸馏” 学本事,再用 “强化学习” 练技能。具体来说,团队先找了些优质的 SQL 偏好数据,比如把正确 SQL 和错误 SQL 配对,然后让 GPT-4o 这样的强模型生成详细的推理过程,说明为啥正确的对、错误的错。接着把这些推理过程 “蒸馏” 给基础模型(比如 Qwen2.5-Coder-7B),让它学会怎么一步步分析 SQL。
之后,再用强化学习(GRPO 算法)接着练。这里的奖励很实在:只有当模型的推理过程符合格式要求,而且判断结果和标准答案一致时,才给满分 1,不然就是 0。这样一来,模型不光能判断对错,还能说清理由,既准确又透明。
举个例子,有个复杂问题是 “找出所有有日文翻译的卡牌套装中,仅提供非闪卡版本的套装占比”。候选 A 的 SQL 里多做了次不必要的表连接,导致结果算出 153.89% 这种不合理的数值;候选 B 用子查询正确过滤了数据,结果是 11.57%。经过训练的裁判模型能清晰指出候选 A 的逻辑漏洞,还有候选 B 为啥对,推理过程特别有条理,这要是换之前的方法,可能就因为执行结果都是数字,直接选错了。
学会推理还不够,JudgeSQL 还搞了个 “加权共识锦标赛(WCT)”,专门解决多候选选最优的效率问题。之前的 “双循环锦标赛(DRT)” 要把所有候选 SQL 两两对比,要是选 64 个候选,得比几千次,巨费时间。而 WCT 先把执行结果一样的 SQL 归为一组,每组选个 “代表”,只让代表们参赛,一下子就把对比次数降下来了。
更聪明的是,它还考虑了 “组的大小”。比如某组有 10 个 SQL,另一组只有 2 个,说明生成模型更倾向于生成第一组的 SQL,这隐含了模型的信心。所以 WCT 给每组打分时,会把 “代表比赛的得分” 和 “组的大小” 相乘,得到加权分数,分数最高的组就是赢家,最后从赢家里选个 SQL 当最终结果。
这么做有啥好处?一是快,对比次数大大减少;二是准,结合了推理判断和生成模型的信心;三是稳,避免了同组内 SQL 互相竞争导致的混乱。比如在 Qwen7B 模型上,当采样数量是 64 时,DRT 要做 876.4 次判断,而 WCT 只需要 48.6 次,快了 18 倍还多,准确率却更高。
光说不练假把式,咱们看实测数据。团队在 BIRD 开发集上测了 6 个不同的生成模型(7B 和 32B 各 3 个),结果 JudgeSQL 的表现简直碾压。
比如 Qwen2.5-Coder-7B 模型,用自一致性(SC)选 SQL,采样 16 个候选时 EX 是 62.39%,而用 WCT 加上强化训练的裁判模型(RJudge),EX 直接涨到 67.01%,涨了 4.62 个百分点。就算是 32B 的大模型,比如 XiYanSQL-32B,用 SC 时 EX 是 68.51%,用 WCT+RJudge 后涨到 71.90%,也涨了 3.39 个百分点,说明大模型也能靠这方法提性能。
而且 JudgeSQL 的泛化能力超强!裁判模型是用 Qwen7B 的数据训的,却能在其他 5 个不同模型(包括 32B 的)上都起效,不管生成模型是通用大模型还是专门的 SQL 模型,都能帮着选对 SQL,这说明它能当 “通用插件” 用,太方便了。
表 1:BIRD 开发集(BIRD Dev)上的评估结果。我们针对每种 SQL 生成模型,在不同采样数量(𝑁)下,对不同的 SQL 生成模型与选择策略进行了性能对比。作为参考,我们还报告了贪心采样(greedy sampling)的结果 —— 该结果可作为基准,用于评估不同采样策略与选择策略所带来的性能提升。

从表 1 里能清楚看到,不管是哪个生成模型、哪种采样数量,WCT+RJudge 的 EX 分数都比 SC 和 WCT+Prompted 裁判模型(PJudge)高,尤其是 7B 模型,提升更明显,毕竟小模型生成的 SQL 质量波动大,更需要好的选择方法。
再看不同选择策略的对比,表 2 里很明显,不管是配 PJudge 还是 RJudge,WCT 的 EX 分数都比 DRT 和 “不加权的锦标赛(CT)” 高。比如 Qwen7B 配 PJudge 时,WCT 的 EX 是 64.99%,比 CT 的 60.76% 高 4.23 个百分点,比 DRT 的 63.30% 高 1.69 个百分点。而且 WCT 还特别快,表 3 显示,Qwen32B 模型采样 64 个候选时,DRT 要做 680.9 次判断,WCT 只需要 15.4 次,快了 44 倍,效率直接拉满。
表 2:不同选择策略下的执行准确率(EX)(%)

表 3:不同生成模型、选择策略和采样数量下,每个问题的平均判断次数

更厉害的是,JudgeSQL 在复杂查询上的提升更明显。图 3 显示,不管是简单、中等还是复杂查询,WCT+RJudge 都比 SC 强,尤其是复杂查询,比如 Qwen7B 模型,SC 的 EX 是 44.1%,WCT+RJudge 直接涨到 50.3%,涨了 6.2 个百分点;XiYanSQL7B 更夸张,从 43.5% 涨到 51.0%,涨了 7.5 个百分点。要知道复杂查询在实际应用里最关键,这波提升直接解决了大问题。
当然,团队也测试了不同训练方法的效果。表 4 显示,只做简单监督训练(Direct-SFT)的模型,比基础模型强,但不如 “蒸馏 + 强化学习” 的 RJudge。比如 Qwen7B 的 RJudge,EX 是 67.01%,选择准确率(SA)是 82.55%,都比 Direct-SFT 和单独的 GRPO 训练高,这说明先通过蒸馏让模型学会推理,再用强化学习优化,是真的管用。
表 4:不同训练方法下,各生成模型的执行准确率(EX)和选择准确率(SA)(%)

最后,团队还测试了不同裁判模型的兼容性,表 5 显示,不管是 Qwen7B、Deepseek-6.7B 还是 Llama3-8B,配合 WCT 都比 SC 强,虽然 Llama 表现稍弱,但整体都能起效,说明 WCT 框架不挑基础模型,通用性超强。
表 5:零样本推理下,不同裁判模型在各 SQL 生成模型上的表现(开发集 EX%)

总的来说,JudgeSQL 这波操作太秀了!靠 “推理裁判模型” 解决了 “不会分辨” 的问题,靠 “加权共识锦标赛” 解决了 “选得慢” 的问题,而且泛化性强、兼容性好,不管是小模型还是大模型,简单查询还是复杂查询,都能帮着选对 SQL。以后用大模型做 Text-to-SQL,再也不用怕选到错的 SQL 了,这框架直接把 “最后一公里” 的难题给解决了!
更多推荐

所有评论(0)