💻 最近工作上需要,开一个 NL2SQL 的坑,包含论文精读,工期更新等,功能包含但不限于 NL2SQL,也可以 NL2API,即刻作为一个快速记录。
📚 今天是这篇记录耶鲁大学 11 位同学构建 Spider-NL2SQL 测试集的论文,
arxiv.org🤔 解决什么问题:
1️⃣ 以前的数据集要么重复性强,让模型仅仅需要学习问题与答案的匹配,泛化性很弱
2️⃣ SQL 样本太少,无法有足量的样本覆盖到各种 SQL 关键词,就算是 WikiSQL 数据集,也只充斥了 SELECT 开头的简单语句
Yale-Spider NL2SQL 数据集旨在解决以上的问题,旨在强调 NL2SQL 模型泛化性能力,同时需要胜任更加复杂的 SQL 语句生成任务。为此他们创造了这个数据集作为一个标准的 train-dev-test 数据集。
🐎 本文其实是一篇 NL2SQL 数据集准备的指导论文,有些 takeaways:
1️⃣ 数据准备:数据需要做以下预处理:
1) foreign key 需要表达清楚,表征不同表之间的关系
2) 有些 column 名是缩写的,文中尚需要将其转化为全称,比如要将 stu_id 转化为 student_id
3) 数据集构建就尽量要涵盖所有 SQL 关键词,并且在每个数据库中对每个关键词都要提供足量的例子
2️⃣ 入参要求:将模型对备选数 colunn 的搜索空间控制在同一个数据库(same database)中
3️⃣ 模型评估:模型评估需要解决筛选 column 次序上的问题,如 select, where 中的 column 顺序不一样,作者给了一段将 sql 语句基于关键词分解成 component 的方法可以解决这个问题。并且罗列了其他两种不同的评估方案
4️⃣ train-test split 方法:分为基于 example 粒度划分,和基于 database 粒度划分。前者在 train&test 数据集中会出现不同问题,针对相同一个数据库的情况。后者则保证了测试集中,不会出现训练集中的数据库信息,更加考验模型的泛化能力(因为测试集中的数据库字段模型都没见过)
我们可以针对自己的场景来选择构建我们自身的数据集和训练方案。