构建与部署英中/中英翻译API:使用FastAPI和Hugging Face 模型

如何部署一个英中/中英翻译模型接口并调用

在这篇博客中,我们将探讨如何利用Hugging Face上的预训练模型,部署一个简单的翻译服务,实现从英文到中文以及从中文到英文的翻译。这个过程涉及到设置一个FastAPI服务器,以及如何从客户端调用该服务。

模型来源:

下载使用模型时仅需如图文件即可
模型文件

环境配置

首先,我们需要准备Python环境,并安装以下依赖:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple uvicorn==0.27.1 fastapi==0.109.2 sacremoses==0.1.1 sentencepiece==0.2.0 transformers==4.32.0

这些依赖包括FastAPI用于创建Web服务,Uvicorn作为ASGI服务器,以及Transformers库来加载和使用翻译模型。

服务器端设置

服务器端代码如下:

from fastapi import FastAPI, Request
import uvicorn

app = FastAPI()

# 初始化函数,加载模型和分词器
def init_opus():
    from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
    model_path = './model/opus-mt-en-zh'  # 模型路径,根据需要调整为英中或中英模型路径
    tokenizer = AutoTokenizer.from_pretrained(model_path)  # 加载分词器
    model = AutoModelForSeq2SeqLM.from_pretrained(model_path)  # 加载模型

    return tokenizer, model

# 翻译函数,接收英文文本,返回中文翻译结果
def en_zh_translate(text, tokenizer, model):
    from transformers import pipeline
    translation_pipeline = pipeline("translation", model=model, tokenizer=tokenizer, device=0)  # 创建翻译pipeline

    finaltext = translation_pipeline(text)  # 执行翻译
    return finaltext[0]['translation_text']  # 返回翻译文本

# 全局初始化模型和分词器
translate_tokenizer, translate_model = init_opus()

# 定义API路由,处理POST请求
@app.post('/translate')
async def translate_text(request: Request):
    data = await request.json()  # 解析请求体中的JSON数据
    text_to_translate = data['text']  # 获取要翻译的文本

    # 调用翻译函数
    translated_text = en_zh_translate(text_to_translate, translate_tokenizer, translate_model)
    print(f"{text_to_translate} ---> {translated_text}")  # 打印原文和翻译结果
    return {'translated_text': translated_text}  # 返回翻译后的文本

# 启动服务器
if __name__ == "__main__":
    uvicorn.run("fastapi_translation_server:app", host="0.0.0.0", workers=4, port=8097, reload=True, log_level="info")

客户端调用

客户端代码如下:

import requests
import json

# 翻译函数,发送POST请求到服务器
def translate(text):
    url = 'http://localhost:8097/translate'  # API地址
    headers = {'Content-Type': 'application/json'}  # 设置请求头
    data = {'text': text}  # 准备请求数据

    # 发送请求
    response = requests.post(url, headers=headers, data=json.dumps(data))

    # 根据响应状态码处理结果
    if response.status_code == 200:
        return response.json()['translated_text']  # 返回翻译文本
    else:
        return 'Error: Unable to get translation.'  # 错误处理
    
# 主函数,示例用法
if __name__ == '__main__':
    english_text = "Yesterday is history, tomorrow is a mystery, but today is a gift. That is why it is called the present."
    translated_text = translate(english_text)  # 调用翻译函数
    print(f"Translated Text: {translated_text}")  # 打印翻译结果

通过这个简单的客户端示例,我们可以将英文文本发送到我们的翻译服务,并获取翻译后的中文文本。

总结

本文介绍了如何部署和使用Hugging Face预训练模型进行英文到中文以及中文到英文的翻译服务。我们通过FastAPI搭建了服务器,并展示了如何从客户端进行调用。希望这篇博客对你有所帮助!

如有更多问题或特定需求,可以留言讨论。
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值