HuggingFace详细介绍
HuggingFace是啥
Hugging Face 是一个专注于 人工智能(尤其是自然语言处理 NLP) 的开源平台和社区,你可以把它理解为 “AI 模型的 GitHub”。它的核心目标是让先进的机器学习模型(尤其是大语言模型)的开发、训练、部署和共享变得民主化和便捷化。
Hugging Face的关键组成部分和功能
- 🤗 Transformers 库:这是 Hugging Face 最著名的开源 Python 库。它提供了成千上万的预训练模型(包括像 BERT、GPT、RoBERTa、T5、Stable Diffusion 等各种著名架构),涵盖了文本、图像、音频、多模态等多种任务。使用极其简单:只需几行代码,你就能加载一个预训练模型进行文本分类、问答、文本生成、翻译、图像生成、语音识别等任务。极大地降低了开发者和研究人员使用最先进模型的门槛。
2.🧠 Model Hub:一个庞大的在线模型仓库。用户可以在这里免费上传、下载、共享、搜索各种机器学习模型(不仅仅是 NLP 的 Transformers 模型,也包括 PyTorch、TensorFlow、Keras、ONNX 等其他框架训练的模型,以及图像、语音模型)。每个模型都有介绍页面、使用说明、示例代码(通常在 Transformers 库中可以加载)、训练数据信息、许可证等。许多著名公司(谷歌、微软、Meta、英伟达等)和研究机构都会在这里发布他们的开源模型。 - 📊 Datasets 库:提供用于加载和处理各种公开数据集的库。用户可以轻松访问大量用于训练和评估模型的 NLP、计算机视觉、音频等领域的数据集。对数据集进行了标准化处理,使用方便。
- 🚀 Spaces:一个让用户快速构建、托管和分享 ML 应用演示(Demo) 的平台。通过 Gradio 或 Streamlit 库,用户可以轻松创建交互式网页界面来展示自己的模型功能,无需复杂的前后端开发。极大地促进了模型的展示、交流和反馈。
- 🤝 Community:拥有非常活跃的开发者、研究者和爱好者社区。用户可以在论坛提问、讨论、分享知识和项目。开源精神浓厚,推动了 AI 技术的快速迭代和协作。
Hugging Face关键组件使用
Hugging Face的主要使用组件主要有以下四类:pipeline、tokenizer、model、datasets,下面将依次介绍一下这四个基本组件的使用。
需要注意的是,transformers在使用的使用对torch版本有要求,如果torch版本小于2.5会进行报错,无法正确加载模型导致出错,建议是使用conda重新创建一个虚拟环境进行操作,下面是使用conda创建虚拟环境的shell命令:
conda create -n huggingface python=3.10
安装成功之后,激活对应的虚拟环境
conda activate huggingface
安装对应的torch版本,这里我推荐使用的是torch2.5.0
pip install torch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 --index-url https://download.pytorch.org/whl/cu124
在使用Hugging Face之间需要安装transformers这个库
pip install transformers
进行上述的步骤之后,transformers这个库就已经成功安装了,有可能网络原因会比较缓慢,缓慢的话建议将包的链接复制到迅雷中,然后再手动进行安装
pipeline
将数据预处理、模型调用、结果后处理三部分组成的流水线,使我们能够直接输入文本获取最终的答案
在加载模型中,已经huggingface网站不能直接访问,建议可以使用阿里的魔搭社区将模型下载到本地进行本地加载,不然会半天下载不下来
from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
# 创建model
model = AutoModelForCausalLM.from_pretrained(
pretrained_model_name_or_path=rf"E:\develop\huggingfaceModel\Qwen2.5-0.5B"
)
# 创建tokenizer
tokenizer = AutoTokenizer.from_pretrained(rf"E:\develop\huggingfaceModel\Qwen2.5-0.5B")
# 创建pipe
pipe = pipeline(task="text-generation", model=model, tokenizer=tokenizer)
# 调用pipe
pipe("详细讲解一下冒泡排序")

如果运行出来上述的结果,那么pipeline就已经完成了
tokenizer
tokenizer就是分词器,是一个将连续的文本(比如句子、段落、文章)转换成更小的、有意义的单元(称为 Token) 的过程或组件。你可以把它想象成一把“文本剪刀”,将一大块布料(文本)剪裁成适合后续处理和加工的碎片(Token)。
为什么需要 Tokenizer?
人类可以自然地阅读和理解连续的文字流。但对计算机(尤其是深度学习模型)来说:
- 模型无法直接理解文本: 模型本质上处理的是数字,而不是原始的字符或单词。
- 文本的复杂性: 文本长度可变、包含大量不同的词汇(很多词汇模型从未见过)、词形变化(walk, walks, walked)、标点、大小写、缩写、特定领域的术语等。
- 效率问题: 直接处理每个字符效率很低(序列太长),而把所有可能的单词都当作独立单元(称为词表 Vocabulary)来处理会导致词表过大(Out-of-vocabulary 未登录词问题)。
Tokenizer 的主要作用:
- 文本标准化: 处理大小写(可能统一为小写)、标点符号(移除、保留或特殊处理)、数字、特殊字符(如@、#等)、空白符(空格、换行等)。
- 切分文本: 按照一定的规则或策略,将标准化后的文本分割成离散的 Token。
- 建立词表 (Vocabulary): Tokenizer 会维护或生成一个 词表,它包含了模型认识的所有可能的 Token。每个 Token 在词表中对应一个唯一的 ID(一个整数)。
4. 将 Token 映射为数字 ID: 将切分好的 Token 列表转换为模型能够处理的数字 ID 列表(input_ids)。这是模型输入的真正形式。
处理未登录词: 处理那些不在预定义词表中的词(Out-of-vocabulary words, OOV)。常见策略包括拆分成子词(Subword)或使用特殊标记(如 [UNK])。
加载Tokenizer

在huggingface中有非常多的模型,如上图 左边是对应的模型类型,这些我加载了一个roberta-base-finetuned-dianping-chinese,因为小所以才加载的,是一个文本分类模型,怎么查看是什么模型呢,在huggingface上面,点击模型可以查看到具体的模型信息

点击use this model 可以使用该模型,下面是模型的加载
from transformers import AutoModelForSequenceClassification
# 加载文字分类模型、分词器
classify_tokenizer = AutoTokenizer.from_pretrained(
rf"E:\develop\huggingfaceModel\roberta-base-finetuned-dianping-chinese"
)
classify_model = AutoModelForSequenceClassification.from_pretrained(
rf"E:\develop\huggingfaceModel\roberta-base-finetuned-dianping-chinese"
)
在这些大模型训练的过程中,例如该中文模型,都会将中文、标点符号、特殊字符等全部使用Embedding进行词向量嵌入,然后在使用transformer的Encoder对模型进行语义识别等。所以这里的Tokenizer其实做的事情就是将已经训练好的大模型,根据自己的权重文件,将句子进行分词之后向量化,下面是例子:
input_text = "学习huggingface"
# 分词器 将输入的文本进行分词 返回tensor
inputs = tokenizer(input_text, return_tensors="pt")
inputs
如下图,即为大模型将文本分词之后进行的向量化

# 根据字来进行分词 一个字一个字的分词
classify_inputs = classify_tokenizer.tokenize("你吃饭了吗")
classify_inputs

# 查看词库
print(classify_tokenizer.vocab)
print(classify_tokenizer.vocab_size)
# 找到每个词在词库中的索引
ids = classify_tokenizer.convert_tokens_to_ids(classify_inputs)
print(ids)
# 找到索引对应的词
tokens = classify_tokenizer.convert_ids_to_tokens(ids)
print(tokens)
# 词转换成字符串
print(classify_tokenizer.convert_tokens_to_string(tokens))
# encode
# add_special_tokens 去除特殊符号
encode_ids = classify_tokenizer.encode("你吃饭了吗", add_special_tokens=False)
print(encode_ids)
decode_str = classify_tokenizer.decode(encode_ids, skip_special_tokens=False)
decode_str
model
Transformers 提供了许多预训练模型,只需一行代码即可使用。它需要一个 model 类和 from_pretrained() 方法。
调用 from_pretrained() 以下载并加载存储在 Hugging Face Hub 上的模型权重和配置。
加载两种常规类型的模型:
- 输出隐藏状态的准系统模型,如 AutoModel 或 LlamaModel。
- 附加了特定头部的模型,如 AutoModelForCausalLM 或 LlamaForCausalLM,用于执行特定任务。
要获得预训练模型,您需要将权重加载到模型中。这是通过调用 from_pretrained() 来完成的,它接受来自 Hugging Face Hub 或本地目录的权重。
from transformers import AutoModel,AutoConfig
# 此时从hugging face hub中拉取对应的代码
model = AutoModel.from_pretrained("hfl/rbt3")
# 从本地文件路径中获取对应的模型
model = AutoModelForCausalLM.from_pretrained(
pretrained_model_name_or_path=rf"E:\develop\huggingfaceModel\Qwen2.5-0.5B"
)
下面是一些模型的基本使用:
# 查看模型配置
# model.config
config = AutoConfig.from_pretrained("hfl/rbt3")
# 模型的配置在config.json文件中
sen = "今天天气真好"
tokenizer_rbtt3 = AutoTokenizer.from_pretrained("hfl/rbt3")
inputs = tokenizer_rbtt3(sen,return_tensors="pt")
inputs
# 如果要加载对应的模型用分类的话 就不能使用AutoModel
# rbt3_result = model(**inputs,num_labels=2)
# rbt3_result
# 通过修改num_labels参数来修改模型输出的维度 num_labels=10 模型输出十分类
rbt3_model = AutoModelForSequenceClassification.from_pretrained("hfl/rbt3",num_labels=10)
rbt3_result = rbt3_model(**inputs)
rbt3_result
# 保存模型
model.save_pretrained("./model")
datasets
在 Hugging Face 的 transformers 生态中,datasets 库 (🤗 Datasets) 是一个独立但高度关联、功能强大的开源库,专门用于简化机器学习数据集的加载、处理和共享。它最初是为了服务于 NLP 任务而设计的,但现在已扩展支持计算机视觉 (CV)、音频、多模态等广泛的机器学习领域。
理解 🤗 Datasets 的关键点:
- 提供统一的 API: 用简单一致的接口 (load_dataset) 加载成千上万的公开数据集,无论其原始格式 (CSV, JSON, JSON Lines, Parquet, SQL, text, image folders, audio folders 等) 如何。
- 高效处理大数据: 利用 Apache Arrow 和 内存映射 (memory-mapping) 技术,实现超快加载和极低内存占用,即使处理远大于内存容量的数据集也能轻松应对。
- 内置强大预处理: 提供类似于 Pandas 的链式方法 (.map, .filter, .shuffle, .select 等),结合无缝集成的 tokenizer (来自 transformers) 进行高效特征工程和文本预处理。
- 促进数据标准与共享: 定义清晰的数据集结构 (Dataset 和 DatasetDict 对象),方便与 Transformers 模型训练 (Trainer) 集成,并简化数据集在 Hugging Face Hub 上的共享。
📦 核心概念与组件
- Dataset 对象:
- 这是数据集的核心表示形式。
- 内部基于 Apache Arrow Table,提供了列式存储和高效的序列化。
- 行为类似于一个内存中数据库表或一个Pandas DataFrame,但它的大部分数据实际上是通过内存映射缓存在磁盘上的 Arrow 文件里,当你真正访问某个列或某行时,才从磁盘动态加载所需部分。这就是它能处理海量数据集而不撑爆内存的魔法所在。
- 支持索引访问 dataset[0] (获取一行) 和切片 dataset[10:20] (获取多行)。
- 有明确的列名 (dataset.column_names) 和特征定义 (dataset.features),描述了每列的数据类型 (文本、图像、音频、标签、列表等)。
- DatasetDict 对象:
- 这通常是调用 load_dataset 后返回的主要对象。
- 它是一个字典 (dict) 结构,键是数据集的分割名 (如 ‘train’, ‘test’, ‘validation’),值是对应的 Dataset 对象。
# 加载线上数据集
from datasets import load_dataset
"""
easy 表示的是数据集中的sub datasets
split 可以划分数据集的大小 其中下面的train[:50]表示训练集的前50条数据
"""
train_data = load_dataset("MiniMaxAI/SynLogic",'easy',split='train[:50%]')
train_data
print(train_data[0])
# 根据索引过滤数据
train_data.select([1,2,3])
# 过滤数据
# train_data.filter(lambda x:x['label']==1)
# 加载本地数据
from datasets import load_from_disk
load_from_disk_train_data_map = load_from_disk('./train_data_map')
load_from_disk_train_data_map
2万+




被折叠的 条评论
为什么被折叠?



