如何将SQL语句进行自动翻译

如何将SQL语句进行自动翻译

这里我们利用SQL-to-Text Generation with Graph-to-Sequence Model一文, 给大家简单介绍一下如何对SQL语句进行自动翻译

首先我们来谈谈这个动机, 我觉得最大的动机可能是为了让非技术人员可以了解SQL语句的意义, 进而提出来一种解决方案, 对SQL语句进行自动化的翻译.

说到自动化翻译, 其实就是自然语言处理方面的问题了, 那么之前就有人做过类似的工作, 比如使用规则, 或者模板进行严格形式的翻译

Georgia Koutrika, Alkis Simitsis, and Yannis E Ioannidis. 2010. Explaining structured queries in natural language. In Data Engineering (ICDE), 2010 IEEE 26th International Conference on, pages 333–344. IEEE

利用规则的翻译很显然是十分僵硬的, 也就是说, 翻译出来的东西不流畅, 不想自然语言, 那么在神经网络盛行的今天, 很快就有人提出了, 直接使用Seq2Seq模型来进行翻译, 这个Seq就是Sequence, 序列的意思, 或者Tree2Seq的模型, 我们用RNN或者LSTM可以对语言进行编码, 序列化, 然后再用一个RNN或者LSTM进行解码, 得到翻译结果, 当然这是最简单的编码解码的框架, 实际上可能复杂一点.

但是, 由于序列并不能很好的说明一些内部的结构信息, 举个例子

SELECT company WHERE assets > val0 AND sales > val0 AND industry_rank <= val2 AND revenue = val3

翻译: which company has both the market value and assets higher than val0, ranking in top val2 and revenue of val3

如果是序列的话, 很有可能就翻译不出both the market value and assets higher than val0, 要察觉相同的作用的词在一个序列中其实是困难的, 而如果我们先转换成图结构, 那就简单多了.

图结构

故, 给出这么一个框架:

  • 首先, 我们有SQL语句, 作为输入
  • 将SQL语句转换成一个有向图
  • 再通过Graph2Seq模型, 将有向图翻译出来
    • 利用每个点的k跳个邻居节点进行点嵌入的编码
    • 利用所有点的点嵌入生成全局的嵌入
    • 利用全局嵌入进行解码得到最后的翻译结果

下面我们讲讲如何进行有向图的转换

有向图的转换

将SQL语句转换成有向图其实十分简单, 我们关注于两个句法:

  • SELECT句法 我们将为SELECT a这样的句子, 创建一个SELECT节点和一个a节点, 注意到每一个节点都是有一个文本属性, 我们直接将其文本属性赋值为其名字. 注意到可能会有一些聚集选项, 比如你可能是COUNT, MAX这样的, 我们直接创建一个节点连上相应的列节点, 文本属性为相应的聚集名称.
  • WHERE句法 WHERE可能有很多条件, 如上图所示, 我们将创建许多个条件节点, 然后用AND, OR, NOT这样的逻辑节点来进行连接, 最终全部都连到SELECT节点上.

这里的Graph2Seq模型参考自Kun Xu, Lingfei Wu, Zhiguo Wang, and VadimSheinin. 2018. Graph2seq: Graph to sequence learning with attention-based neural networks. arXiv preprint arXiv:1804.00823

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏生信技能树

二代测序数据拼接之原理篇

前前后后接触了一些基因组和转录组拼接的工作,而且后期还会持续进行。期间遇到了各种各样莫名其妙的坑,也尝试了一些不同的方法和软件,简单做一个阶段性小结,本篇是原理...

1.4K4
来自专栏数据结构与算法

扩展中国剩余定理详解

前言 阅读本文前,推荐先学一下中国剩余定理。其实不学也无所谓,毕竟两者没啥关系 扩展CRT 我们知道,中国剩余定理是用来解同余方程组 但是有一个非常令...

3109
来自专栏杨熹的专栏

中文分词常用方法简述

中文分词 就是将一句话分解成一个词一个词,英文中可以用空格来做,而中文需要用一些技术来处理。 三类分词算法: 1. 基于字符串匹配: 将汉字串与词典中的词进行匹...

4438
来自专栏程序员叨叨叨

7.1 Cg 关键字第 7 章 输入\输出与语义绑定

第三章从 GPU 运行原理和数据流程的角度阐述了顶点着色程序和片段着色程序的输入输出,即,应用程序(宿主程序)将图元信息(顶点位置、法向量、纹理坐标等)传递给顶...

1483
来自专栏老马说编程

(34) 随机 / 计算机程序的思维逻辑

随机 本节,我们来讨论随机,随机是计算机程序中一个非常常见的需求,比如说: 各种游戏中有大量的随机,比如扑克游戏洗牌 微信抢红包,抢的红包金额是随机的 北京购...

2596
来自专栏落影的专栏

iOS开发-OpenGL ES入门教程4

教程 OpenGL ES入门教程1-Tutorial01-GLKit OpenGL ES入门教程2-Tutorial02-shader入门 OpenGL E...

3365
来自专栏xingoo, 一个梦想做发明家的程序员

推荐系统那点事 —— 基于Spark MLlib的特征选择

在机器学习中,一般都会按照下面几个步骤:特征提取、数据预处理、特征选择、模型训练、检验优化。那么特征的选择就很关键了,一般模型最后效果的好坏往往都是跟特征的选...

2709
来自专栏数据的力量

一大波常用函数公式,值得收藏!

1584
来自专栏IT派

干货 | PyTorch相比TensorFlow,存在哪些自身优势?

1、 PyTorch 课替代NumPy 使用:PyTorch 本身主要构件是张量——和 NumPy 看起来差不多。使得 PyTorch 可支持大量相同的 API...

1.4K4
来自专栏量子位

谷歌云TPU上可以用Julia啦!0.23秒跑100张图片,Jeff Dean点赞推荐

不久前,Julia Computing官方放出了一篇论文,展示将Julia代码和机器学习模型编译到谷歌云TPU的方法,可以实现在0.23秒内完成100张图片VG...

1223

扫码关注云+社区

领取腾讯云代金券