导读
最近,DAIL-SQL在魔搭创空间上线,并在NL2SQL任务上取得了新的SOTA。DAIL-SQL可以更好地利用LLM的NL2SQL能力,本文对其进行详细解读。
基于LLM的NL2SQL
NL2SQL任务的目标是将用户对某个数据库的自然语言问题转化为相应的SQL查询。随着LLM的发展,使用LLM进行NL2SQL已成为一种新的范式。在这一过程中,如何利用提示工程来发掘LLM的NL2SQL能力显得尤为重要。
在利用LLM完成NL2SQL这一任务时,提示工程的关键在于将自然语言问题与必要的数据库信息转化为适用于LLM的自然语言序列输入,即问题表示。同时,当允许输入一些样例以利用LLM的in-context learning能力时,还需要考虑如何选择样例以及如何将这些样例有机地组织到输入序列中。
DAIL-SQL提示工程
在问题的表示上,DAIL-SQL发现SQL语句加注释的代码表示方式可以有效发掘LLM在预训练中学习的代码能力。
在样例的选择上,以往的方法着重于选择与用户问题相似的样例问题,或者选择与目标SQL相似的样例SQL。然而,DAIL-SQL发现通过同时考虑问题相似度和SQL相似度来选择样例,可以得到更好的结果。
在样例的展示上,以往的方法通常会展示所有样例信息,包括问题、SQL和数据库信息,或者仅展示SQL以追求样例数量。DAIL-SQL采用了一种折中的方式,同时展示样例的问题和SQL,以保留问题和SQL之间的映射关系,并去除了token数最多的数据库信息,以确保能展示更多的样例。
最终,DAIL-SQL在NL2SQL的国际权威榜单Spider上取得了86.6的执行准确率,比第二名的DIN-SQL高1.3个百分点。同时,每个问题大约只需700个token,比DIN-SQL少一个数量级。
魔搭最佳实践
在DAIL-SQL魔搭创空间中,我们为用户提供了上传自己的数据库表格的功能,并调用魔搭社区上的多个LLM模型,为用户提出的问题生成相应的SQL。同时,我们支持用户使用不同的问题表示方法、样例选择和展示策略。用户可以通过这些功能来体验不同的提示方法对LLM生成SQL的影响。
创空间demo:
链接:https://modelscope.cn/studios/ml-db/NL2SQL_with_LLM/summary
介绍:NL2SQL任务旨在将用户对某个数据库的自然语言提问转化成对应的SQL语句,从而降低数据库对普通用户的使用门槛。本空间演示了如何利用LLM来完成该项任务,包括zero-shot场景下的问题表示,以及few-shot场景下怎么利用LLM的in-context learning的能力,以及对LLM在NL2SQL任务上做 supervised fine-tuning。
代码repo:
https://github.com/BeachWang/DAIL-SQL
论文:
https://arxiv.org/abs/2308.15363
Spider榜单:
https://yale-lily.github.io/spider
体验链接:https://modelscope.cn/studios/ml-db/NL2SQL_with_LLM/summary