如何部署一个英中/中英翻译模型接口并调用
在这篇博客中,我们将探讨如何利用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搭建了服务器,并展示了如何从客户端进行调用。希望这篇博客对你有所帮助!
如有更多问题或特定需求,可以留言讨论。