Hugging Face(二) - Models详述

Models(模型)是Hugging Face Hub的核心,这里对于如何下载预训练模型,采用Transformers进行加载、微调等做一个充分的介绍。

Models下载

其实用户可以手动下载,比如在页面:下载页面去下载。

也可以通过代码去下载:

from huggingface_hub import hf_hub_download
import joblib

REPO_ID = "stabilityai/stable-diffusion-xl-base-1.0"
FILENAME = "sd_xl_base_1.0.safetensors"

model = joblib.load(
    hf_hub_download(repo_id=REPO_ID, filename=FILENAME)
)

也可以通过Transformers库下载,后面会介绍到。

除了下载外,有很多libraries也支持Hub,或者说这些库和Hub进行了良好的集成,可以参见:模型库

Transformers

Transformers是用于NLP开发的模型,由Hugging Face开发的一个library,和Hub进行了集成,在Hub上面,很多模型都是基于transformers开发的,这些models的功能有很多:

  • NLP:文本分类,命名实体识别,问答,语言模型,摘要,翻译,文本生成
  • 计算机视觉:文本分类,目标检测,分割
  • 音频:语音识别,语音分类
  • 多模态:表格问答,OCR,信息抽取,视频分类,视觉问答

Transformers提供了快速的下载和使用的API,可以使用预训练数据,也可以在用户自己的数据集、文本上进行微调,然后分享到社区中。支持三个最热门的深度学习库:JaxPyTorch 以及 TensorFlow,也就是说,可以用一个框架来训练,用另外一个框架来加载和推理。

模型都是可以在线体验的,比如:


image.png

比较强悍的是,Hugging Face提供了私有模型托管服务,包括模型版本管理,推理API。

安装

需要安装一些必要的库:

$ pip install transformers datasets evaluate accelerate
$ pip install torch

快速上手

  • 使用 pipeline:使用预训练模型做inference的最简单方式
from transformers import pipeline

classifier = pipeline(task='sentiment-analysis')
classifier('you are so beautiful.')

# result
[{'label': 'POSITIVE', 'score': 0.9998807907104492}]

模型会在缓存中保留:

$ ls ~/.cache/huggingface/hub/
models--distilbert--distilbert-base-uncased-finetuned-sst-2-english
models--stabilityai--stable-diffusion-xl-base-1.0
version.txt

要看transformers支持的任务,可以查阅这里

  • 使用 AutoTokenizer, TFAutoModel
from transformers import AutoTokenizer, AutoModel

tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased")
model = AutoModel.from_pretrained("google-bert/bert-base-uncased")

inputs = tokenizer("Hello world!", return_tensors="pt")
outputs = model(**inputs)

注意tokenizer,Tokenizer的作用就是将连续的文本切分成离散的Token,并为每个Token分配一个唯一的标识符(ID),以便于模型进行后续的处理。

Tokenizer的工作原理可以分为两个主要步骤:词汇表构建和文本切分。

1)词汇表构建

词汇表是Tokenizer工作的基础,它包含了所有可能出现的Token。在构建词汇表时,通常会使用大量的语料库数据进行统计,从而得到一个包含所有出现过的单词、标点符号和子词的列表。此外,为了提高模型的泛化能力,通常还会在词汇表中添加一些特殊的Token,如<unk>(未知词)、<pad>(填充词)和<eos>(句尾标记)等。

2)文本切分

在文本切分阶段,Tokenizer会根据词汇表将输入文本拆分成一系列Token。对于每个Token,Tokenizer会查找其在词汇表中的ID,并将这个ID作为该Token的数值表示。如果某个Token不在词汇表中,则通常会将其视为未知词,并使用<unk>的ID进行替换。

  • 在pipeline()中设置model,tokenizer
from transformers import AutoTokenizer, AutoModelForSequenceClassification

model_name = "nlptown/bert-base-multilingual-uncased-sentiment"

model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

classifier = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)
classifier("you are not so cool.")

参考transformers详细文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容