文章目录

  • 前言
  • 1. 效果展示
  • 2. 应用设计
  • 3. 实现
    • 3.1. lac分词模型的服务化部署
    • 3.2 使用Flask构建app
  • 4. 小结

前言

内容纯属个人经验,若有不当或错误之处,还请见谅,欢迎指出。

文中大致介绍了,如何快捷地使用PaddleHub服务化部署一个简单的AI模型,并简单包装成一个Web应用的过程。

主要工具:

  • Flask(python的Web框架)
  • PaddleHub(飞桨的预训练模型库)

1. 效果展示

2. 应用设计

总体思路如下:

  • 使用PaddleHub部署对分词模型lac进行服务化部署
  • 用Flask框架构建app
    • app从前端获取请求,将请求转发给lac服务,将得到的响应再显示到前端
    • 使用了jinja2模板引擎(没有做前后端全分离,一是简陋的应用没必要,二是我还不会,哈哈)

3. 实现

3.1. lac分词模型的服务化部署

1、什么是服务化部署?

“部署”这个词我见到过很多次了,但总对它的意思有些模糊。有时,将一个AI模型训练好后,保存为本地文件,然后我们就可以在python脚本中加载模型以及使用模型进行预测,这样的过程也称为“部署”。

服务化部署,就是将模型部署为一个“Web服务”。这样部署的效果就是,你只需要对相应的端口发送合适的请求,就可以得到模型的预测结果,即响应。而使用该模型不再需要各种各样的环境依赖(部署的模型本身仍然是运行在其依赖的环境中的)。

感觉说得还是有点迷糊,先就这样叭。

2、lac分词模型的部署方法

lac是PaddleHub模型仓库中的一个“预训练模型”,即已经训练好的模型,部署非常简单(在此之前你需要在python环境中安装好PaddleHub的库,具体安装方法不再赘述,可自行去github上查看相应的文档:PaddleHub),只需要两步:

  • 下载lac模型
  • 一行命令部署

运行下面两行代码时,就会自动下载lac模型(通常会下载到C盘用户目录的.paddlehub文件夹中,通常还有一个README.md文件,里面是模型的介绍以及使用教程)

import paddlehub as hub
lac = hub.Module(name="lac")

用下面的代码对模型进行测试:

import paddlehub as hub
lac = hub.Module(name="lac")test_text = ["今天是个好天气。"]
results = lac.cut(text=test_text, use_gpu=False, batch_size=1, return_tag=True)
print(results)
#{'word': ['今天', '是', '个', '好天气', '。'], 'tag': ['TIME', 'v', 'q', 'n', 'w']}

然后命令行启动服务完成部署(不执行上面的代码,直接运行命令,也可以自动下载模型),

hub serving start -m lac

启动成功时的终端输出:

 * Running on all addresses (0.0.0.0)* Running on http://127.0.0.1:8866* Running on http://192.168.43.166:8866
INFO 2023-03-17 00:12:29,487 _internal.py:224] Press CTRL+C to quit

3.2 使用Flask构建app

1、目录结构

- templates- index.html
- app.py
- forms.py

注:templates这个文件夹是固定的,与flask框架的render_template搭配使用,html文件都放里面,不然找不到。

2、forms.py

定义了一个表单类TextForm,之后就从网页的表单中输入待分析的文本,将数据传到后端。

from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequiredclass TextForm(FlaskForm):text = StringField('待分析的文本', validators=[DataRequired(message="不能为空")])

3、app.py

该脚本也会启动一个Web服务,直接在浏览器输入链接http://127.0.0.1:5000即可访问,其中5000app.run()中的port参数指定。

from flask import Flask, jsonify, render_template, request
import requests
from forms import TextFormapp = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key_here'@app.route('/', methods=['GET', 'POST'])
def predict():# 实例化一个表单对象form = TextForm()if form.validate_on_submit():# 1. 将表单的文本数据转换为字典 --> lac服务的输入要求是字典data = {"text": form.text.data}# 2. 向paddlehub的lac服务发送请求 --> 链接是使用paddlehub部署时内部默认指定的response = requests.post("http://127.0.0.1:8866/predict/lac", json=data)result = response.json()results = result['results']return render_template('index.html', form=form, results=results)return render_template('index.html', form=form)if __name__ == '__main__':app.run(debug=True, port=5000)  # port指定运行的端口

3、index.html

主页内容。

html文件中,使用了一些属于flask的jinja2(模板引擎,渲染html文件)的语法,即带{% %}{{ }}的内容。其中{% %}实现控制结构,{{ }}引用从render_template传过来的参数。
由于我前端了解较少,下面的页面显示起来是比较简陋的,但核心功能已经完成(能run就行)。

<h1>体验分词功能</h1><form action="" method="post" class="mt-4"><!-- csrf这一句好像可以删掉 -->{{ form.csrf_token }}{{ form.text(class='input', style='width:500px', placeholder='请输入待分析的文本') }}<input type="submit" value="Submit">
</form>{% if results %}<p>分词结果如下:</p>
{% endif %}<p>
{% for word in results %}{{ word }}
{% endfor %}
</p>

4. 小结

  • 本次实现了一个简陋的网页应用,应用的核心功能——分词,是由另一个独立运行的服务lac提供的。将AI模型独立部署有一个好处,即它可以同时为多个网页应用提供服务。
  • 也是我自己是对之前学习的Flask知识的一次小的实践尝试。

基于AI分词模型,构建一个简陋的Web应用相关推荐

  1. 深度学习用于医学预后-第二课第四周1-4节-使用线性和基于树的模型构建风险评估模型

    今天起进入到第四周课程的学习,使用线性和基于树的模型构建风险评估模型 风险分数 本周,你将学习建立和评估生存预测模型的策略,这些模型将使你能够比较个体患者的风险.您将学习两个这样的模型:Cox比例风险 ...

  2. keepalived基础及使用DR模型构建一个real_server

    keepalived HA的解决方案的两大流派分为heartbeat.corosync和keepalived keepalived在诞生时被赋予的使命仅仅是为lvs的director的HA.生成ipv ...

  3. R语言使用caret包的train函数构建xgboost模型(基于linear算法)模型构建分类模型、trainControl函数设置交叉验证参数、自定义调优评估指标

    R语言使用caret包的train函数构建xgboost模型(基于linear算法)模型构建分类模型.trainControl函数设置交叉验证参数.自定义调优评估指标.tuneLength参数和tun ...

  4. R语言使用caret包的train函数构建xgboost模型(基于gbtree算法)模型构建分类模型、trainControl函数设置交叉验证参数、自定义调优评估指标

    R语言使用caret包的train函数构建xgboost模型(基于gbtree算法)模型构建分类模型.trainControl函数设置交叉验证参数.自定义调优评估指标.tuneLength参数和tun ...

  5. R语言使用caret包的train函数构建xgboost模型(基于dart算法)模型构建分类模型、trainControl函数设置交叉验证参数、自定义调优评估指标

    R语言使用caret包的train函数构建xgboost模型(基于dart算法)模型构建分类模型.trainControl函数设置交叉验证参数.自定义调优评估指标.tuneLength参数和tuneG ...

  6. 基于AI大模型的电商商家端自定义报表分析诊断经营数据

    随着电商市场的不断发展和壮大,各个电商平台上的商家需要更加精细化.定制化的数据分析和诊断.但是,目前市面上尚未有一款能够满足商家对于自定义报表的需求的电商数据分析工具,且可视化展示效果也不够灵活.直观 ...

  7. Nest的基本概念,以及如何使用Nest CLI来构建一个简单的Web应用程序

    Nest是一个用于构建高效.可扩展的Node.js服务器端应用程序的框架.它是基于Express.js构建的,并且提供了多种新特性和抽象层,可以让开发者更加轻松地构建复杂的应用程序. 本文将介绍Nes ...

  8. 基于PyTorch,如何构建一个简单的神经网络

    本文为 PyTorch 官方教程中:如何构建神经网络.基于 PyTorch 专门构建神经网络的子模块 torch.nn 构建一个简单的神经网络. 完整教程运行 codelab→ https://ope ...

  9. 基于AI视觉技术构建柔性生产数字化车间

    当前中国快速进入老龄化社会,人口红利逐渐消失,企业用工难招工难日益显著.面对当前困局,为继续推动中国从制造大国走向制造强国,需要加快建设数字化车间,用自动化设备替代繁重的人工劳动,实现生产的智能化和信 ...

最新文章

  1. html多个盒子重叠浮动,如何让浮动后的多个盒子水平居中
  2. 阜阳市乡镇企业中专学校计算机教师高翱简介,2017年中南林业科技大学博士研究生奖助学金...
  3. Ansible 详解2-Playbook使用
  4. 【PAT - 甲级1007】Maximum Subsequence Sum (25分)(前缀和)
  5. 【转载】Android 工具-adb原理
  6. number 限制最长数字_阿博的Python之路Number数据类型详解
  7. 数据分类是否一定要求样本均衡
  8. YYYY-mm-dd HH:MM:SS 备忘录
  9. 【技术贴】解决开机本地连接出来慢,本地连接开机后出来时间慢
  10. Cdn英文的读音音标_宋sir的美式音标教程 Unit 1 /i/ tea
  11. malloc函数说明
  12. 怎么把PDF文件转换成Word文档格式?这种方法最简单
  13. element上传多个视频/多个图片与限制数量
  14. 高等教育心理学:学习心理(重要)
  15. Eclipse背景颜色设置
  16. JavaScript内容回顾第十天
  17. android读取assets中的txt文件路径,Android获取assets文件路径
  18. 单片机c语言报错_asm啥意思,SPMC75系列单片机地C和ASM( - 控制/MCU - 电子发烧友网...
  19. Mock测试工具比较
  20. Android 源码刷机版本号、支持设备对照表(AOSP )

热门文章

  1. 【Nodejs】Node-js笔记
  2. 常见排序算法总结 - Java 实现
  3. wireshark抓虚拟网卡_抓取Vmware虚拟网卡上的网络数据包
  4. 引用百度地图微信小程序JS API模块
  5. Spring源码学习(四) | @Configuration的cglib动态代理
  6. docker-compose 安装部署BSC
  7. 关于win10无线网卡突然出现问题
  8. matlab 结构体 单元数组,matlab结构体、数组和单元数组类型的创建
  9. 百度智能云ABC赋能小程序,让开发更美好
  10. 统计学习方法- 统计学习方法概论