初体验 我的名片

NLP2SQL技术简介

一、NLP2SQL 介绍

什么是Nlp2sql?就是用户可以用自然语言表达,完成复杂数据库查询动作。比如,用户说“查查我的购物记录,去年我买了几双鞋”“今天李小明老师的课出勤率是多少”“去年西安空气严重污染的天数是多少天”等等,系统从sql数据库中计算出结果,给用户唯一答案“3双”“80%”“0天”。

这件事的难度在于先得分析准确用户语义。“昨天过生日的用户都有谁”“昨天有几个用户过生日”这两句话很多厂商分不清,我们氖星智能可以。其次得准确知道用户的意图需要查哪张表哪个数据项才是正确的。第三有时候是查询有时候是统计,得分清楚。第四数据是动态的、可维护的,并且得支持各种问法。所以程序不能写死,写死就无法维护了。

我们氖星智能有一套算法,完美支持nlp2sql。已经在多个领域应用起来了。目前能做nlp2sql的厂家还不多,能做得好的可能还没有。

二、NLP2SQL 应用

在这个界面上操作,极大地限制了数据库查询的使用场景和查询界限。同时,即使对于精通数据库程序语言的专业人士,经常构思 SQL 语句、维护这样一个查询界面也是一项重复度较高的工作。

在人工智能的大量应用的背景下,如何通过自然语言自由地查询数据库中的目标数据成为了新兴的研究热点。NLP2SQL 就是这样的一项技术,它可以将用户的自然语句转为可以执行的 SQL 语句。

针对上图这样的数据库表格,用户可能会想知道「宝马的车总共卖了多少辆?」,其相应的 SQL 表达式是「SELECT SUM(销量) FROM TABLE WHERE 品牌==」宝马」;」。而 NLP2SQL 做的,就是结合用户想要查询的表格,将用户的问句转化为相应的 SQL 语句,从而得到答案「8」

比如下面这张出自某房地产行业研报的表格:

针对这张表格,用户可能会想问「哪些城市的全月销量同比超过了 50% 或者当日环比大于 25%?相应的房产类型和销售面积情况如何?」这样的问题。通过 NLP2SQL 模型,可以直接得到相应的 SQL 语句「select 城市, 类型, 全月数值 (万平) from table where 全月同比 (%) > 50 or 当日环比 (%) > 25」,并进一步返回执行该 SQL 语句后的结果,如下表所示:

如今,在很多日常应用场景中,用户都会和数据库进行交互,比如订餐、订票、查天气、查报表等等,绝大部分的解决方案也是通过输入条件和点选条件来进行查询。即使部分场景已经进行了技术升级,可以通过对话机器人的方式来进行交互,但其背后仍然预设了不同的条件入口,需要模型通过一系列的实体识别、槽值提取等流程来填充预先规定好的 SQL 模板。对于这样的方案,不仅查询的信息和筛选的条件会局限于预先设好的字段,这些功能模块的开发和维护也需要大量的人力资源。而如果使用 NLP2SQL 的技术方案,用户与数据库之间的距离可以进一步缩短,用户可以更自由地查询更多信息、表达自己更丰富的查询意图,还可以减轻目前技术方案的繁琐,解放程序员。

三、NLP2SQL 未来

WikiSQL 数据集虽然是目前规模最大的有监督数据集,但其数据形式和难度过于简单:对于 SQL 语句,条件的表达只支持最基础的>、<、= 、条件之间的关系只有 and,不支持聚组、排序、嵌套等其它众多常用的 SQL 语法,不需要联合多表查询答案,真实答案所在表格已知等,所以在这个数据集上,SQL 执行结果的准确率目前已经达到了 91.8%。

但存在一个问题,这样的数据集并不符合真实的应用场景。在真实场景中,用户问题中的值很可能不是数据表中所出现的,需要一定的泛化才可以匹配到;真实的表之间存在错综复杂的键关联关系,想要得到真实答案,通常需要联合多张表进行查询;每张表都有不同的意义,并且每张表中列的意义也各不不同,甚至可能相同名字的列在不同的表格中所代表的含义也是不同的;真实场景中,用户的问题表达会很丰富,会使用各种各样的条件来筛选数据。诸如此类的实际因素还有很多。因此,WikiSQL 数据集起到的作用很大程度上是抛砖引玉,而不具备实际应用场景落地的价值。

相比之下,Spider 等数据集更贴近真实应用场景:涉及到查询语句嵌套、多表联合查询,并且支持几乎所有 SQL 语法的用法,用户问句的表达方式和语义信息也更丰富。但即使作者们考虑到数据集的难度,贴心地将数据集按照难度分为简单、中等和困难,该数据集的难度也依然让人望而生畏,目前各项指标也都很低。如何更好地结合数据库信息来理解并表达用户语句的语义、如何编码及表达数据库的信息、如何生成复杂却有必要的 SQL 语句,此类挑战还有很多需要解决,它们都是非常值得探索的方向。

现在很多 NLP 子任务的指标已经刷得让人无路可走了,低垂的果实被摘得七零八落。而 NLP2SQL 以及其它的语义分析任务,因为各种各样的原因,现在还没有引起大家足够的关注,但它们有着相比于其它任务更高的实际应用价值。如果可以落地真实场景,这将极大地改变现有的用户和数据库之间的交互方式,人们可以自由地和数据库进行交互,充分挖掘数据的价值,也减轻程序员的负担

四、使用说明

第一步:登录小谛机器人官网,点击“登录”按钮,进行注册或登录。

第二步:点击官网“解决方案”模块,下拉菜单选择“NLP2SQL”功能,进入产品介绍。

第三步:选择自己感兴趣的行业测试账号,进行测试,如“美食宝宝”。

第四步:进入文本对话测试页面,客人输入需要的菜品等,右侧的点餐菜单列表会根据客人的输入做相应菜品数量和金额的同步更新,如下图所示:

第五步:登陆氖星数据管理链接,进入“菜谱管理”,可以“新增”和“删除”等菜品,如下图所示:

五、测试账号

六、数据管理