学习笔记(13)- decaNLP训练WikiSQL
将自然语言转为sql语句,达到对话查询报表的效果。
参考资料
参考1
https://mp.weixin.qq.com/s/i7WAFjQHK1NGVACR8x3v0A
语义解析。SQL查询生成与语义解析相关。基于WikiSQL数据集的模型将自然语言问题转化成结构化的SQL查询,以便用户可以使用自然语言与数据库进行交互。WikiSQL通过逻辑形式精确匹配(lfEM)进行评估,以确保模型不会从错误生成的查询中获得正确的答案。
参考2
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
安装
创建python虚拟环境
下载源码:
git clone https://github.com/salesforce/WikiSQL
cd WikiSQL
pip install -r requirements.txt
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
{
	"phase": 1,
	"table_id": "1-10015132-11",
	"question": "What position does the player who played for butler cc (ks) play?",
	"sql": {
		"sel": 3,
		"conds": [
			[5, 0, "Butler CC (KS)"]
		],
		"agg": 0
	}
}
- 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
{
	"header": ["Player", "No.", "Nationality", "Position", "Years in Toronto", "School/Club Team"],
	"page_title": "Toronto Raptors all-time roster",
	"types": ["text", "text", "text", "text", "text", "text"],
	"id": "1-10015132-11",
	"section_title": "L",
	"caption": "L",
	"rows": [
		["Antonio Lang", "21", "United States", "Guard-Forward", "1999-2000", "Duke"],
		["Voshon Lenard", "2", "United States", "Guard", "2002-03", "Minnesota"],
		["Martin Lewis", "32, 44", "United States", "Guard-Forward", "1996-97", "Butler CC (KS)"],
		["Brad Lohaus", "33", "United States", "Forward-Center", "1996", "Iowa"],
		["Art Long", "42", "United States", "Forward-Center", "2002-03", "Cincinnati"],
		["John Long", "25", "United States", "Guard", "1996-97", "Detroit"],
		["Kyle Lowry", "3", "United States", "Guard", "2012-Present", "Villanova"]
	],
	"name": "table_10015132_11"
}
数据库db文件

表中列名用col0、col1等替代,目的是为了节省空间。
测试
测试的样例,可见文件test/example.pred.dev.jsonl
{
	"query": {
		"sel": 3,
		"agg": 0,
		"conds": [
			[5, 0, "butler cc (ks)"]
		]
	},
	"seq": {
		"words": ["symselect", "symagg", "symcol", "position", "symwhere", "symcol", "school\/club", "team", "symop", "=", "symcond", "butler", "cc", "-lrb-", "ks", "-rrb-"],
		"after": [" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "", "", " "],
		"num": [1, 12, 4, 28, 2, 4, 32, 33, 9, 20, 10, 40, 41, 42, 43, 44],
		"gloss": ["SYMSELECT", "SYMAGG", "SYMCOL", "Position", "SYMWHERE", "SYMCOL", "School\/Club", "Team", "SYMOP", "=", "SYMCOND", "butler", "cc", "(", "ks", ")"]
	},
	"error": ""
}
提供了一个测试文件test/example.pred.dev.jsonl.bz2. 使用命令 bunzip2 test/example.pred.dev.jsonl.bz2 -k 进行解压。
提供了一个docker文件,打包了一些依赖文件,可以运行评估脚本。
首先在根目录构建镜像
docker build -t wikisqltest -f test/Dockerfile .
然后运行镜像文件
docker run --rm --name wikisqltest wikisqltest
如果一切运行正常,输入如下:
{
  "ex_accuracy": 0.5380596128725804,
  "lf_accuracy": 0.35375846099038116
}
我用了sudo
xuehp@haomeiya002:~/git/WikiSQL$ sudo docker build -t wikisqltest -f test/Dockerfile .
xuehp@haomeiya002:~/git/WikiSQL$ sudo docker run --rm --name wikisqltest wikisqltest

学习笔记(13)- decaNLP训练WikiSQL的更多相关文章
- Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法
		Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法 这篇笔记将介绍如何使用Ext.Net GridPanel 中使用Sorter. 默认情况下,Ext.Net GridP ... 
- SQL反模式学习笔记13  使用索引
		目标:优化性能 改善性能最好的技术就是在数据库中合理地使用索引. 索引也是数据结构,它能使数据库将指定列中的某个值快速定位在相应的行. 反模式:无规划的使用索引 1.不使用索引或索引不足 2.使用了 ... 
- golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换
		golang学习笔记13 Golang 类型转换整理 go语言string.int.int64.float64.complex 互相转换 #string到intint,err:=strconv.Ato ... 
- springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定
		springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ... 
- Python3+Selenium3+webdriver学习笔记13(js操作应用:弹出框无效如何处理)
		#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记13(js操作应用:弹出框无效如何处理)'''from sel ... 
- 并发编程学习笔记(13)----ConcurrentLinkedQueue(非阻塞队列)和BlockingQueue(阻塞队列)原理
		· 在并发编程中,我们有时候会需要使用到线程安全的队列,而在Java中如果我们需要实现队列可以有两种方式,一种是阻塞式队列.另一种是非阻塞式的队列,阻塞式队列采用锁来实现,而非阻塞式队列则是采用cas ... 
- TensorFlow学习笔记——LeNet-5(训练自己的数据集)
		在之前的TensorFlow学习笔记——图像识别与卷积神经网络(链接:请点击我)中了解了一下经典的卷积神经网络模型LeNet模型.那其实之前学习了别人的代码实现了LeNet网络对MNIST数据集的训练 ... 
- python 学习笔记 13 -- 经常使用的时间模块之time
		Python 没有包括相应日期和时间的内置类型.只是提供了3个相应的模块,能够採用多种表示管理日期和时间值: * time 模块由底层C库提供与时间相关的函数.它包括一些函数用于获取时钟时间和处 ... 
- MiZ702学习笔记13——ZYNQ通过AXI-Lite与PL交互
		在<MiZ702学习笔记7——尝试自制带总线IP>,我曾提到了AXI4-Lite的简单用法,驱动了下流水灯,只涉及到了写总线.今天,我想利用之前的VGA模块,将AXI4-Lite的读写都应 ... 
- 【干货】Html与CSS入门学习笔记1-3
		从23号开始用了4天时间看完了<Head First Html与CSS>这本书,本书讲解方式深入浅出,便于理解,结合习题,便于记忆,是一本不错的入门书.下面是本书的学习笔记: 一.认识HT ... 
随机推荐
- 前后端分离之 跨域和JWT
			书接上回:https://www.cnblogs.com/yangyuanhu/p/12081525.html 前后端分离案例 现在把自己当成是前端,要开发一个前后分离的简单页面,用于展示学生信息列表 ... 
- 我的18vps~
			自从买了18vps的香港虚拟主机后,就面临一个问题,浏览器无法访问它的apache服务,后来发现,需要同时开启nginx服务: /usr/local/nginx/sbin/nginx -c /usr/ ... 
- ScheduledThreadPoolExecutor与Timer
			首先来看一下Timer类 例子如下: package cn.concurrent.executor; import java.util.Timer; import java.util.TimerTas ... 
- tp5 自定义公共函数,前台模板调用
			最近用tp5做一个cms,在添加模型的时候,选择类型,这类型太多了,如果一个个的去判断显示,能累死人了,干脆写个公共方法, 首先写公共方法用到Common.php,目录project/applicat ... 
- Java面向对象封装优化2_构造方法
			1. 类 package cn.itcast.day06.demo05; /* 一个标准的类通常要拥有下面四个组成部分: 1. 所有的成员变量都要使用private关键字修饰 2. 为每一个成员变量编 ... 
- try catch和if else
			当错误发生时,当事情出问题时,JavaScript 引擎通常会停止,并生成一个错误消息.描述这种情况的技术术语是:JavaScript 将抛出一个错误. try 语句允许我们定义在执行时进行错误测试的 ... 
- Dapr Pub/Sub 集成 RabbitMQ 、Golang、Java、DotNet Core
			前置条件: <Dapr运用> <Dapr 运用之 Java gRPC 调用篇> <Dapr 运用之集成 Asp.Net Core Grpc 调用篇> 搭建 Rabb ... 
- JavaScript - 代码片段,Snippets,Gist
			求n个数字的累加和 递归实现 function getSum(x) { if (x == 1) { return 1; } return x + getSum(x - 1); } var result ... 
- Deeplearning.ai课程笔记-结构化机器学习项目
			目录 一. 正交化 二. 指标 1. 单一数字评估指标 2. 优化指标.满足指标 三. 训练集.验证集.测试集 1. 数据集划分 2. 验证集.测试集分布 3. 验证集.测试集大小 四. 比较人类表现 ... 
- C:char类型
			char字符类型 字符型变量用于存储一个单一字符,在 C 语言中用 char 表示,其中每个字符变量都会占用 1 个字节.在给字符型变量赋值时,需要用一对英文半角格式的单引号(' ')把字符括起来. ... 
