将自然语言转为sql语句,达到对话查询报表的效果。

参考资料

参考1

https://mp.weixin.qq.com/s/i7WAFjQHK1NGVACR8x3v0A

语义解析。SQL查询生成与语义解析相关。基于WikiSQL数据集的模型将自然语言问题转化成结构化的SQL查询,以便用户可以使用自然语言与数据库进行交互。WikiSQL通过逻辑形式精确匹配(lfEM)进行评估,以确保模型不会从错误生成的查询中获得正确的答案。

参考2

http://decanlp.com/

Semantic Parsing

Semantic parsing requires models to translate unstructured information into structured formats so that users can interact with structured information (e.g. a database) in natural language . decaNLP includes the WikiSQL dataset, which maps natural language questions into structured SQL queries.

参考3

https://github.com/salesforce/WikiSQL

安装

  1. 创建python虚拟环境
  2. 下载源码:
  3. git clone https://github.com/salesforce/WikiSQL
  4. cd WikiSQL
  5. pip install -r requirements.txt
  6. tar xvjf data.tar.bz2

数据

解压之后的数据文件目录:

.jsonl文件每行是一个json文件,

.db是SQLite3数据库格式。

查看db文件,可以从这里下载工具:https://github.com/pawelsalawa/sqlitestudio/releases/tag/3.2.1

问题、查询命令和表ID

文件/Users/huihui/git/WikiSQL/data/dev.jsonl

  1. {
  2. "phase": 1,
  3. "table_id": "1-10015132-11",
  4. "question": "What position does the player who played for butler cc (ks) play?",
  5. "sql": {
  6. "sel": 3,
  7. "conds": [
  8. [5, 0, "Butler CC (KS)"]
  9. ],
  10. "agg": 0
  11. }
  12. }
  • phase: 数据集收集的阶段,在2个阶段收集WikiSQL。
  • table_id: 该问题所在的表ID。
  • question: 工作人员编写的自然语言问题。
  • sql: 该问题对应的SQL查询语句。有以下子字段:
    • sel: 列的下标。
    • agg: 聚合操作的下标。agg_ops = ['', 'MAX', 'MIN', 'COUNT', 'SUM', 'AVG']
    • conds: 三元组列表:
      • column_index: 列下标
      • operator_index: 操作符的下标。['=', '>', '<', 'OP']
      • condition: 条件的比较值,float或者string

可以进行max、min、count、sum、avg、大于小于等于、这些查询。

表文件

/Users/huihui/git/WikiSQL/data/dev.tables.jsonl

  1. {
  2. "header": ["Player", "No.", "Nationality", "Position", "Years in Toronto", "School/Club Team"],
  3. "page_title": "Toronto Raptors all-time roster",
  4. "types": ["text", "text", "text", "text", "text", "text"],
  5. "id": "1-10015132-11",
  6. "section_title": "L",
  7. "caption": "L",
  8. "rows": [
  9. ["Antonio Lang", "21", "United States", "Guard-Forward", "1999-2000", "Duke"],
  10. ["Voshon Lenard", "2", "United States", "Guard", "2002-03", "Minnesota"],
  11. ["Martin Lewis", "32, 44", "United States", "Guard-Forward", "1996-97", "Butler CC (KS)"],
  12. ["Brad Lohaus", "33", "United States", "Forward-Center", "1996", "Iowa"],
  13. ["Art Long", "42", "United States", "Forward-Center", "2002-03", "Cincinnati"],
  14. ["John Long", "25", "United States", "Guard", "1996-97", "Detroit"],
  15. ["Kyle Lowry", "3", "United States", "Guard", "2012-Present", "Villanova"]
  16. ],
  17. "name": "table_10015132_11"
  18. }

数据库db文件

表中列名用col0、col1等替代,目的是为了节省空间。

测试

测试的样例,可见文件test/example.pred.dev.jsonl

  1. {
  2. "query": {
  3. "sel": 3,
  4. "agg": 0,
  5. "conds": [
  6. [5, 0, "butler cc (ks)"]
  7. ]
  8. },
  9. "seq": {
  10. "words": ["symselect", "symagg", "symcol", "position", "symwhere", "symcol", "school\/club", "team", "symop", "=", "symcond", "butler", "cc", "-lrb-", "ks", "-rrb-"],
  11. "after": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "", "", " "],
  12. "num": [1, 12, 4, 28, 2, 4, 32, 33, 9, 20, 10, 40, 41, 42, 43, 44],
  13. "gloss": ["SYMSELECT", "SYMAGG", "SYMCOL", "Position", "SYMWHERE", "SYMCOL", "School\/Club", "Team", "SYMOP", "=", "SYMCOND", "butler", "cc", "(", "ks", ")"]
  14. },
  15. "error": ""
  16. }

提供了一个测试文件test/example.pred.dev.jsonl.bz2. 使用命令 bunzip2 test/example.pred.dev.jsonl.bz2 -k 进行解压。

提供了一个docker文件,打包了一些依赖文件,可以运行评估脚本。

  1. 首先在根目录构建镜像
  2. docker build -t wikisqltest -f test/Dockerfile .
  3. 然后运行镜像文件
  4. docker run --rm --name wikisqltest wikisqltest
  5. 如果一切运行正常,输入如下:
  6. {
  7. "ex_accuracy": 0.5380596128725804,
  8. "lf_accuracy": 0.35375846099038116
  9. }
  10. 我用了sudo
  11. xuehp@haomeiya002:~/git/WikiSQL$ sudo docker build -t wikisqltest -f test/Dockerfile .
  12. xuehp@haomeiya002:~/git/WikiSQL$ sudo docker run --rm --name wikisqltest wikisqltest

学习笔记(13)- decaNLP训练WikiSQL的更多相关文章

  1. Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法

    Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法 这篇笔记将介绍如何使用Ext.Net GridPanel 中使用Sorter. 默认情况下,Ext.Net GridP ...

  2. SQL反模式学习笔记13 使用索引

    目标:优化性能 改善性能最好的技术就是在数据库中合理地使用索引.  索引也是数据结构,它能使数据库将指定列中的某个值快速定位在相应的行. 反模式:无规划的使用索引 1.不使用索引或索引不足 2.使用了 ...

  3. golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换

    golang学习笔记13 Golang 类型转换整理 go语言string.int.int64.float64.complex 互相转换 #string到intint,err:=strconv.Ato ...

  4. springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定

    springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...

  5. Python3+Selenium3+webdriver学习笔记13(js操作应用:弹出框无效如何处理)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记13(js操作应用:弹出框无效如何处理)'''from sel ...

  6. 并发编程学习笔记(13)----ConcurrentLinkedQueue(非阻塞队列)和BlockingQueue(阻塞队列)原理

    · 在并发编程中,我们有时候会需要使用到线程安全的队列,而在Java中如果我们需要实现队列可以有两种方式,一种是阻塞式队列.另一种是非阻塞式的队列,阻塞式队列采用锁来实现,而非阻塞式队列则是采用cas ...

  7. TensorFlow学习笔记——LeNet-5(训练自己的数据集)

    在之前的TensorFlow学习笔记——图像识别与卷积神经网络(链接:请点击我)中了解了一下经典的卷积神经网络模型LeNet模型.那其实之前学习了别人的代码实现了LeNet网络对MNIST数据集的训练 ...

  8. python 学习笔记 13 -- 经常使用的时间模块之time

    Python 没有包括相应日期和时间的内置类型.只是提供了3个相应的模块,能够採用多种表示管理日期和时间值: *    time 模块由底层C库提供与时间相关的函数.它包括一些函数用于获取时钟时间和处 ...

  9. MiZ702学习笔记13——ZYNQ通过AXI-Lite与PL交互

    在<MiZ702学习笔记7——尝试自制带总线IP>,我曾提到了AXI4-Lite的简单用法,驱动了下流水灯,只涉及到了写总线.今天,我想利用之前的VGA模块,将AXI4-Lite的读写都应 ...

  10. 【干货】Html与CSS入门学习笔记1-3

    从23号开始用了4天时间看完了<Head First Html与CSS>这本书,本书讲解方式深入浅出,便于理解,结合习题,便于记忆,是一本不错的入门书.下面是本书的学习笔记: 一.认识HT ...

随机推荐

  1. 每日扫盲(五):RPC(Remote Procedure Call)

    作者:洪春涛链接:https://www.zhihu.com/question/25536695/answer/221638079来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  2. ssm框架整合,配置文件中的配置内容

    转自:https://www.cnblogs.com/dong-dong-1/p/8724127.html 使用idea工具开发,用maven进行管理. 最近在写毕业设计,因为对ssm框架一直半解,常 ...

  3. Spring5 of WebClient(转载)

    前言 Spring5带来了新的响应式web开发框架WebFlux,同时,也引入了新的HttpClient框架WebClient.WebClient是Spring5中引入的执行 HTTP 请求的非阻塞. ...

  4. redis 字符串操作

    redis 字符串创建SET操作 127.0.0.1:6379> set number "10086" OK 127.0.0.1:6379> set book &quo ...

  5. C++(MFC)踩坑之旅 ------- 新建项目弹出“发生一个或多个错误”

    结束隔离,回公司上班,把在家办公的程序考回公司的电脑,结果出错了,每当我新建项目时,都会弹出"发生一个或多个错误",点确定后回到新建项目的设置上面,折腾了两天时间才解决,以下是我的 ...

  6. cc攻击怎么防御,如何防止cc攻击?

    当我们访问一个网站时,如果网站页面越简单,访问速度越快,页面越漂亮,加载速度就越慢,因为要加载更多东西,服务器压力也会比较大.cc攻击就是利用这种弱点,使用大量代理服务器,对网站进行攻击,消耗网站服务 ...

  7. 【C语言】将输入的10个整数逆序输出

    代码1: #include <stdio.h> int main() { ], b[]; int i,j; printf("请输入10个整数:\n"); ; i < ...

  8. pycharm如何关闭虚拟环境(即取消venv命令行)

    venv命令行 是虚拟环境特有, 为什么要使用虚拟环境: 在实际项目开发中,我们通常会根据自己的需求去下载各种相应的框架库,如Scrapy.Beautiful Soup等,但是可能每个项目使用的框架库 ...

  9. java linux安装jdk,git, maven

    jdk8下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html mkdir ...

  10. C++中宏的定义与用法(现已被内联函数所代替)

    在noip中,宏还是被经常采用,所以这里讲一下,C++中宏的定义与用法 第一种用法——配合条件编译:#define DEBUG 定义一个叫DEBUG的标识符.它应该与#ifdef或#ifndef配合使 ...