如何使用 FastAPI 部署 NLP 模型?

模型部署是将训练好的自然语言处理模型集成到生产环境中的过程。模型接收输入数据,预测输出。

有多种将 NLP 模型部署到生产环境的方法,包括 Flask、Django、Bottle 等框架。

本文将分享使用 FastAPI 构建和部署 NLP 模型。

在本文中,你将学习:

  • 如何构建一个基于 IMDB 电影评论的 NLP 模型
  • 什么是 FastAPI 以及如何安装它
  • 如何使用 FastAPI 部署模型
  • 如何在任何 Python 应用程序中使用已部署的 NLP 模型。

构建 NLP 模型

首先,我们将构建我们的 NLP 模型。我们将使用 IMDB 电影评论数据集创建一个简单的模型,该模型可以将评论分类为积极或消极。

以下是步骤:

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_report, plot_confusion_matrix
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
from string import punctuation
from nltk.tokenize import word_tokenize
import nltk
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
import re  # 正则表达式
warnings.filterwarnings("ignore")
np.random.seed(123)

加载数据集

data = pd.read_csv("../data/labeledTrainData.tsv", sep='\t')
data.head()

此代码从数据文件夹加载IMDB电影评论数据集,并使用head()方法显示前五行。

分析数据集

我们现在将探索数据集以了解其结构和特征。

# 检查数据形状
data.shape# 识别缺失值
data.isnull().sum()# 评估类别分布
data.sentiment.value_counts()

数据预处理

文本数据通常包含不必要的字符,需要在输入机器学习模型之前进行清理。我们将使用NLTK删除停用词、数字、标点符号,并将单词词形还原(转换为其基本形式)。

stop_words = stopwords.words('english')def text_cleaning(text, remove_stop_words=True, lemmatize_words=True):# 清理文本text = re.sub(r"[^A-Za-z0-9]", " ", text)text = re.sub(r"\'s", " ", text)text = re.sub(r'http\S+', ' link ', text)text = re.sub(r'\b\d+(?:\.\d+)?\s+', '', text)  # 移除数字text = ''.join([c for c in text if c not in punctuation])# 移除停用词(可选)if remove_stop_words:text = text.split()text = [w for w in text if not w in stop_words]text = " ".join(text)# 词形还原(可选)if lemmatize_words:text = text.split()lemmatizer = WordNetLemmatizer()lemmatized_words = [lemmatizer.lemmatize(word) for word in text]text = " ".join(lemmatized_words)return textdata["cleaned_review"] = data["review"].apply(text_cleaning)# 拆分特征和目标变量
X = data["cleaned_review"]
y = data.sentiment.values# 将数据分为训练集和测试集
X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.15, random_state=42, shuffle=True, stratify=y)

构建 NLP 模型

我们将训练一个多项式朴素贝叶斯算法来将评论分类为积极或消极。

在训练之前,我们需要使用 TfidfVectorizer 将清理过的文本评论转换为数值特征。

TfidfVectorizer 将文本文档集合转换为 TF-IDF 特征矩阵,这些特征表示单词在文档中的重要性相对于整个语料库。

# 创建分类管道
sentiment_classifier = Pipeline(steps=[('pre_processing', TfidfVectorizer(lowercase=False)),('naive_bayes', MultinomialNB())
])# 训练情感分类器
sentiment_classifier.fit(X_train, y_train)# 在验证数据上测试模型性能
y_preds = sentiment_classifier.predict(X_valid)
accuracy_score(y_valid, y_preds)

保存模型管道

我们将使用joblib库保存训练好的模型管道。

import joblib
joblib.dump(sentiment_classifier, '../models/sentiment_model_pipeline.pkl')

什么是 FastAPI?

FastAPI 是一个用于构建 Python API 的高性能、现代Web框架。

它提供了自动交互文档和比其他框架更简便的编码特性。

FastAPI构建于两个核心Python库之上:Starlette(用于Web处理)和Pydantic(用于数据处理和验证)。

如何安装 FastAPI

确保您具有最新版本的FastAPI,运行以下命令:

pip install fastapi

您还需要一个 ASGI 服务器用于生产环境,如uvicorn:

pip install uvicorn

使用 FastAPI 部署 NLP 模型

我们现在将使用FastAPI将训练好的NLP模型部署为RESTful API。

创建一个新的 Python 文件

创建一个名为main.py的文件来存放 FastAPI 应用程序代码。

导入包

from string import punctuation
from nltk.tokenize import word_tokenize
import nltk
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
import re
import os
from os.path import dirname, join, realpath
import joblib
import uvicorn
from fastapi import FastAPI

初始化 FastAPI 应用实例

app = FastAPI(title="Sentiment Model API",description="一个使用NLP模型预测电影评论情感的简单API",version="0.1",
)

加载NLP模型

with open(join(dirname(realpath(__file__)), "models/sentiment_model_pipeline.pkl"), "rb") as f:model = joblib.load(f)

定义清理数据的函数

我们将重用第一部分中的 text_cleaning 函数来清理新的评论。

def text_cleaning(text, remove_stop_words=True, lemmatize_words=True):# ...(参考前面的代码块)return text

创建预测端点

API端点是系统之间通信的入口。在这里,我们将定义一个名为/predict-review的端点,它接受GET请求。

@app.get("/predict-review")
def predict_sentiment(review: str):"""接收评论并预测其情感的函数。:param review: 评论文本。:return: 包含预测情感和概率的字典。"""cleaned_review = text_cleaning(review)prediction = model.predict([cleaned_review])output = int(prediction[0])probas = model.predict_proba([cleaned_review])output_probability = "{:.2f}".format(float(probas[:, output]))sentiments = {0: "消极", 1: "积极"}result = {"prediction": sentiments[output], "Probability": output_probability}return result

运行API

使用以下命令运行FastAPI应用程序:

uvicorn main:app --reload

--reload标志允许代码更改时自动重启服务器。

如何使用已部署的 NLP 模型

FastAPI 为你的API提供自动交互文档。在浏览器中访问http://localhost:8000/docs即可访问此界面。此界面允许您直接测试API端点。

以下是如何使用/predict-review端点的方法:

  1. 访问http://localhost:8000/docs
  2. 点击/predict-review端点。
  3. 在“review”字段中输入电影评论文本。
  4. 点击“Execute”按钮。

API将返回一个包含预测情感(积极或消极)和相关概率分数的JSON响应。

参考资料

  • hackernoon.com - 如何使用FastAPI构建和部署NLP模型
  • oralytics.com - AutoML标签
  • towardsdatascience.com - 如何使用FastAPI构建和部署NLP模型
  • github.com - DhruvViradiya1515的NLP使用FastAPI部署示例
  • towardsdatascience.com - 如何使用Streamlit和Python构建数据科学应用
  • freecodecamp.org - 将机器学习模型作为API部署到生产环境
  • github.com - PlutoSenthil的使用FastAPI的NLP模型示例
  • github.com - DhruvViradiya1515的NLP使用FastAPI部署示例
  • github.com - eya-abid的情感分析API

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

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

相关文章

揭开Java序列化的神秘面纱(上)Serializable使用详解

Java序列化(Serialization)作为一项核心技术,在Java应用程序的多个领域都有着广泛的应用。无论是通过网络进行对象传输,还是实现对象的持久化存储,序列化都扮演着关键的角色。然而,这个看似简单的概念蕴含着丰富的原理和用法细节&…

如何为个人网站部署SSL安全证书,以实现网站的 HTTPS 加密协议访问?

哈喽,大家好呀!这里是码农后端。完成了域名的备案与解析后,就可以通过域名来访问我们的网站了。本篇将介绍如何为我们的网站部署SSL安全证书,实现网站的 HTTPS 加密协议访问。 1、购买SSL证书 未进行SSL证书部署,访问网…

数据保存MySQL语法

文章目录 一、导包二、链接数据库三、创建操作工具【游标 cursor】四、执行命令1.创建表2.插入数据 五、数据库提交 一、导包 import pymysql二、链接数据库 db pymysql.connect(hostlocalhost,port3306,userroot,passwordroot123,dbpython案例,charsetutf8 )三、创建操作工…

回答篇二:测试开发高频面试题目

引用之前文章:测试开发高频面试题目 本篇文章是回答篇(持续更新中) 1. 在测试开发中使用哪些自动化测试工具和框架?介绍一下你对其中一个工具或框架的经验。 a. 测试中经常是用的自动化测试工具和框架有Selenium、Pytest、Postman…

调整表格大小

方法一:使用鼠标拖动表格边框或右下角的调整控点 在Word文档中,选中要缩小的表格,将鼠标指针放在表格的边框线上,直到指针变成双箭头的形状。 按住鼠标左键,拖动边框线,调整表格的宽度或高度。如果同时按住…

leetcode328-Odd Even Linked List

题目 给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。 请注意,偶数组和奇数组内…

AI视频教程下载:使用ChatGPT进行商务写作

你将学到什么? 学习如何将ChatGPT集成到你的写作过程中,并有效地将其用作商务写作的个人写作助手。 学习如何使用ChatGPT生成想法,提高你的书面沟通的结构、清晰度和连贯性。 你将学习使用ChatGPT的最佳实践,包括如何自定义其设…

Win10版本TDengine使用分享

软件介绍 TDengine是一款开源、高性能、可扩展的时间序列数据库(TSDB)。它由涛思数据公司开发,专为处理大规模时间序列数据而设计。时间序列数据是指按时间顺序排列的数据点序列,广泛应用于物联网、大数据分析、金融等领域。TDen…

Redis解决缓存一致性问题

文章目录 ☃️概述☃️数据库和缓存不一致采用什么方案☃️代码实现☃️其他 ☃️概述 由于我们的 缓存的数据源来自于数据库, 而数据库的 数据是会发生变化的, 因此,如果当数据库中 数据发生变化,而缓存却没有同步, 此时就会有 一致性问题存在, 其后果是: 用户使用缓存中的过…

代码随想录算法训练营第六天| 454.四数相加II、383. 赎金信、15. 三数之和、18.四数之和

454.四数相加II 给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] B[j] C[k] D[l] 0。 解题思路 感觉这道题目就是傻大粗,没啥可以值得学习的。反正for循环就完事了。 解法1 public int fourSumCount(int[] …

DSP6657 GPIO中断学习

1 简介 使用创龙板卡的KEY2按键通过中断的方式控制LED3的亮灭 2 中断学习 在C665x设备上,CPU中断是通过C66x CorePac中断控制器进行配置的。该中断控制器允许最多128个系统事件被编程到任意12个CPU可屏蔽中断输入(CPUINT4至CPUINT15)、CPU…

短剧解说一键生成原创文案的快速方法

如今短剧创作火的一塌糊涂,它们以其简洁明了的剧情、生动有趣的角色和紧凑的节奏,吸引了大量观众的关注。因此,它所带来的流量是非常巨大,不少人将流量的获取瞄准了短剧创作领域以及短剧解说领域。而对于短剧解说人员来讲&#xf…

c++动态内存管理/模板

一,动态内存管理 (1)C语言和c区别 在C语言中,我们常用malloc和calloc申请空间,用free来释放空间,而现在我们更多的情况下用new来申请空间,用delete来释放空间。 申请一个空间: i…

微服务项目收获和总结---第5天(定时发布)

延迟任务 目录 延迟任务技术对比: Redis实现定时任务:​编辑新增任务:取消任务:拉取任务:Zset定时刷新数据到List中:分布式锁实现定时任务只刷新一次: 技术对比: Redis实现定时任…

香橙派 AIpro 昇腾 Ascend C++ 分类模型适配

香橙派 AIpro 昇腾 Ascend C 分类模型适配 flyfish 文章目录 香橙派 AIpro 昇腾 Ascend C 分类模型适配前言一、PyTorch官网resnet模型处理方式1、PyTorch模型 导出 onnx格式2、完整测试 输出top1结果3、完整测试 输出top5结果 二、YOLOv8官网resnet模型Python处理方式三、昇腾…

web学习笔记(五十九)

目录 1.style样式 1.1作用域 scoped 1.2 less和 sass 1.3 less和 sass两者的区别 2. 计算属性computed 3. 响应式基础reactive() 4. 什么是MVVM? 1.style样式 1.1作用域 scoped scoped表示样式作用域,把内部的样式仅限于当前组件模板生效,其…

云衔科技:为什么推荐使用zoho crm客户管理系统?

在当今快速变化的商业环境中,企业对高效、智能化的客户关系管理(CRM)系统的需求日益增长。Zoho CRM,作为全球领先的企业级CRM解决方案提供商,凭借其全面的功能、高度的可定制性、以及无缝集成的生态系统,成…

mybatis plus leftjoin 表如何去掉自动添加deleted=0条件

Mybatis Plus 在进行多表查询时,默认会添加逻辑删除的过滤条件,例如 deleted0,这是为了在查询时自动过滤掉被逻辑删除的数据。如果你希望在某个 LEFT JOIN 查询中去掉这个自动添加的条件,可以通过以下方式实现: 全局配…

探寻导师:2024年最新研究生导师评价汇总

随着考研热潮的不断升温,对于研究生导师的选择变得愈发重要。导师不仅关系到研究生的学术成长,还直接影响到未来的职业发展。然而,如何找到一位合适的导师成为许多考生头疼的问题。为了帮助广大考生更好地选择导师,整理了最新最全…

Nature 正刊!瑞典于默奥大学研究团队在研究全球河流和溪流的甲烷排放中取得新进展

甲烷(CH4)是一种强有力的温室气体,自工业革命以来,其在大气中的浓度增加了两倍。有证据表明,全球变暖增加了淡水生态系统的 CH4 排放,为全球气候提供了积极的反馈。然而,对于河流和溪流来说,甲烷排放的控制…