Hugging Face Transformers
Hugging Face Transformers库是什么?
Hugging Face Transformers是一个 Python库,允许用户下载和训练机器学习(ML)模型。它最初被创建用于开发语言模型,现在功能已扩展到包括多模态、计算机视觉和音频处理等其他用途的模型。
- Transformers提供了数以千计的预训练模型,支持100多种语言的文本分类、信息抽取、问答、摘要、翻译、文本生成。它的宗旨是让最先进的NLP技术人人易用。
- Transformers提供了便于快速下载和使用的API,让你可以把预训练模型用在给定文本、在你的数据集上微调然后通过modelhub与社区共享。同时,每个定义的Python 模块均完全独立,方便修改和快速研究实验。
- Transformers 支持三个最热门的深度学习库:Jax,PyTorch以及TensorFlow并与之无缝整合。你可以直接使用一个框架训练你的模型然后用另一个加载和推理。
Hugging Face Transformers 库独特价值
- 丰富的预训练模型:提供广泛的预训练模型,如BERT、GPT、T5等,适用于各种NLP任务。
- 易于使用:设计注重易用性,使得即使没有深厚机器学习背景的开发者也能快速上手。
- 最新研究成果的快速集成:经常更新,包含最新的研究成果和模型。
- 强大的社区支持:活跃的社区不断更新和维护库,提供技术支持和新功能。
- 跨框架兼容性:支持多种深度学习框架,如PyTorch、TensorFlow,提供灵活选择。
- 高度灵活和可定制化:允许用户根据需求定制和调整模型,进行微调或应用于特定任务。
- 广泛的应用范围:适用于从文本分类到语言生成等多种NLP应用,以及其他模态的扩展。
官网地址: https://huggingface.co/
Hugging Face Transformers核心功能模块
Hugging Face Transformers核心功能模块包括使用 Pipelines 快速实践大模型、使用 Tokenizer 编解码文本以及使用 Models 加载和保存模型。
Pipelines快速实践大模型
Pipelines(管道)是使用模型进行推理的一种简单易上手的方式。这些管道是抽象了Transformers库中大部分复杂代码的对象,提供了一个专门用于多种任务的简单API,包括命名实体识别、掩码语言建模、情感分析、特征提取和问答等。
目前Pipelines预定义支持的四种模态:Audio、Computer Vision、Natural language processing和Multimodal。这些预定义支持的不同模态对应支持不同的任务,而这些任务甚至不需要人工指定使用哪些模型。只要开发环境有GPU,甚至是CPU,就可以运行封装的服务。
Pipeline API
Pipeline API是对所有其他可用管道的包装。它可以像任何其他管道一样实例化,并且降低AI推理的学习和使用成本。从Pipeline API内部结构来看,可以把Pipeline API的调度看成三个大的模块,即前处理、大模型以及后处理。首先需要在huggingface上拉取一个模型,然后与前处理、后处理进行对接。需要注意的是,对接的模块并非由Pipeline上的模块进行,而是由它调用底层的一些模块来实现的。整个Huggingface Transformers的核心就是以model为中心,根据model前后处理需求,再通过自己的函数库找到对应的tokenizer和model。整体抽象最终以流水线的形式展开,以下为Pipelines的结构:
使用Pipeline API实现Text Classification任务
Text classification(文本分类)与任何模态中的分类任务一样,文本分类将一个文本序列(可以是句子级别、段落或者整篇文章)标记为预定义的类别集合之一。文本分类有许多实际应用,其中包括:
- 情感分析:根据某种极性(如积极或消极)对文本进行标记,以在政治、金融和市场等领域支持决策制定。
- 内容分类:根据某个主题对文本进行标记,以帮助组织和过滤新闻和社交媒体信息流中的信息(天气、体育、金融等)。
from transformers import pipeline
# 仅指定任务时,使用默认模型(不推荐)
pipe = pipeline("sentiment-analysis")
pipe("今儿上海可真冷啊")
使用Pipelines实现智能问答
from transformers import pipeline
question_answer = pipeline(task = "question-answering")
preds = question_answerer(
question="What is the name of reposition?",
context = "The name of the reposition is huggingface/transformers",
)
print{
f"score: {round(preds['score'], 4)}, start:{preds:['start']}, end:{preds:['end']},answer:{preds['answer']}"
}
Transformers Piplines 运行原理
将同样的语义变成空间向量后,则每一个词最终变成空间里面的一个向量。然而这种方式导致token是无限,因此更适合现将词映射到词表中。具体步骤大致为:分词——>相同向量对应词表,而每个词会有一个ID,ID也可以映射到自定义维度的向量,从而有效地实现了将原始文本转变成统一语义的向量空间。这部分的工作总结为Tokenizer,译为分词器。这些向量经过大模型的计算输出概率,再根据下有任务内容进行后处理,生成最终结果。
使用AutoClass高效管理Tokenizer和Model
通常,模型(网络架构)可以从所提供给from_pretrained()方法的预训练模型的名称或路径中推测出来。AutoClasses就是为了帮助用户完成这个工作,以便根据预训练权重/配置文件/词汇表的名称/路径自动检索相关模型。比如手动加载 bert-base-chinese 模型以及对应的 tokenizer 方法如下:
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
model = AutoModel.from_pretrained("bert-base-chinese")
Transformers AutoClass统一接口设计
可以使用AutoClass的设计理念,保存Model和Tokenizer的方法非常高效便捷。如果对bert-base-chinese模型及其Tokenizer进行修改,并更名为new-bert-base-chinese,使用一下保存方法:
tokenizer.save_pretrained("./models/new-bert-base-chinese")
model.save_pretrained("./models/new-bert-base-chinese")
保存 Tokenizer 会在指定路径下创建以下文件:
tokenizer.json: Tokenizer 元数据文件;
special tokens_map.json:特殊字符映射关系配置文件;
tokenizer config.json: Tokenizer 基础配置文件,存储构建 Tokenizer 需要的参数;
vocab.txt: 词表文件;
added tokens.json: 单独存放新增 Tokens 的配置文件。
保存 Model会在指定路径下创建以下文件:
config.json:模型配置文件,存储模型结构参数,例如Transformer 层数、特征空间维度等;
pytorch_model.bin:又称为 state dictionary,存储模型的权重。
实战Hugging Face Transformers 工具库
huggingface帮助文档 :https://huggingface.co/docs/transformers/notebooks
模型主页:https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english/
开发环境的安装