Seq2SQL属于natural language interface (NLI)的领域,方便普通用户接入并查询数据库中的内容,即用户不需要了解SQL语句,只需要通过自然语言,就可查询所需内容。
       Seq2SQL借鉴的是Seq2Seq的思想,与Seq2Seq应用于机器翻译与Chatbot类似,Seq2SQL将输入的语句encode后再decode成结构化的SQL语言输出,强化学习是在Seq2SQL中的最后一个模块中应用。同时,这篇论文还推出一个数据集WikiSQL,数据集内有人工标注好的问句及其对应SQL语句。
         试验结果显示,Seq2SQL的准确率也不是特别的高,只有60.3%
 
 

      Seq2SQL结构:
     
 
       Seq2SQL由三部分组成:
    第一部分:  Aggregation classifier    这一部分其实是一个分类器,将用户输入的语句分类成是select count/max/min 等统计相关的约束条件
    在此处采用的Augmented Pointer Network,Augmented Pointer Network总体而言也是ecoder-to-decoder的结构,
    encoder采用的是两层的bi-LSTM, decoder 采用的是两层的unidirectional LSTM,
    encoder输出h,ht对应的是第t个词的输出状态
    decoder的每一步是,输入y s-1,输出状态gs,接着,decoder为每个位置t生成一个attention的score
   ,最终生成 
     在Seq2SQL中,首先为input生成一个表征向量(agg:aggregation clasifier, inp:input,enc:encoder)
 

首先为Augmented Pointer Network类似,计算出一个attention的分数,

      量化后,通过softmax函数 
      input的表征向量 
      通过一个多层的网络和softmax完成分类任务
             
    第二部分: select column   这一部分是看用户输入的问句命中了哪个column
     首先将每个column name 通过LSTM encode
     将用户输入encode成与第一部分类似的
     最终通过一个多层的神经元和softmax确定是命中哪一行
     
      
   第三部分:where clause  确定约束条件,因为最终生成的SQL可能与标注中的不太一样,但是依旧有一样的结果,所以不能像前两部分一样使用交叉熵作为loss训练,因此使用强化训练中reward函数 (g: ground-truth), loss使用梯度

 

 

WikiSQL:

    WikiSQL包含一系列与SQL相关的问题集以及SQL table
    

 

 

 
 
 


 
 

 
    






























       

Seq2SQL :使用强化学习通过自然语言生成SQL的更多相关文章

  1. 强化学习(三)用动态规划(DP)求解

    在强化学习(二)马尔科夫决策过程(MDP)中,我们讨论了用马尔科夫假设来简化强化学习模型的复杂度,这一篇我们在马尔科夫假设和贝尔曼方程的基础上讨论使用动态规划(Dynamic Programming, ...

  2. 【转载】 “强化学习之父”萨顿:预测学习马上要火,AI将帮我们理解人类意识

    原文地址: https://yq.aliyun.com/articles/400366 本文来自AI新媒体量子位(QbitAI)     ------------------------------- ...

  3. ICML 2018 | 从强化学习到生成模型:40篇值得一读的论文

    https://blog.csdn.net/y80gDg1/article/details/81463731 感谢阅读腾讯AI Lab微信号第34篇文章.当地时间 7 月 10-15 日,第 35 届 ...

  4. (转) 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文)

    本文转自:http://mp.weixin.qq.com/s/aAHbybdbs_GtY8OyU6h5WA 专题 | 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文) 原创 201 ...

  5. 强化学习7-Sarsa

    之前讲到时序差分是目前主流强化学习的基本思路,这节就学习一下主流算法之一 Sarsa模型. Sarsa 是免模型的控制算法,是通过更新状态动作价值函数来得到最优策略的方法. 更新方法 Q(S,A)=Q ...

  6. 【转载】 强化学习(三)用动态规划(DP)求解

    原文地址: https://www.cnblogs.com/pinard/p/9463815.html ------------------------------------------------ ...

  7. 强化学习论文(Scalable agent alignment via reward modeling: a research direction)

     原文地址: https://arxiv.org/pdf/1811.07871.pdf ======================================================== ...

  8. 深度强化学习资料(视频+PPT+PDF下载)

    https://blog.csdn.net/Mbx8X9u/article/details/80780459 课程主页:http://rll.berkeley.edu/deeprlcourse/ 所有 ...

  9. 深度强化学习day01初探强化学习

    深度强化学习 基本概念 强化学习 强化学习(Reinforcement Learning)是机器学习的一个重要的分支,主要用来解决连续决策的问题.强化学习可以在复杂的.不确定的环境中学习如何实现我们设 ...

随机推荐

  1. JSF教程(8)——生命周期之Apply Request Values Phase

    当一个组件树在一个postbacks请求中被恢复之后其中每一个组件从request的參数中取得各自的值,这里使用的是processDecodes方法. 这个值会保存在本地的每一个组件中,在源代码中此过 ...

  2. VS2010编译OpenSSL(两个版本)

    第一个版本: 编译工具 VS2010 OpenSSL版本 openssl-1.0.0a 下载 OpenSSL http://www.openssl.org/ 下载 from http://www.ac ...

  3. MySQL系列:innodb源代码分析之线程并发同步机制

    innodb是一个多线程并发的存储引擎,内部的读写都是用多线程来实现的,所以innodb内部实现了一个比較高效的并发同步机制. innodb并没有直接使用系统提供的锁(latch)同步结构,而是对其进 ...

  4. centos部署Python环境

    在centos上部署Python之前,我们需要先配置开发环境. 1.安装Python依赖的开发工具包 gcc自然少不了,可以直接用“Development Tools”: yum grouplist ...

  5. 原创 | 我被面试官给虐懵了,竟然是因为我不懂Spring中的@Configuration

    GitHub 3.7k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 3.7k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 3.7k Star 的 ...

  6. python之脚本参数optparse

    import optparse usage = "myprog[ -f <filename>][-s <xyz>] arg1[,arg2..]" opter ...

  7. jQuery 标签切换----之选项卡的实现

    这一次,我自己写了代码,先看html部分: <div class="tab"> <div class="tab_menu"> <u ...

  8. programming review (c++): (2)binary tree, BFS, DFS, recursive, non-recursive

    1.二叉树定义 // Definition for a binary tree node. struct TreeNode { int val; TreeNode *left; TreeNode *r ...

  9. MySQL 优化1

    系统在应用时间很长的情况下会慢慢变得很慢,无论是人还是机器为了更好的工作和学习都需要适当学习.数据库也是一样的用久了, 自然就会产生空间碎片,需要我们都i数据库中的数据块进行维护和整理.下面以实例来说 ...

  10. Python 字符串操作(截取/替换/查找/分割)

    Python 截取字符串使用 变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾. # 例1:字符串截取 str = '1234567 ...