3 Star 0 Fork 1

陌溪 / NL2SQL

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
BSD-3-Clause

数据说明

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

提供的数据集主要由3个文件组成,以训练集为例,包括train.json、train.tables.json及train.db。

train.json文件中,每一行为一条数据样本。数据样例及字段说明例如下:

{
     "table_id": "a1b2c3d4", # 相应表格的id
     "question": "世茂茂悦府新盘容积率大于1,请问它的套均面积是多少?", # 自然语言问句
    "sql":{ # 真实SQL
        "sel": [7], # SQL选择的列 
        "agg": [0], # 选择的列相应的聚合函数, '0'代表无
        "cond_conn_op": 0, # 条件之间的关系
        "conds": [
            [1,2,"世茂茂悦府"], # 条件列, 条件类型, 条件值,col_1 == "世茂茂悦府"
            [6,0,1]
        ]
    }
}

其中,SQL的表达字典说明如下:

op_sql_dict = {0:">", 1:"<", 2:"==", 3:"!="}
agg_sql_dict = {0:"", 1:"AVG", 2:"MAX", 3:"MIN", 4:"COUNT", 5:"SUM"}
conn_sql_dict = {0:"", 1:"and", 2:"or"}

train.tables.json 文件中,每一行为一张表格数据。数据样例及字段说明例如下:

{
    "id":"a1b2c3d4", # 表格id
    "name":"Table_a1b2c3d4", # 表格名称
    "title":"表1:2019年新开工预测 ", # 表格标题
    "header":[ # 表格所包含的列名
        "300城市土地出让",
        "规划建筑面积(万㎡)",
        ……
    ],
    "types":[ # 表格列所相应的类型
        "text",
        "real",
        ……
    ],
    "rows":[ # 表格每一行所存储的值
        [
            "2009年7月-2010年6月",
            168212.4,
            ……
        ]
    ]
}

tables.db为sqlite格式的数据库形式的表格文件。各个表的表名为tables.json中相应表格的name字段。为避免部分列名中的特殊符号导致无法存入数据库文件,表格中的列名为经过归一化的字段,col_1, col_2, …, col_n。db文件将后续更新。

另外,也提供用于baseline方案的字向量文件char_embedding,每一行的内容为字符及其300维的向量表达,以空格分隔。

介绍

这个基线方法是基于SQLNet的代码开发和改进的,SQLNet是WikiSQL中的一个基线模型。 该模型将生成整个SQL的任务解耦为多个子任务,包括选择号、选择列、选择聚合、条件号、条件列等。 这里显示的是简单的模型结构,实现细节可以参考原文。

依赖

  • Python 2.7
  • torch 1.0.1
  • records 0.5.3
  • tqdm

开始训练

首先,下载提供的数据集~/data_nl2sql/,其中应该包括train。json, train.tables。json、val.json val.tables。json和char_embedded,并将它们划分为以下结构。

├── data_nl2sql
│ ├── train
│ │ ├── train.db
│ │ ├── train.json
│ │ ├── train.tables.json
│ ├── val
│ │ ├── val.db
│ │ ├── val.json
│ │ ├── val.tables.json
│ ├── test
│ │ ├── test.db
│ │ ├── test.json
│ │ ├── test.tables.json
│ ├── char_embedding.json

然后

mkdir ~/nl2sql
cd ~/nl2sql/
git clone https://github.com/ZhuiyiTechnology/nl2sql_baseline.git

cp -r ~/data_nl2sql/* ~/nl2sql/nl2sql_baseline/data/
cd ~/nl2sql/nl2sql_baseline/

sh ./start_train.sh 0 64

第一个参数0表示gpu数量,第二个参数表示批大小。

开始评估

在var.json或test上求值,确保已训练好的模型就绪,然后运行

cd ~/nl2sql/nl2sql_baseline/
sh ./start_test.sh 0 pred_example

第一个参数0表示gpu数量,第二个参数表示预测的输出路径。

实验结果

我们进行了多次实验,在128个批次的val数据集上实现了27.5%的逻辑形式精度。

实验分析

我们发现该数据集的主要挑战包括条件值预测差、NL问题中未提及的select列和condition列、NL问题与SQL之间条件关系表示不一致等。所有这些挑战都不能通过现有的基线和SOTA模型来解决。 与之相对应的是,即使在训练集上,这个基线模型对条件列的准确率也只有77%,对条件值的准确率也只有62%,整体逻辑形式也只有50%左右,说明这些问题对于参赛者来说是具有挑战性的。

相关资源

https://github.com/salesforce/WikiSQL

https://yale-lily.github.io/spider

你已经是个成熟的表格了,该学会自然语言处理了

经典检索算法:BM25原理

Semantic Parsing with Syntax- and Table-Aware SQL Generation

BSD 3-Clause License Copyright (c) 2017, Xiaojun Xu, Chang Liu and Dawn Song All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

NL2SQL 展开 收起
Python
BSD-3-Clause
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Python
1
https://gitee.com/moxi159753/NL2SQL.git
git@gitee.com:moxi159753/NL2SQL.git
moxi159753
NL2SQL
NL2SQL
master

搜索帮助