百度语义解析 ( Text-to-SQL ) 技术研究及应用( 四 )



百度语义解析 ( Text-to-SQL ) 技术研究及应用
本文插图
表1
其中CSpider数据集是英文数据集Spider的翻译版本 , 中英文化差异导致问题用语和知识上存在差异 , 比如行政区划相关的数据在Spider数据集上表示为“州、县、市”等 , 在CSpider数据集上则表示为“省、市、县”等 , 这种差异性降低了该数据集在实际应用中的价值 。
NL2SQL数据集中的问题相对简单 , 问题类型为基于单/多条件查询匹配的答案检索 , 能够解决如“3000元以下的手机有哪些”等简单问题 , 但无法解决“便宜的手机有哪些”、“苹果8手机256G比128G贵多少”这样较难的问题 。 在实际应用中 , 后种难度较高的问题占比很高 , 尤其是在商业智能(BI)和购物相关咨询的业务中 。
我们从实际应用中随机抽取用户问题 , 就问题解决所需要的操作对问题类型进行了人工分析 , 结果如表2所示 , 可以看出涉及到计算、排序、比较等操作的问题有一定的占比 。
百度语义解析 ( Text-to-SQL ) 技术研究及应用
本文插图
表2
为了更好地理解这些问题类型 , 我们列举了一些问题类型及对应的问题实例(数据库见上篇图1) , 见表3:
百度语义解析 ( Text-to-SQL ) 技术研究及应用
本文插图
表3: 问题类型及实例
为了更好地覆盖实际应用中常见的问题类型 , 使构建的数据集在实际应用中发挥更大的价值 , 我们基于实际应用分析构建了多领域、多表、包含复杂问题的数据集DuSQL 。
数据集构建主要分为两大步骤:数据库构建和<问题 , SQL查询语句>构建 。 在数据库构建中 , 要保证数据库覆盖的领域足够广泛 , 在<问题, SQL查询语句>构建中 , 要保证覆盖实际应用中常见的问题类型 。
数据库主要来自百科(包括三元组数据和百科页面中的表格)、权威网站(如国家统计局、天眼查、中国产业信息网、中关村在线等)、各行业年度报告以及论坛(如贴吧)等 。
从这些网站挖掘到表格后 , 我们按表格的表头对同类表格进行了聚类 , 并根据表格中的实体链接等信息构建表格之间的关联 , 最终保留了813张表格 , 分为200个数据库 。 由于很多表格的内容较敏感 , 我们仅使用了表格的表头 , 对表格内容进行了随机填充 , 无法保证事实性 。
基于一个半自动方案构建<问题, SQL查询语句> , 首先需要基于SQL文法自动生成SQL查询语句和对应的伪语言问题描述 , 然后通过众包方式将伪语言问题描述改写为自然语言问题 。 在自动生成SQL查询语句时 , 我们设计了覆盖所有常见问题类型的SQL规约文法 , 最终构建了近2.4万的数据 。
表4展示了DuSQL数据集与其他多领域数据集的对比情况 。 其中 , 时间计算属于常数计算 , 引入常量TIME_NOW(表示当前时间) , 比如数据库Schema为“{公司名称, 成立年份, 员工数, …}” , 问题为“XX公司成立多少年了” ,SQL查询语句为“Select TIME_NOW – 成立年份 Where 公司名称=XX” 。 在实际应用中 , 常数计算中的时间计算需求较大 , 因此我们构建了相关数据 。
百度语义解析 ( Text-to-SQL ) 技术研究及应用
本文插图
表4:CSpider来自Spider训练集和开发集的翻译 , 其统计使用Spider的统计
2. 模型DuParser
基于实际应用 , 百度研发了一种基于表格元素识别和文法组合的解析算法DuParser , 要求其在实际应用中能够基于用户提供的数据或反馈达到快速迭代、效果可解释、可控的要求 , 解析算法框架见图5(对应的实例见图6 , 不同颜色的箭头表示了流程中各模块对应输入输出) 。


推荐阅读