全栈实战:基于BERT模型的情感分析系统--->FlaskAPI部署+HTML网页

 🍍个人主页:Yang-ai-cao
📕系列专栏:深度学习
🌸博学而日参省乎己,知明而行无过矣 

目录

个人主页:Yang-ai-cao

系列专栏:Python学习之旅

博学而日参省乎己,知明而行无过矣 

          一、基本架构

1. BERT模型服务端

2. API服务端

3. 应用端

二、部署思路与细节知识

(1)、部署思路

(2)、部署涉及的细节知识

三、集成和测试

1.启动BERT模型服务端:

2.启动API服务端

​编辑

3.打开应用端



在本篇博客中,我们将详细介绍如何从训练一个BERT模型开始,逐步实现API部署,并最终制作一个简单的网页应用来调用该API。整个过程包括模型训练、API服务端开发、网页端开发,以及如何将这些部分集成起来。看到许多朋友在使用BERT模型,网上多数文章只提到了模型的训练方法,后面的生产部署及调用并没有说明。这段时间使用BERT模型完成了从数据准备到生产部署的全流程,在这里整理出来,方便大家参考。

一、基本架构

实现思路

+-------------------+
|   应用端(HTML)     | 
+-------------------+
         ^^
         ||
         VV
+-------------------+
|     API服务端      | 
+-------------------+
         ^^
         ||
         VV
+-------------------+
|  BERT模型服务端    | 
+-------------------+

1. BERT模型服务端

功能

  • 加载预训练的 BERT-BiLSTM-CRF 模型。
  • 提供实时预测服务。

实现

  • 使用 Flask 或 FastAPI 创建一个服务端。
  • 加载模型时只在服务启动时进行,以提高效率。
  • 提供一个 HTTP 接口,接受文本输入并返回预测结果。

代码:BERT完整全流程代码,文件命名:sentiment_model.py

2. API服务端

接下来,我们将训练好的模型部署为一个API服务。我们使用Flask框架来实现。

功能

  • 调用 BERT 情感分类模型服务端的预测接口。
  • 提供一个 API 接口,供应用端调用。

实现

  • 使用 Flask 创建一个服务端。
  • 在接收到请求后,调用 BERT 模型服务端的预测接口,并返回结果。

示例代码:命名:app.py

# app.py
from flask import Flask, request, jsonify
from flask_cors import CORS
from sentiment_model import SentimentClassifier

app = Flask(__name__)
CORS(app)

classifier = SentimentClassifier()

@app.route('/predict', methods=['POST'])
def predict():
    text = request.form.get('text', '')  # 从表单数据获取文本
    if not text:
        return jsonify({'error': 'No text provided'}), 400
    label, confidence = classifier.predict(text)
    return jsonify({'label': label, 'confidence': confidence})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
3. 应用端

我们将制作一个简单的HTML网页,用户可以在网页上输入文本,并通过调用API获取分类结果。

功能

  • 提供用户界面,允许用户输入文本并查看预测结果。
  • 调用 API 服务端的接口,获取预测结果并展示给用户。

实现

  • 使用 HTML 和 JavaScript 创建一个简单的网页。
  • 使用 AJAX 调用 API 服务端的接口。

示例代码:

 命名:index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Sentiment Analysis</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
    <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
</head>
<body>
    <div class="container mt-5">
        <div class="card">
            <div class="card-body">
                <h1 class="card-title text-center">Sentiment Analysis</h1>
                <textarea class="form-control my-3" id="text-input" placeholder="Enter text here..."></textarea>
                <button class="btn btn-primary btn-block" onclick="analyzeSentiment()">Analyze</button>
                <div class="result mt-3" id="result"></div>
            </div>
        </div>
    </div>

    <script>
        async function analyzeSentiment() {
            const text = document.getElementById('text-input').value;
            const response = await fetch('/predict', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                },
                body: new URLSearchParams({ text })
            });
            const result = await response.json();
            document.getElementById('result').innerHTML = `<div class="alert alert-info">Label: ${result.label}, Confidence: ${(result.confidence * 100).toFixed(2)}%</div>`;
        }
    </script>
</body>
</html>

二、部署思路与细节知识

(1)、部署思路
  1. 模型训练:在本地或云端训练BERT模型,并保存训练好的模型。
  2. API部署:将训练好的模型部署为API服务,可以使用Flask或FastAPI等框架。
  3. 网页制作:创建一个简单的前端网页,用户可以在网页上输入文本,并调用API获取结果。
  4. 集成与测试:将前端网页与API服务集成,进行测试和调试。
(2)、部署涉及的细节知识
  1. 环境配置

    • 确保所有必要的库已经安装。
    • 配置虚拟环境以避免依赖冲突。
  2. 模型加载优化

    • 在服务启动时加载模型,避免每次请求都加载模型。
    • 使用缓存机制来提高性能。
  3. API安全性

    • 使用API密钥或其他认证机制来保护API。
    • 对输入数据进行验证和清理,防止注入攻击。
  4. 跨域资源共享(CORS)

    • 使用flask-cors库来处理跨域请求问题。
  5. 容器化部署(可选):

    • 使用Docker将API服务容器化,便于部署和管理。
    • 创建Dockerfile,定义容器的构建过程。
  6. 负载均衡和扩展

    • 使用负载均衡器来分发请求,确保服务的高可用性。
    • 水平扩展API服务,处理更多的并发请求。

三、集成和测试

我们可以在Pycharm-Terminal执行:

1.启动BERT模型服务端:
python sentiment_model.py
2.启动API服务端

运行app.py

python app.py

注意:根据自己实际的port和网址进入。如本文app.py中

@app.route('/predict', methods=['POST'])  即:  http://127.0.0.1:5000/predict进入。
3.打开应用端
  • 将 index.html 文件打开,选择浏览器访问:进入以下界面,输入自己的文本,Analyze即可实现情感分类。
  1. HTML Form:

    • 一个简单的表单,用于输入文本并提交。
    • 表单包含一个输入字段和一个提交按钮。
  2. JavaScript:

    • 使用 fetch API 发送 AJAX 请求到 Flask API。
    • 请求类型为 POST,并设置 Content-Type 为 application/json
    • 提交表单时将输入的文本作为 JSON 数据发送到 Flask API。
    • 接收到响应后,更新页面上的结果区域。

  • 19
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值