【限时免费】 从本地脚本到生产级API:将bleurt-tiny-512封装为高可用评分服务

从本地脚本到生产级API:将bleurt-tiny-512封装为高可用评分服务

【免费下载链接】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框架,原因如下:

  1. 轻量级:FastAPI基于Starlette和Pydantic,性能优异且易于上手。
  2. 异步支持:天然支持异步请求处理,适合高并发场景。
  3. 自动文档生成:内置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_modelrun_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

代码说明

  1. 输入参数
    • referencescandidates均为字符串列表,分别表示参考文本和候选文本。
  2. 输出
    • 返回一个浮点数列表,表示每对文本的相似度评分。

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}

代码说明

  1. 输入
    • 通过POST请求发送JSON数据,包含referencescandidates字段。
  2. 输出
    • 返回JSON格式的评分结果,例如:{"scores": [0.86, 0.72]}

实战测试:验证你的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]}

生产化部署与优化考量

部署方案

  1. Gunicorn + Uvicorn Worker
    gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
    
  2. Docker: 创建一个Dockerfile,基于Python镜像安装依赖并运行服务。

优化建议

  1. 批量推理: 如果请求量较大,可以优化run_inference函数,支持批量处理多个请求。
  2. 显存管理: 对于GPU部署,注意显存占用,可以通过调整batch_size或使用梯度检查点技术优化。

通过本文的指导,你已经成功将bleurt-tiny-512从本地脚本封装为生产级API服务。现在,你可以将其集成到任何需要文本评分能力的应用中,释放其真正的价值!

【免费下载链接】bleurt-tiny-512 【免费下载链接】bleurt-tiny-512 项目地址: https://gitcode.com/mirrors/lucadiliello/bleurt-tiny-512

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值