昇思AI框架实践2:基于T5的SQL语句生成模型推理

news2024/11/16 1:23:50

 MindSpore 基于T5的SQL语句生成项目实施

基于T5的SQL语句生成项目介绍

  • 本项目旨在开发一个基于T5-small模型的自然语言转SQL语句生成器。该生成器能够将用户以自然语言形式提出的查询请求转换为对应的SQL查询语句,从而使得即使是不熟悉SQL语言的用户也能够轻松地从数据库中检索所需信息。
  • 本项目使用HuggingFace中经过大量英文语料预训练的T5-small模型并对其模型迁移,将其变为MindSpore可用的模型。

项目地址:昇思大模型平台

 

项目mindspore环境安装,参见:昇思AI框架实践1:安装MindSpoe和MindFormers-CSDN博客

 

 下载基于T5的SQL语句生成模型

项目地址:昇思大模型平台

模型文件下载地址:昇思大模型平台 

前面走了弯路,使用git clone下载了模型。其实mindformers支持自动下载模型,所以只要在代码里设定好模型的名字为t5_small即可

import mindspore
from mindformers import T5ForConditionalGeneration, T5Tokenizer


t5 = T5ForConditionalGeneration.from_pretrained(”t5_small“)

使用git下载模型(不必须)

模型位置:昇思大模型平台

使用git下载

git clone https://source-xihe-mindspore.osinfra.cn/zhanglingyun2023/Text2SQL_model.git

MindSpoe模型推理lenet模型例子

加载lenet模型例子

from mindspore import load_checkpoint, Tensor
from mindspore.common import set_seed
from mindvision.classification.models import lenet
from mindspore.train import Model

# 定义模型
net = lenet(num_classes=10, pretrained=False)

# 加载参数
param_dict = load_checkpoint("./lenet/lenet-1_1875.ckpt")

# 将参数加载到模型中
load_param_into_net(net, param_dict)

 推理lenet模型

# 假设data是一个包含输入数据的字典,labels是实际标签
output = model.predict(Tensor(data['image']))
predicted = np.argmax(output.asnumpy(), axis=1)
print(f'Predicted: "{predicted}", Actual: "{labels}"')

后来发现可以直接用MindFormers推理,非常简单方便。

使用MindFormers推理 

MindFormers里面给的例子:

python run_mindformer.py --config {CONFIG_PATH} --run_mode {train/finetune/eval/predict}

根据这个例子,改写的命令应该是:

python mindformers/run_mindformer.py --config Text2SQL_model/text2sql.yaml --run_mode Text2SQL_model/text2sql.ckpt

后来发现了该项目里面gradio app的例子代码,参考该代码,MindFormers在python里面使用起来更简单方便。

项目中的gradio app例子代码

import gradio as gr
import mindspore
from mindformers import T5ForConditionalGeneration, T5Tokenizer

model_path = './'
t5 = T5ForConditionalGeneration.from_pretrained(model_path)
tokenizer = T5Tokenizer.from_pretrained("t5_small")
t5.set_train(False)
mindspore.set_context(mode=0, device_id=0)

def generate_SQL(text):
    text = "translate English to SQL: %s </s>" % text
    inputs = tokenizer(text)
    outputs = t5.generate(inputs["input_ids"],do_sample=False)
    response = tokenizer.decode(outputs,skip_special_tokens=True)[0]
    return response

# 创建 Gradio 界面
iface = gr.Interface(
    fn=generate_SQL,
    inputs=[
        gr.Textbox(lines=2, placeholder="请输入需求"),
    ],
    outputs=gr.Textbox(),
    title="SQL语句生成器",
    description="请输入英文需求,自动生成SQL语句。\n 例如:Search for the names of all employees over the age of 30。"
)

# 运行应用程序
iface.launch()

经过测试,发现可以直接在t5 = T5ForConditionalGeneration.from_pretrained(model_path) 这句话里写模型名字,如:t5 = T5ForConditionalGeneration.from_pretrained("t5_small")系统会自动下载模型。当然也可以像例子那样写,手工下载模型文件到相应的目录。

根据例子代码改写的推理代码

如果没有手工下载模型,那就在设置里写上模型名字"t5_small"即可。

t5 = T5ForConditionalGeneration.from_pretrained(”t5_small“)

tokenizer = T5Tokenizer.from_pretrained("t5_small")

import mindspore
from mindformers import T5ForConditionalGeneration, T5Tokenizer

# model_path = './'
# t5 = T5ForConditionalGeneration.from_pretrained(model_path)
t5 = T5ForConditionalGeneration.from_pretrained("t5_small")
tokenizer = T5Tokenizer.from_pretrained("t5_small")
t5.set_train(False)
mindspore.set_context(mode=1, device_id=0)

def generate_SQL(text):
    text = "translate English to SQL: %s </s>" % text
    inputs = tokenizer(text)
    outputs = t5.generate(inputs["input_ids"],do_sample=False)
    response = tokenizer.decode(outputs,skip_special_tokens=True)[0]
    return response

description="请输入英文需求,自动生成SQL语句。\n 例如:Search for the names of all employees over the age of 30。"
inputs = input(description)
output = generate_SQL(inputs)
print (output)
while True:
    inputs = input(description)
    if inputs=="q" or inputs=="0" :
        break
    output = generate_SQL(inputs)
    print(output)

推理结果

2024-08-29 13:30:48,564 - mindformers[mindformers/generation/text_generator.py:478] - INFO - total time: 19.149714946746826 s; generated tokens: 13 tokens; generate speed: 0.678861279979964 tokens/s

SELECT User FROM table WHERE Name = hello

共计用时19秒,在cpu下速度算是可以了。

问题:Search for the names of all employees over the age of 30。"

回答:SELECT Name FROM table WHERE Label = "Stu_Db" AND Age > 30

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2086153.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java EE】JVM

目录 1. JVM简介 2.JVM运行流程 3.JVM运行时数据区 3.1 堆&#xff08;线程共享&#xff09; 3.2 Java虚拟机栈&#xff08;线程私有&#xff09; 1. JVM简介 JVM是 Java Virtual Machine 的简称&#xff0c;意为Java虚拟机。 虚拟机是指通过软件模拟的具有完整硬件功能的…

马克·古尔曼:预计苹果新款Macs要到10月才会发布

马克古尔曼当地时间8月24日在社交媒体平台推特平台发文称&#xff0c;从以往模式来看&#xff0c;预计苹果公司新款Mac要到10月才会发布。 古尔曼称&#xff0c;预计Mac mini将是今年最值得关注的、配置M4芯片的Mac&#xff0c;但预计苹果还会发布新款MacBook Pro。他表示&…

【Qt】网格布局管理器QGridLayout

网格布局管理器QGridLayout Qt中提供QGridLayout用来实现网格布局的效果。 核心属性 整体和 QVBoxLayout 以及 QHBoxLayout 相似. 但是设置 spacing 的时候是按照垂直⽔平两个 ⽅向来设置的. 属性说明 layoutLeftMargin 左侧边距 layoutRightMargin 右侧边距 layoutTo…

类与Object.create之间的继承

前言 ● 下面是一段之前学习Object.create的一段代码 const PersonProto {calcAge() {console.log(2037 - this.birthYear);},init(firstName, birthYear) {this.firstName firstName;this.birthYear birthYear;} };const zhangsan Object.create(PersonProto); ● 和之前…

day-43 括号生成

思路 通过深度优先遍历&#xff0c;把所有可能的组合枚举出来&#xff0c;然后依次判断是否符合括号规则&#xff0c;符合则加入链表 解题过程 判断是否括号规则&#xff1a;第一个位置只能是(&#xff0c;维护一个val值(初始值为0)&#xff0c;遍历字符串&#xff0c;每当加入…

深度强化学习算法(四)(附带MATLAB程序)

深度强化学习&#xff08;Deep Reinforcement Learning, DRL&#xff09;结合了深度学习和强化学习的优点&#xff0c;能够处理具有高维状态和动作空间的复杂任务。它的核心思想是利用深度神经网络来逼近强化学习中的策略函数和价值函数&#xff0c;从而提高学习能力和决策效率…

【项目日记】高并发内存池---实现线程缓存

比起那些用大嗓门企图压制世界的人&#xff0c; 让全世界都安静下来听你小声说话的人更可畏。 --- 韩寒 《告白与告别》--- 高并发内存池项目---实现线程缓存 1 框架设计2 自由链表类和哈希规则2.1 自由链表类2.2 映射规则 3 实现线程缓存3.1 申请内存3.2 释放内存 4 多线程…

day-43 盛最多水的容器

思路 双指针&#xff1a;首先令i0,jheight.length-1,选取短板&#xff08;即Math.min(height[i],height[j])&#xff09;,然后将短板向内移动&#xff0c;直达i>j即可得到答案。 解题过程 短板向内移动&#xff1a;水的容量可能增大 长板向内移动&#xff1a;水的容量不可能…

树莓派5安装系统并配置SSH与VNC权限实现Windows设备远程连接

文章目录 前言1. 使用 Raspberry Pi Imager 安装 Raspberry Pi OS2. Windows安装VNC远程树莓派3. 使用VNC Viewer公网远程访问树莓派3.1 安装Cpolar步骤3.2 配置固定的公网地址3.3 VNC远程连接测试 4. 固定远程连接公网地址4.1 固定TCP地址测试 前言 本文主要介绍如何在树莓派…

数字化转型升级探索(一)

在数字化转型升级的探索中&#xff0c;我们将通过实施综合数字化战略&#xff0c;涵盖从前端用户体验优化到后端系统集成的全方位提升&#xff0c;利用大数据、人工智能、云计算等先进技术对业务流程进行智能化改造&#xff0c;推进自动化和数据驱动决策&#xff0c;推动业务模…

VMware安装Ubuntu 23.10.1系统图文版

文章目录 Ubuntu系统介绍引言Ubuntu系统的特点1. 开源免费2. 易用性3. 稳定性与安全性4. 强大的社区支持 安装与初步设置下载ISO镜像安装1.新建虚拟机2.选择“自定义(高级)”&#xff0c;并点击【下一步】3.选择虚拟机硬件兼容性(默认就好)&#xff0c;并点击【下一步】4.选择“…

爆改yolov8|利用BSAM改进YOLOv8,高效涨点

1&#xff0c;本文介绍 BSAM基于CBAM进行改进&#xff0c;经实测在多个数据集上都有涨点。 BSAM&#xff08;BiLevel Spatial Attention Module&#xff09;是一个用于提升深度学习模型在空间特征处理中的能力的模块。它主要通过双层注意力机制来增强模型对重要空间信息的关注…

一款支持固定区域,固定尺寸大小重复截图的软件

WinSnap是一款功能强大的屏幕截图软件&#xff0c;可以实现对固定区域&#xff0c;固定尺寸大小区域重复截图&#xff0c;适用于日常截图需求和专业用户进行屏幕截图和图像编辑。通过设置快捷键&#xff0c;方便快速重复截图固定区域固定大小。它支持捕捉整个屏幕、活动窗口、选…

H264码流结构讲解

所谓的码流结构就是指&#xff1a;视频经过编码之后所得到的数据是怎样排列的&#xff0c;换句话说&#xff0c;就是编码后的码流我们该如何将一帧一帧的数据分离开来&#xff0c;哪一块数据是一帧图像&#xff0c;哪一块是另外一帧图像&#xff0c;只要了解了这个&#xff0c;…

UE开发中的设计模式(四) —— 组合模式

面试中被面试官问到组合模式和继承有什么区别&#xff0c;给我问懵了&#xff0c;今天又仔细看了下&#xff0c;这不就是UE里的组件吗 >_< 文章目录 问题提出概述问题解决总结组合模式的优缺点继承的优缺点 问题提出 考虑这样一个场景&#xff0c;我们有一个敌人的基类&…

【读书笔记-《30天自制操作系统》-10】Day11

本篇内容继续围绕显示展开。首先对鼠标显示做了些优化&#xff0c;鼠标箭头在到达画面边缘时能够实现部分隐藏&#xff1b;接下来制作了窗口&#xff0c;实现了窗口显示&#xff1b;最后还在窗口的基础上实现了计数器&#xff0c;显示计数的变化并消除闪烁的问题。 1. 画面边…

Java 6.3 - 定时任务

为什么需要定时任务&#xff1f; 常见业务场景&#xff1a; 1、支付10min失效 2、某系统凌晨进行数据备份 3、视频网站定时发布视频 4、媒体聚合平台每10min抓取某网站数据为己用 …… 这些场景需要我们在某个特定时间去做某些事情。 单机定时任务技术有哪些&#xff1f…

form-data和x-www-form-urlencoded的区别

form-data和x-www-form-urlencoded区别 form-data 和 x-www-form-urlencoded 都是表单请求的一种格式&#xff0c;主要区别有两点。 编码方式不同 我们先说x-www-form-urlencoded&#xff0c;它的编码方式就隐藏在名字里&#xff1a;urlencoded。看到这个关键词&#xff0c;…

Gradle下载失败或者慢怎么办

在Android Studio开发过程中&#xff0c;经常需要下载Gradle构建工具来构建项目。然而&#xff0c;由于网络限制或国际镜像服务器响应慢&#xff0c;Gradle的下载过程可能会非常缓慢甚至失败。为了优化这一过程&#xff0c;我们可以采用国内的Gradle镜像来加速下载。同时&#…