用Transformers和FastAPI快速搭建后端算法api

用Transformers和FastAPI快速搭建后端算法api

如果你对自然语言处理 (NLP, Natural Language Processing) 感兴趣,想要了解ChatGPT是怎么来的,想要搭建自己的聊天机器人,想要做分类、翻译、摘要等各种NLP任务,Huggingface的Transformers库是你不能错过的选择。在Transformers的帮助下,许多任务只需几行代码便能轻松解决。

预训练模型

在Transformer结构中,存在许多的 W W W权重矩阵,训练后具有大量的信息,并且可以保存为文件。如果有大佬训练了效果特别好的模型,他能不能慷慨分享出来,给我们用?幸运的是,真的存在这样一群具有无私开源精神的人,为推动科技发展造福全人类而不懈努力,这便是Huggingface社区的贡献者们。

让我们进入Huggingface的模型库>点击直达一探究竟。

印入眼帘的便是大量的预训练模型,包括著名的BERT、GPT2等,常可以看到以下字眼:

  • large/base/small/tiny/mini:指模型大小;
  • cased/uncased:cased指区分大小写,”Hi”和”hi”是两个不同的词;uncased指预先对文本做lower-case,”Hi”和”hi”都会转成”hi”,于是词表只有小写的单词;
  • zh/fr/en:指语言,中文/法语/英语等;
  • wwm:Whole Word Masking,对全词进行Mask。

在模型首页有三个选项卡Model Card Files Community,作用如下:

  • Model Card:介绍这个模型,对应Files里的README.md。一般都会提供How to use,能用Transformers的几行代码把此模型跑起来。有些模型的右侧会提供Hosted inference API,直接在线尝试使用这个模型;底下还有Spaces,指使用了这些模型的空间,设计了界面,不过俩蛮多时候都不好使。
  • Files:保存了模型的各个文件。点击中间的下载图标即可下载,我试了右键另存为不太行。用PyTorch必要下载:
    1. pytorch_model.bin,模型的参数文件,最大(其他大文件基本都是针对其他类深度学习框架,如TensorFlow的tf_model.h5,不用下载);
    2. config.json,保存模型结构、参数等信息;
    3. vocab.txt(.json),词表文件;
    4. 其他小文件不是每个模型都有,但也请一并下载,可能包括特殊分词和模型结构的.py文件,不可或缺。
  • Community:提供模型的讨论区,结合了GitHub的issue和PR,对模型的问题或改进可以提在这。

开箱即用的pipeline

在Model Card中常见

from transformers import pipeline

使用pipeline,首先需要安装transformers,在pytorch环境配置好的情况下,只需:

pip install transformers

pipeline封装了预训练模型和对应的前处理和后处理环节,可以直接进行包括但不限于以下任务:

任务描述模态Pipeline使用方式
Text classification给一段文本赋上标签NLPpipeline(task=“sentiment-analysis”)
Text generation生成文本NLPpipeline(task=“text-generation”)
Summarization生成一段文本或文档的摘要NLPpipeline(task=“summarization”)
Image classification给图片赋上标签Computer visionpipeline(task=“image-classification”)
Image segmentation给图片的每个像素赋上标签Computer visionpipeline(task=“image-segmentation”)
Object detection预测图像中的对象边界和类别Computer visionpipeline(task=“object-detection”)
Audio classification给音频赋上标签Audiopipeline(task=“audio-classification”)
Automatic speech recognition语音转文本Audiopipeline(task=“automatic-speech-recognition”)
Visual question answering给定图片和问题,给出回答Multimodalpipeline(task=“vqa”)
Document question answering给定带有文档(例如表格)的图片和问题,给出回答Multimodalpipeline(task=“document-question-answering”)
Image captioning给图片起个标题Multimodalpipeline(task=“image-to-text”)

Pipeline使用案例

例如情感分析,我们只需要输入文本,就可以得到其情感标签(积极/消极)以及对应的概率:

from transformers import pipelineclassifier = pipeline("sentiment-analysis")
result = classifier("I've been waiting for a HuggingFace course my whole life.")
print(result)

pipeline会自动完成以下三个步骤:

  1. 将文本预处理为模型的输入格式;
  2. 将预处理好的文本送入模型;
  3. 对模型的预测值进行后处理,输出想要的结果。

pipeline会自动选择合适的预训练模型来完成任务。例如对于情感分析,默认就会选择微调好的英文情感模型 distilbert-base-uncased-finetuned-sst-2-english

要想指定模型,可以加入model参数,如

generator = pipeline("text-generation", model="distilgpt2")

Transformers 库在首次加载时某模型时,会自动缓存模型到~/.cache/huggingface,再次使用时,直接调用缓存好的模型。

如果你也不喜欢这种被人瞒着的感觉,最好下载模型,在本地调用。比如下载好了bert-base-chinese到当前目录,再运行:

classifier = pipeline('text-classification', model='./bert-base-chinese')

这时会报一个warning,说权重没有初始化什么的,这是因为bert本身没有对文本分类任务做训练,所以没有关于分类的权重,需要自己训练,这个会在后面的章节进行学习。

FastAPI搭建后端算法接口

FastAPI是最快的基于 Python 的 Web 框架之一。相比于Flask,有以下特点:

  • FastAPI使用 Pydantic 进行数据验证;
  • Uvicorn提供异步请求能力。

先安装:

pip install fastapi uvicorn

以翻译任务为例,首先新建一个api.py文件,用transformers的pipeline搭建模型:

from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, pipelineTRANS_MODEL_PATH = 'liam168/trans-opus-mt-en-zh'
def trans(text):model = AutoModelForSeq2SeqLM.from_pretrained(TRANS_MODEL_PATH)tokenizer = AutoTokenizer.from_pretrained(TRANS_MODEL_PATH)translation = pipeline("translation_en_to_zh", model=model, tokenizer=tokenizer)return translation(text, max_length=400)

用pydantic定义数据格式,翻译任务就只需要接收模型名称输入文本

from pydantic import BaseModelclass Data(BaseModel):model_name: strinput: str

FastAPI构建服务:

from fastapi import FastAPIapp = FastAPI()
@app.post('/api/trans')
def translate(data_zh: Data):res = {"code": 200,"message": "OK"}msg = data_zh.inputif data_zh.model_name == 'opus':trans_res = trans(msg)res.update({data_zh.model_name: trans_res[0]['translation_text']})return res

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/482180.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

架构师:Dubbo 服务请求失败处理的实践指南

1、简述 在分布式服务中,服务调用失败是不可避免的,可能由于网络抖动、服务不可用等原因导致。Dubbo 作为一款高性能的 RPC 框架,提供了多种机制来处理服务请求失败问题。本文将介绍如何在 Dubbo 中优雅地处理服务请求失败,并结合具体实践步骤进行讲解。 2、常见处理方式 …

shell语法(1)bash

shell是我们通过命令行与操作系统沟通的语言,是一种解释型语言 shell脚本可以直接在命令行中执行,也可以将一套逻辑组织成一个文件,方便复用 Linux系统中一般默认使用bash为脚本解释器 在Linux中创建一个.sh文件,例如vim test.sh…

探索文件系统,Python os库是你的瑞士军刀

文章目录 探索文件系统,Python os库是你的瑞士军刀第一部分:背景介绍第二部分:os库是什么?第三部分:如何安装os库?第四部分:简单库函数使用方法1. 获取当前工作目录2. 改变当前工作目录3. 列出目…

Paper -- 建筑物高度估计 -- 基于深度学习、图像处理和自动地理空间分析的街景图像建筑高度估算

论文题目: Building height estimation from street-view imagery using deep learning, image processing and automated geospatial analysis 中文题目: 基于深度学习、图像处理和自动地理空间分析的街景图像建筑高度估算 作者: Ala’a Al-Habashna, Ryan Murdoch 作者单位: …

FTP介绍与配置

前言: FTP是用来传送文件的协议。使用FTP实现远程文件传输的同时,还可以保证数据传输的可靠性和高效性。 介绍 FTP的应用 在企业网络中部署一台FTP服务器,将网络设备配置为FTP客户端,则可以使用FTP来备份或更新VRP文件和配置文件…

DDD领域应用理论实践分析回顾

目录 一、DDD的重要性 (一)拥抱互联网黑话(抓痛点、谈愿景、搞方法论) (二)DDD真的重要吗? 二、领域驱动设计DDD在B端营销系统的实践 (一)设计落地步骤 &#xff0…

【聚类】K-Means 聚类(无监督)及K-Means ++

1. 原理 2. 算法步骤 3. 目标函数 4. 优缺点 import torch import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.decomposition import PCA import torch.nn as nn# 数据准备 # 生成数据:100 个张量&#xff0c…

C++学习日记---第14天(蓝桥杯备赛)

笔记复习 1.对象的初始化和清理 对象的初始化和清理是两个非常重要的安全问题,一个对象或者变量没有初始状态,对其使用后果是未知,同样的使用完一个对象或者变量,没有及时清理,也会造成一定的安全问题 构造函数&…

网络安全防护指南:筑牢网络安全防线(5/10)

一、网络安全的基本概念 (一)网络的定义 网络是指由计算机或者其他信息终端及相关设备组成的按照一定的规则和程序对信息收集、存储、传输、交换、处理的系统。在当今数字化时代,网络已经成为人们生活和工作中不可或缺的一部分。它连接了世…

【最新鸿蒙开发——应用导航设计】

大家好,我是小z,不知道大家在开发过程中有没有遇到模块间跳转的问题,今天给大家分享关于模块间跳转的三种方法 文章目录 1. 命名路由(ohos.router)使用步骤 2. 使用navigation组件跳转。步骤缺点 3. 路由管理模块1. 路由管理模块…

Wireshark常用功能使用说明

此处用于记录下本人所使用 wireshark 所可能用到的小技巧。Wireshark是一款强大的数据包分析工具,此处仅介绍常用功能。 Wireshark常用功能使用说明 1.相关介绍1.1.工具栏功能介绍1.1.1.时间戳/分组列表概况等设置 1.2.Windows抓包 2.wireshark过滤器规则2.1.wiresh…

【进阶篇-Day15:JAVA线程-Thread的介绍】

目录 1、进程和线程1.1 进程的介绍1.2 并行和并发1.3 线程的介绍 2、JAVA开启线程的三种方法2.1 继承Thread类:2.2 实现Runnable接口2.3 实现Callable接口2.4 总结: 3、线程相关方法3.1 获取和设置线程名字的方法3.2 线程休眠方法:3.3 线程优…

组播基础实验

当需要同时发给多个接受者或者接收者ip未知时使用组播 一、组播IP地址 1、组播IP地址范围 组播地址属于D类地址:224.0.0.0/4(224.0.0.0-239.255.255.255) 2、分类 (1)链路本地地址(link-local&#xf…

EasyDarwin搭建直播推流服务

学习链接 easydarwin官网 - 这里看介绍 easydarwin软件下载地址 - 百度网盘 easydarwin视频 B站 文章目录 学习链接使用下载EasyDarwin压缩包,并解压到目录启动EasyDarwin点播直播easyplayer.jsapidocffmpeg推流rtsp & ffplay拉流 使用 下载EasyDarwin压缩包…

Java有关数组的相关问题

Java中的栈和堆的含义 栈 存储局部变量:栈主要用于存储方法中的局部变量,包括基本数据类型(int、double、boolean等)和对象的引用(不包含对象本身)。 遵循后进先出原则:当一个方法被调用时&…

眼部按摩仪WT2605音频蓝牙语音芯片方案 单芯片实现语音提示及控制/手机无线音频传输功能

随着科技的快速发展,人们的生活方式也在不断改变,智能化、便捷化的产品逐渐成为市场的主流。眼部按摩仪作为一种结合了现代科技与健康生活理念的产品,受到了广大消费者的青睐。而在众多眼部按摩仪中,采用WT2605音频蓝牙芯片的方案…

ESP32-S3模组上跑通ES8388(12)

接前一篇文章:ESP32-S3模组上跑通ES8388(11) 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回解析了es8388_init函数中的第5段代码,本回继续往下解析。为了便于理解和回顾,再次贴出es8388_init函数源码,在…

C#VB.NET开发整体一键国际化显示

第一章链接 第二章 窗口多国语言显示 在第一章时我们已经了解如何对内容进行多语言化下面讲解如何对窗口多语言显示 在实际开发中单个窗体内可能有很多控件,如果我们对每个控件使用Mu方法进行赋值是异常繁琐的如下 Button1.Text"显示".Mu(); 在对窗口进行多语言化SG…

Linux---对时/定时服务

文章目录 目录 文章目录 前言 一.对时服务 服务端配置 客户端配置 二.定时服务 单次定时任务 循环定时任务 前言 在当今信息化高速发展的时代,时间的准确性和任务的定时执行对于各种系统和服务来说至关重要。Linux操作系统,凭借其强大的功能和灵活的…

centos更换源文件,换源,替换源

期初怎么折腾就是不行,换了源也是不能使用的,最后发现不是换的源不行,而是之前的源文件不行,然后给所有的源文件在yum源统一放在了bak目录下,随后我们再去下载安装源文件。 您将yum源下载之后,先将您的其他…