从本地脚本到生产级API:将bleurt-tiny-512封装为高可用评分服务
【免费下载链接】bleurt-tiny-512 项目地址: https://gitcode.com/mirrors/lucadiliello/bleurt-tiny-512
引言
你是否曾经在本地运行过bleurt-tiny-512,用它来评估文本相似度,却苦于无法将其能力集成到你的应用或服务中?一个强大的文本评分模型,如果仅仅停留在本地脚本阶段,其价值是有限的。而当你将其封装为API服务时,它就能为你的产品、网站或App提供实时的文本评分能力,甚至成为你商业逻辑的一部分。本文将带你一步步完成这一蜕变,将bleurt-tiny-512从本地脚本升级为生产级API服务。
技术栈选型与环境准备
推荐技术栈
我们选择FastAPI作为Web框架,原因如下:
- 轻量级:FastAPI基于Starlette和Pydantic,性能优异且易于上手。
- 异步支持:天然支持异步请求处理,适合高并发场景。
- 自动文档生成:内置Swagger UI和ReDoc,方便调试和API文档管理。
环境准备
创建一个requirements.txt文件,包含以下依赖:
fastapi>=0.68.0
uvicorn>=0.15.0
torch>=1.9.0
transformers>=4.12.0
bleurt-pytorch
安装依赖:
pip install -r requirements.txt
核心逻辑封装:适配bleurt-tiny-512的推理函数
模型加载与推理函数
我们将read_me中的代码封装为两个函数:load_model和run_inference。
import torch
from bleurt_pytorch import BleurtConfig, BleurtForSequenceClassification, BleurtTokenizer
from typing import List, Dict, Any
def load_model():
"""加载bleurt-tiny-512模型及其分词器"""
config = BleurtConfig.from_pretrained('lucadiliello/bleurt-tiny-512')
model = BleurtForSequenceClassification.from_pretrained('lucadiliello/bleurt-tiny-512')
tokenizer = BleurtTokenizer.from_pretrained('lucadiliello/bleurt-tiny-512')
model.eval() # 设置为评估模式
return model, tokenizer
def run_inference(model, tokenizer, references: List[str], candidates: List[str]) -> List[float]:
"""
运行推理,返回评分结果
:param model: 加载的模型
:param tokenizer: 加载的分词器
:param references: 参考文本列表
:param candidates: 候选文本列表
:return: 评分结果列表
"""
with torch.no_grad():
inputs = tokenizer(references, candidates, padding='longest', return_tensors='pt')
res = model(**inputs).logits.flatten().tolist()
return res
代码说明
- 输入参数:
references和candidates均为字符串列表,分别表示参考文本和候选文本。
- 输出:
- 返回一个浮点数列表,表示每对文本的相似度评分。
API接口设计:优雅地处理输入与输出
设计API端点
我们将创建一个FastAPI应用,提供一个/score端点,接收JSON格式的输入并返回评分结果。
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class ScoreRequest(BaseModel):
references: List[str]
candidates: List[str]
model, tokenizer = load_model()
@app.post("/score")
async def score(request: ScoreRequest):
"""接收参考文本和候选文本,返回评分结果"""
scores = run_inference(model, tokenizer, request.references, request.candidates)
return {"scores": scores}
代码说明
- 输入:
- 通过POST请求发送JSON数据,包含
references和candidates字段。
- 通过POST请求发送JSON数据,包含
- 输出:
- 返回JSON格式的评分结果,例如:
{"scores": [0.86, 0.72]}。
- 返回JSON格式的评分结果,例如:
实战测试:验证你的API服务
启动服务
uvicorn main:app --reload
测试API
使用curl测试:
curl -X POST "http://127.0.0.1:8000/score" \
-H "Content-Type: application/json" \
-d '{"references": ["a bird chirps by the window", "this is a random sentence"], "candidates": ["a bird chirps by the window", "this looks like a random sentence"]}'
预期输出:
{"scores": [0.8606632947921753, 0.7198279500007629]}
生产化部署与优化考量
部署方案
- Gunicorn + Uvicorn Worker:
gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app - Docker: 创建一个
Dockerfile,基于Python镜像安装依赖并运行服务。
优化建议
- 批量推理: 如果请求量较大,可以优化
run_inference函数,支持批量处理多个请求。 - 显存管理: 对于GPU部署,注意显存占用,可以通过调整
batch_size或使用梯度检查点技术优化。
通过本文的指导,你已经成功将bleurt-tiny-512从本地脚本封装为生产级API服务。现在,你可以将其集成到任何需要文本评分能力的应用中,释放其真正的价值!
【免费下载链接】bleurt-tiny-512 项目地址: https://gitcode.com/mirrors/lucadiliello/bleurt-tiny-512
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



