掘金 人工智能 07月14日 10:26
使用modelscope在本地部署文本情感分析模型并对外提供api接口
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了如何使用ModelScope框架部署StructBERT情感分类模型,并提供API接口。首先,通过Docker镜像简化环境部署,然后在容器内运行Python脚本进行情感分析预测。接着,利用FastAPI构建API服务,实现对输入文本的情感分析。最后,展示了如何通过curl命令访问API接口并获取分析结果。整个过程详细说明了环境配置、模型加载、预测实现以及API接口的搭建,方便用户快速部署和使用情感分析服务。

🐳 部署环境:文章首先介绍了使用Docker镜像快速部署ModelScope环境的方法。通过拉取官方提供的Docker镜像,并在容器内挂载本地目录,简化了环境配置的复杂性,方便开发者进行后续的开发和测试。

💡 模型预测:在部署好环境之后,文章给出了使用Python脚本进行模型预测的示例。通过ModelScope的pipeline功能,加载StructBERT情感分类模型,并对输入的文本进行情感分析。展示了如何调用模型,并输出了预测结果,为后续API接口的构建奠定了基础。

🚀 API接口构建:文章详细介绍了如何使用FastAPI构建API接口。定义了请求和响应的数据结构,包括输入文本和情感分析结果。通过FastAPI的POST接口,接收文本输入,调用情感分析模型进行预测,并将结果以JSON格式返回,实现了情感分析服务的API化。

✅ 接口测试:文章提供了使用curl命令测试API接口的示例。通过curl命令,向API接口发送POST请求,并传入待分析的文本。展示了如何访问API接口,并获取情感分析结果,验证了API接口的正确性和可用性,方便用户进行测试和集成。

使用modelscope部署StructBERT情感分类-中文-通用-base模型,并提供api接口

本地部署modelscope环境

环境安装 · 文档中心
为了简化部署,直接使用官方提供的docker镜像部署环境

拉取镜像

使用cpu镜像

docker pull modelscope-registry.cn-beijing.cr.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-py311-torch2.3.1-1.28.0

启动容器

挂载容器内的/home目录到本地,作为开发目录

docker run -it --rm -p 8080:8080 --name modelscopelocal -v <本地目录>:/home <镜像> bash

本地目录和镜像替换为实际的内容启动后,会直接进入容器中

 docker run -it --rm -p 8080:8080 --name modelscopelocal -v D:\workspace\modelscope:/home 6e724d5e15e8 bashroot@470b3a2a6460:/#

使用模型进行预测

在开发目录下创建一个python文件main.py,使用模型对输入文本进行情感分析

from modelscope.pipelines import pipelinefrom modelscope.utils.constant import Taskssemantic_cls = pipeline(Tasks.text_classification, 'iic/nlp_structbert_sentiment-classification_chinese-base')result = semantic_cls(input=['哪次能看到你挖石油不漏','今晚什么游戏啊 主播可以说一声吗'])print(result)

在命令行运行python main.py输出结果如下:

[{'scores': [0.8981053829193115, 0.10189458727836609], 'labels': ['正面', '负面']}, {'scores': [0.8091937899589539, 0.19080623984336853], 'labels': ['正面', '负面']}, {'scores': [0.896651029586792, 0.10334893316030502], 'labels': ['负面', '正面']}]

启动一个fastapi服务提供api接口

开发目录下创建一个app.py文件

## 腾讯元宝自动生成from fastapi import FastAPI, HTTPExceptionfrom pydantic import BaseModelfrom typing import Listfrom modelscope.pipelines import pipelinefrom modelscope.utils.constant import Tasksapp = FastAPI(title="情感分析API", description="提供文本情感分析的REST接口", version="1.0.0")# 加载模型(保持不变)try:    sentiment_pipeline = pipeline(        task=Tasks.text_classification,        model='iic/nlp_structbert_sentiment-classification_chinese-base'    )except Exception as e:    raise RuntimeError(f"模型加载失败: {str(e)}")# 请求数据结构(保持不变)class TextListRequest(BaseModel):    texts: List[str]# 响应数据结构(新增 text 字段)class AnalysisResult(BaseModel):    text: str           # 原始输入文本(新增)    labels: List[str]   # 情感标签(如 ["正面", "负面"])    scores: List[float] # 对应标签的概率分数(如 [0.89, 0.11])class AnalysisResponse(BaseModel):    results: List[AnalysisResult]  # 每个文本的完整结果# /analysis 接口(核心修改点)@app.post("/analysis", response_model=AnalysisResponse)async def analyze_text(request: TextListRequest):    try:        raw_results = sentiment_pipeline(input=request.texts)                # 新增:将原始文本与预测结果绑定(按顺序一一对应)        formatted_results = [            AnalysisResult(                text=request.texts[i],       # 原始文本                labels=result["labels"],     # 标签                scores=result["scores"]      # 分数            )             for i, result in enumerate(raw_results)  # 按索引匹配原始文本        ]                return {"results": formatted_results}            except Exception as e:        raise HTTPException(status_code=500, detail=f"预测失败: {str(e)}")# 其他代码(健康检查、启动命令等)保持不变# 可选:添加健康检查接口@app.get("/health", description="服务健康检查")async def health_check():    return {"status": "ok", "message": "服务运行正常"}# 启动命令(运行时执行)if __name__ == "__main__":    import uvicorn    uvicorn.run(        app="app:app",  # 模块名:应用实例名        host="0.0.0.0",  # 允许外部访问        port=8080,       # 端口号        reload=True      # 开发模式自动重载(生产环境建议设为False)    )

启动服务python app.py

访问分析接口

在容器外访问接口

curl --location --request POST 'http://localhost:8080/analysis' \--header 'Content-Type: application/json' \--data-raw '{"texts": ["南征北战"]}'

返回结果如下

{    "results": [        {            "text": "南征北战",            "labels": [                "正面",                "负面"            ],            "scores": [                0.8927718997001648,                0.10722804069519043            ]        }    ]}

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

ModelScope StructBERT 情感分析 API接口 Docker
相关文章