写点什么

首届中文 NL2SQL 挑战赛亚军比赛攻略 _BugCreater

作者:阿里云天池
  • 2024-08-06
    浙江
  • 本文字数:953 字

    阅读完需:约 3 分钟

​关联比赛:  首届中文NL2SQL挑战赛

1. 任务描述

本次比赛的任务:根据 Question、表格信息(包含列名、列类型、内容),预测对应的 SQL 语句(下图黄色部分)。比赛只涉及单表查询,需要预测的有 4 部分:挑选的列(sel),列上的聚合函数(agg),筛选的条件(conds),及条件间的关系(cond_conn_op)。



本次赛题将提供 4 万条有标签数据作为训练集,1 万条无标签数据作为测试集。其中,5 千条测试集数据作为初赛测试集,对选手可见;5 千条作为复赛测试集,对选手不可见。

2. 评价指标

比赛的评分标准包括:Logic Form Accuracy: 预测完全正确的 SQL 语句。其中,列的顺序并不影响准确率的计算。Execution Accuracy: 预测的 SQL 的执行结果与真实 SQL 的执行结果一致。排行榜以 $Score_{lf}$与 $Score_{ex}$的平均值排序。

3. 难点分析

NL2SQL 方向有很多有代表性的数据集,任务最合适的类比数据集就是 2017 年 salesforce 提出的 WikiSQL 数据集,包含 8w 多数据和 2w 多表格。不过与其相比,此次比赛的数据集有 4 点不同:

  • 不限制使用表格内容信息

  • 存在 conds value 不能从 question 提取的样本

  • select agg 存在多项

  • 没有 conds 缺失的样本

其中影响最大的就是 train 中 25%左右样本 conds value 不能直接从 question 提取。

下表是我们对样本集的一些参数的分析,包括问题长度, 表格列数目 列总长度 最多 sel 和最多 cond 数目,这些参数决定了模型的超参数如何设置。

4. 解题方案

我们拆解出多个子任务:

  • 把 sel 与 agg 结合当作多分类问题;

  • 把 cond_conn_op 当作多分类问题;

  • 把 conds 当作一个比较复杂的抽取问题

我们构建了多种类型神经网络模型,将这些任务进行联合学习。





改进点

  • 使用了 12 层 transformer 动态权重融合,极大的增强了模型的编码能力;

  • 通过列的 shuffle 进行数据增强,提高了模型的鲁棒性,对于 sel、cond 的列选择准确率有很好的提升效果;

  • 针对 conds value 不能从 question 提取的样本的问题,我们使用纯净的数据(conds value 多能从 question 提取)训练模型。然后用训练好的模型预测不能提取的这批数据,选择置信度高的结果当作类标;

  • 在 X-SQL 的基础上,增加辅助任务。比如预测 sel、cond 的数目,可以作为我们后续融合的过滤条件。这两个任务的预测效果都非常好,可以达到 99%以上。

5. 结果




查看更多内容,欢迎访问天池技术圈官方地址:首届中文NL2SQL挑战赛亚军比赛攻略_BugCreater_天池技术圈-阿里云天池

用户头像

还未添加个人签名 2024-03-12 加入

还未添加个人简介

评论

发布
暂无评论
首届中文NL2SQL挑战赛亚军比赛攻略_BugCreater_阿里云天池_InfoQ写作社区