【Text2SQL 经典模型】TypeSQL

论文:TypeSQL: Knowledge-Based Type-Aware Neural Text-to-SQL Generation

⭐⭐⭐

Code: TypeSQL | GitHub

一、论文速读

本论文是在 SQLNet 网络上做的改进,其思路也是先预先构建一个 SQL sketch,然后再填充 slots 从而生成 SQL。

论文发现:在 question 中往往包含与特定数据相关的 rare entity 和 number,这对于在 SQL 查询中推断 column name 和 WHERE condition value 很重要,但这些 entity 和 number 缺乏准确的 embedding。为了解决这个问题,本工作为 question 的每个 word 分配了一个 type:知识图谱中的 entity、“COLUMN” 或者一个 number,如下图的最下面的 input 所示,为 question 的每个 word 都分配了一个 type:

具体来说,首先对 question 做分词,切分成长度为 2~6 的 n-grams,然后:

  • 使用 gram 检索数据库的 table schema,如果能检索到相应的 column name,那就将其 type 标注为 COLUMN
  • 为 number 和 date 标注为以下四个类别之一:INTEGERFLOARDAREYEAR
  • 为了识别命名实体,用 gram 作为 keyword 在 Freebase 上做检索五类实体:PERSONPLACECOUNTRYORGANIZATIONSPORT,并做相应的 type 标注,这五类实体已经可以覆盖了数据集中的绝大多数实体

由此,我们才可以看到上图中对 question 的 type 标注结果。

拓展来开的话,如果 database 的内容也可以访问,那我们在做 type 标注时,还会将 gram 从 table schema、column content 和 column label 中做检索,并将 type 标注为具体的 column name。比如上图中,question 中的 mort drucker 可以被标注为 artist,因为我们能在数据库中检索到这个 gram 并发现对应的 column name 为 artist

对 question 做完 type 标注后,在之后做编码时,就可以将 question 中的原 token 和对应的 type 一起做 embedding,并将两个 embedding 连接在一起做 encode 并进一步处理。

在之后填充 SQL sketch 做 slots 预测时,原来的 SQLNet 模型是为五种 slots 设计了五个 model 来分别训练和预测,而本文的 TypeSQL 将其中功能相似的 model 做了合并,最终只需要 3 个 model 来完成填充任务,架构上做了简化。具体公式可以参考原论文。

二、总结

这篇论文的工作主要是对 SQLNet 做的改进,改进主要有如下:

  • 借助于数据库的 table schema 检索和 knowledge graph 的检索,为 question 的每个 word 标注一个 type,从而提高 embedding 的效果
  • 当 database content 可用时,type 标注时还会进一步对 column content 做检索,并为其标注 column name,这样当用户的 question 中的所提到的列名或者条目不精确时,也可以通过这个步骤来对应到具体的数据库 column,从而提高效果,实现所谓的“内容敏感性”。
  • 改进了 SQLNet 的 slots 填充步骤,减少了所需要的 model 数量,架构上也做了简化
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于 Django + Layui + 原生 SQL 语句实现登录的详细步骤: 1. 创建 Django 项目并安装必要的包,包括 Django、pymysql 等。可以使用以下命令创建一个名为 myproject 的 Django 项目: ``` django-admin startproject myproject ``` 2. 在 myproject 项目中创建一个名为 login 的应用程序,可以使用以下命令: ``` python manage.py startapp login ``` 3. 在 login 应用程序中创建一个名为 models.py 的文件,并定义一个 User 模型,其中包含用户名和密码: ```python from django.db import models class User(models.Model): username = models.CharField(max_length=50) password = models.CharField(max_length=50) ``` 4. 在 myproject 项目的 settings.py 文件中配置数据库连接,例如使用 MySQL 数据库: ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'myproject', 'USER': 'root', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '3306', } } ``` 5. 在 login 应用程序中创建一个名为 views.py 的文件,并编写一个名为 login 的视图函数,用于处理登录请求: ```python from django.shortcuts import render from django.http import JsonResponse from django.db import connection def login(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') with connection.cursor() as cursor: cursor.execute('SELECT * FROM login_user WHERE username=%s AND password=%s', [username, password]) user = cursor.fetchone() if user: # 登录成功 return JsonResponse({'code': 0, 'msg': '登录成功'}) else: # 登录失败 return JsonResponse({'code': 1, 'msg': '用户名或密码错误'}) else: return render(request, 'login.html') ``` 6. 在 login 应用程序中创建一个名为 templates 的文件夹,并在其中创建一个名为 login.html 的模板文件,用于显示登录页面: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录</title> <link rel="stylesheet" href="{% static 'layui/css/layui.css' %}"> </head> <body> <div class="layui-container"> <div class="layui-row layui-col-space15"> <div class="layui-col-md6 layui-col-md-offset3"> <form class="layui-form" action="{% url 'login' %}" method="post"> {% csrf_token %} <div class="layui-form-item"> <label class="layui-form-label">用户名</label> <div class="layui-input-block"> <input type="text" name="username" required lay-verify="required" placeholder="请输入用户名" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">密码</label> <div class="layui-input-block"> <input type="password" name="password" required lay-verify="required" placeholder="请输入密码" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn" lay-submit lay-filter="login">登录</button> </div> </div> </form> </div> </div> </div> <script src="{% static 'layui/layui.js' %}"></script> <script> layui.use(['form'], function(){ var form = layui.form, $ = layui.jquery; }); </script> </body> </html> ``` 7. 在 myproject 项目中的 urls.py 文件中配置路由,例如: ```python from django.urls import path from login import views urlpatterns = [ path('login/', views.login, name='login'), ] ``` 8. 运行 Django 项目并访问登录页面,例如: ``` python manage.py runserver ``` 然后在浏览器中访问 http://localhost:8000/login/ 即可看到登录页面。 以上就是一个基于 Django + Layui + 原生 SQL 语句实现登录的详细步骤。希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值