文章目录
by archimekai@csdn 转载请注明出处
零、难度的含义
笔者将NL2SQL的难度定义为,给定元数据,数据,自然语言查询,一百名五年经验的人类数据分析专家(之前不知道这些元数据和数据),在一天内能有多大比例的人写出自然语言查询所对应的正确SQL(查询结果正确即可)。用100%减去这个概率,得到难度。例如难度为99(%),就意味着只有一名人类专家能写对。难度为0,就意味着所有的人类专家都能写对。
一、元数据的难度
元数据的规模
数据库、表、列、枚举值越多,难度越大。
知识库是否存在知识缺失
指编写SQL所必须的知识,是否在元数据和知识库中不存在。
知识库中是否明确指出了歧义项的理解方式
未指明的歧义项越多,难度越大。注意基于代码的业务中是不存在歧义的,因为代码的每次运行,结果都是唯一的(假设代码结果正确的话)。
元数据是否存在自相矛盾? 自相矛盾越多,难度越大
二、数据的难度
数据是什么样的,决定了SQL需要写得多复杂。干净的数据上,多种SQL的写法都能得到正确的结果。在质量不够高的数据上,必须精确地使用各种SQL功能(DISTINCT, CASE WHEN, 自定义函数等等)才能得到想要的结果。
三、自然语言查询的难度
维度一:自然语言是否定义完整、清晰、无歧义
综合考虑知识库,上下文,用户查询后,查询是否定义完整、清晰、无歧义
维度二:自然语言中歧义的性质和数量如何
如果定义完整,但是有歧义,歧义的性质和数量如何
四、Ground Truth SQL的难度
维度一:SQL语法结构的个数及难度
SQL语句的长度(例如bird论文中的描述)
包括每个SQL中的token数,关键字个数,不相同的n-gram个数,以及join的个数


Join表的个数,每个Join的条件
子查询
是否含有DDL,DML
维度二:SQL的执行速度
执行速度的要求越快,难度越大
&spm=1001.2101.3001.5002&articleId=154474270&d=1&t=3&u=d6e736315eda4b7680374deb9cbdca0d)
1017

被折叠的 条评论
为什么被折叠?



