id随机选择另一张表格的 sql_表格问答1:简介
在公众号的第一篇文章中我们介绍了一个厉害的开放域问答系统 REALM,它可以根据自然语言问题从知识库中找到相关文章并从文章中找到问题的答案。REALM 这种直接从文章中获取答案的设定在问答领域称为非结构化文档问答,接下来我们将用几篇文章介绍一下与之相对应的结构化文档问答中的一个重要分支表格问答。
什么是表格问答
表格大家都不陌生,谁电脑里没几个excel文件呢。它其实是一种信息密度很高的文档类型,与文章相比,更加适合作为电商、查询等场景的知识源。用表格来提供信息不仅方便业务端梳理知识,而且结构化的数据给算法端进行信息聚合、比较甚至推理提供了更肥沃的土壤。
下图是 MSRA在2018 年底发的一篇文章[1]的插图,里面对表格相关 NLP 问题有一个比较完整的呈现。其中涉及了检索、语义解析、生成和对话等多个方向。
如图所示,表格问答就是针对一个自然语言问题,根据表格内容给出答案。
表格问答主要涉及的是图中检索和语义解析两个模块。检索模块在文档问答里也有,文档问答的检索模块是为了找到和问题相关的文档,而表格问答里检索模块的目标则是找到和问题相关的表格。这个模块只有在涉及大量表格(例如搜索引擎)的时候才会用到。
语义解析是和文档问答中差别比较大的部分。在文档问答中是使用一个 reader 模型来处理检索到的文档(context),而表格问答的侧重点则是处理问题(query)。语义解析模型的目标是结合表格信息将问题(如图中的Which city hosted Summer Olympic in 2008?
)转化成一个机器可理解和执行的规范语义表示,对二维表而言这种表示通常就是 SQL 语句(如图中的SELECT City FROM SummerOlympic WHERE Year="2008"
)。有了 SQL 语句就可以执行得到针对问题的答案(如图中的Beijing
)。
在不需要表格检索的场景中,表格问答就简化成了一个自然语言转 SQL(nl2sql)问题,我们后面的介绍也主要聚焦在 nl2sql 这个问题上。
NL2SQL 数据集
我认为语义解析算是 NLP 界“最初的梦想”了,笼统地说就是要建立起非结构化自然语言和结构化机器语言间的桥梁。NL2SQL 由于其实用性渐渐成为了语义解析领域一个重要的方向,近几年也诞生了很多有代表性的 nl2sql 数据集。
英语世界两个著名的数据集是WikiSQL[2]和Spider[3];去年国内的追一科技在天池平台上举办过一次中文 nl2sql 挑战赛[4],为中文 NLP 世界贡献了一个高质量的数据集。
WikiSQL 相对比较简单,也比较典型,我们从它开始讲起。宏观上数据集分为两个部分:问题和表格数据。
下面是一个问题的例子,每条数据包含三个主要字段。
{"phase":1,"question":"who is the manufacturer for the order year 1998?","sql":{"conds":[ [0,0,"1998" ] ],"sel":1,"agg":0 },"table_id":"1-10007452-3"}
question
是自然语言问题table_id
是与这个这个问题相关的表格编号sql
字段是标签数据。这个数据集进一步把 SQL 语句结构化(简化),分成了conds
,sel
,agg
三个部分。sel
是查询目标列,其值是表格中对应列的序号agg
的值是聚合操作的编号,可能出现的聚合操作有['', 'MAX', 'MIN', 'COUNT', 'SUM', 'AVG']
共 6 种。conds
是筛选条件,可以有多个。每个条件用一个三元组(column_index, operator_index, condition)
表示,可能的operator_index
共有['=', '>', '四种,
condition是操作的目标值,这是不能用分类解决的目标。
可以看出 WikiSQL 里的自然语言查询语句并不会太难,而且由于将SQL语句做了进一步的结构化,多数目标可以建模成分类问题进行解决。
WikiSQL 是针对单表场景的数据集,每一个问题只会对应一张表格。表格数据大概长下面这个样子,其中id
与问题中的table_id
对应,header
是表头(列名),types
是每一列的数据类型,rows
则是每一行数据。
{"id":"1-1000181-1","header":["State/territory","Text/background colour","Format","Current slogan","Current series","Notes" ],"types":["text","text","text","text","text","text" ],"rows":[ ["Australian Capital Territory","blue/white","Yaa\u00b7nna","ACT \u00b7 CELEBRATION OF A CENTURY 2013","YIL\u00b700A","Slogan screenprinted on plate" ], ["New South Wales","black/yellow","aa\u00b7nn\u00b7aa","NEW SOUTH WALES","BX\u00b799\u00b7HI","No slogan on current series" ] ]}
Spider 数据集比 WikiSQL 困难,它需要构造的 SQL 语句更加复杂,而且有的问题需要做多张表的聚合。下图是 Spider 数据集里一些不同难度查询语句的例子,WikiSQL 基本上处在其中的 easy 水平。
最后那个Extra Hard的例子真是看得我头皮发麻,我感觉我自己都写不出相应的SQL语句,真是太难了。
中文 NL2SQL 数据集的形式几乎和 WikiSQL 一模一样,但难度高出不少。它更加接近业务场景一些,主要体现在表格内容非常丰富、自然语言问题的表达也更加多样。这两点从当时比赛冠军的答辩 ppt[5]里就可见一二。要取得好成绩需要做很多文本规范化的工作。
性能评价
NL2SQL 一般有两种评价方式,一种是直接比较生成的 SQL 与标签的差别,另一种是比较生成的 SQL 执行结果与标签 SQL 执行结果的差别。在 WikiSQL 中这两个指标分别称为 logical form accuracy 和 execution accuracy。由于不同的 SQL 语句可能产生相同的结果,所以用后一种评价方式的得分一般高于前一种。
Spider 原来的评价指标比较接近于 logical form acc,今年刚开放了 execution acc 赛道。由于难度有差异,目前模型在各数据集上的水平也有一些差别。WikiSQL 目前排行榜上第一名的执行准确率已经达到 92%,逻辑形式准确率也达到了 86.5%,而 Spider 由于难度更大,SOTA 成绩只有 61.9%。
以上就是今天的全部内容,相信你已经对 NL2SQL 问题有了一个比较直观的了解。后面会有两篇关于表格问答算法和落地产品的文章,下一期将会先介绍来自微软的两个相继在 WikiSQL 获得 SOTA 成绩的模型 HydraNet 和 X-SQL,不要错过哦。
参考资料
[1]
你已经是个成熟的表格了,该学会自然语言处理了: https://www.msra.cn/zh-cn/news/features/table-intelligence
[2]
WikiSQL数据集: https://github.com/salesforce/WikiSQL
[3]
Spider数据集: https://yale-lily.github.io/spider
[4]
中文NL2SQL挑战赛: https://tianchi.aliyun.com/competition/entrance/231716/introduction?spm=5176.12281957.1004.7.38b02448CvVgo8
[5]
中文NL2SQL挑战赛冠军方案: https://github.com/nudtnlp/tianchi-nl2sql-top1/blob/master/%E5%A4%A9%E6%B1%A0NL2SQL%E5%86%A0%E5%86%9B%E6%96%B9%E6%A1%88.pdf
推荐阅读
AINLP年度阅读收藏清单
数学之美中盛赞的 Michael Collins 教授,他的NLP课程要不要收藏?
自动作诗机&藏头诗生成器:五言、七言、绝句、律诗全了
From Word Embeddings To Document Distances 阅读笔记
模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法
这门斯坦福大学自然语言处理经典入门课,我放到B站了
可解释性论文阅读笔记1-Tree Regularization
征稿启示 | 稿费+GPU算力+星球嘉宾一个都不少
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。
id随机选择另一张表格的 sql_表格问答1:简介相关推荐
- php获取文章封面图片,Discuz!无图片文章中列表页自动提取图片随机选择一张作为封面 - 魔幻精灵の点滴记忆...
在门户列表页中,默认为党文章中包含有图片是选择第一张作为列表页上的封面.如下图: 但是有时候为了美观与一致性需要在文章里面没有包含图片时,封面照样显示图片.那怎么办? 方法(Discuz!X3.2亲测 ...
- 通过CSS,H5,JavaScript实现表格表单的随机选择,和简单的随机点名。
目录 一.表格表单的随机选择 效果展示(表单内容可以根据自己需要进行修改) 1.H5的布局 第一步: 第二步: 2.CSS布局 3.JS的布局 第一步: 第二步: 第三步: 二.简单的随机点名 效果展 ...
- 【更新!】3dMax材质ID随机生成器插件MaterialIDsRandomGenerator v2.1.2使用教程
3DMAX材质ID随机生成器插件使用教程 [MIRG简介] 3DMAX材质ID随机生成器(英文:Material IDs Random Generator 缩写:MIRG),"彩虹系列&qu ...
- 计算机中表格怎么用英语说,电脑excel表格如何在表格中随机生成一个大写英文字母...
电脑excel表格如何在表格中随机生成一个大写英文字母 我们可以利用一个函数(在表格中随机生成大写字母)来帮助我们制作英文练习本,今天小编就告诉大家电脑excel表格如何在表格中随机生成一个大写英文字 ...
- 徒手撸一个好玩的App:随机选择图片
简介 做一个从多张图片中随机选择一张的App. 主要特性 支持倒计时 支持网络下载图片 支持改变图片背景框颜色 支持动画显示图片 效果图 下载地址 https://gitee.com/cxyzy1/s ...
- php判断数组不重复的元素,php从数组中随机选择若干不重复元素
php从数组中随机选择若干唯一元素 /* * $array = the array to be filtered * $total = the maximum number of items to r ...
- 528. 按权重随机选择
528. 按权重随机选择
- php数组选择随机元素,php 数组随机选择一个元素显示的简单示例
这篇文章主要为大家详细介绍了php 数组随机选择一个元素显示的简单示例,具有一定的参考价值,可以用来参考一下. 本代码演示了如何从php数组中随机选择一个元素显示,感兴趣的小伙伴,下面一起跟随512笔 ...
- EL之RF(随机性的Bagging+DTR):利用随机选择属性的bagging方法解决回归(对多变量的数据集+实数值评分预测)问题
EL之RF(随机性的Bagging+DTR):利用随机选择属性的bagging方法解决回归(对多变量的数据集+实数值评分预测)问题 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 f ...
最新文章
- 推荐7个看似简约,实则惊艳的实用软件,建议收藏!
- 使用rel=noopener
- 一个就简单的数学题 NYOJ 330
- android 代码 日历 重复事件设置,日历重复/重复事件 - 最佳存储方法
- 2020Alibaba数学预选赛第2轮试题
- (转载)20分钟读懂程序集
- 爬了知乎200万数据,图说程序员都喜欢去哪儿工作~
- MySQL 跳过权限校验
- Emacs编辑Nginx
- 对SIL9022/9024的配置
- esp32 python开发环境搭建_ESP32:搭建Ubuntu开发环境
- 还原 idea undo commit
- 一个炫酷的个人网站带后台
- rda分析怎么做_PCA、PCoA、NMDS 、RDA和CCA等排序分析方法
- 管理信息系统(MIS)概述
- java文件服务,苹果相关浏览器文件名乱码而其他例如谷歌浏览器不乱码
- 牛腩——遇到的问题总结
- 知识变现海哥|知识变现需要使用哪些工具
- NFT Insider #54:BreederDAO将开启公募,游戏巨头万代南梦宫、育碧入局元宇宙
- [电脑问题1]Microsoft Visual Basic运行时错误‘-2147221164’:没有注册类
热门文章
- Android开发之The application could not be installed: INSTALL_FAILED_VERSION_DOWNGRADE报错
- Android开发之EditText输入显示文字hint大小设置
- 虚拟主机搭建微信公众号服务器,建web服务器同时如何搭建虚拟主机?方法有几种?...
- mongoDB 小练习
- AspectJ在Android中使用(AOP)
- python连接中控考勤机分析数据
- PD生成SQL脚本附带注释命令
- JS之函数实际参数转换成数组的方法[].slice.call(arguments)
- MySQL远程工具链接报错—1130
- 【UIKit】UITableView 3