如果说 PyTorch 是造车的发动机,那 HuggingFace 就是直接送了你一辆跑车。

你可以把HuggingFace看成:

  • AI 界的 GitHub: 程序员找代码去 GitHub,AI 工程师找模型和数据去 HuggingFace。它托管了全球最主流的开源模型(Llama, BERT, Stable Diffusion 等)。
  • AI 界的 App Store: 它提供了很多现成的 Pipeline,你不需要懂原理,就能在你的代码里跑起来(比如一键实现情感分析)。

在这里插入图片描述

HuggingFace的核心
我们在写代码时,主要和这三个库打交道:

  • Transformers (库): 工具箱。提供了统一的 Python 接口,可以用几乎相同的代码加载 BERT、GPT 或 Llama。
  • Model Hub (网站): 仓库。存放模型权重文件(.bin 或 .safeten sors)和配置文件(config.json)。
  • Datasets (库): 燃料库。一键下载维基百科、医疗问答、电商评论等海量数据集,并自动处理成模型能读的格式。

Transformer 模型主要分为三个流派,功能截然不同:
1)Encoder-Only (编码器架构)
代表模型:BERT。
能力:擅长理解和分析。
像一个阅读理解满分的学生。你给它一篇文章,它能告诉你文章的情感是正面的还是负面的,或者提取出文章里的人名。
应用:文本分类、实体识别、搜索匹配。

2)Decoder-Only (解码器架构)
代表模型:GPT系列, Llama, Qwen。
能力:擅长生成。
像一个话唠小说家。你给它一个开头,它会根据概率不断猜下一个字是什么。
应用:聊天机器人、代码生成、创意写作。

3)Encoder-Decoder (编解码架构)
代表模型:T5, BART。
能力:擅长转换。
像一个翻译官。听懂一句(Encode),然后重组成另一种语言说出来(Decode)。
应用:机器翻译、文本摘要。

HuggingFace中常用模型
1)NLP(自然语言处理)领域

  • 基础理解类(Encoder-Only):
    BERT / RoBERTa:文本分类、命名实体识别(NER)的首选经典。
    DistilBERT:BERT 的轻量化版本,推理速度更快,适合端侧应用。
  • 生成类(Decoder-Only / 大语言模型):
    Llama 系列 (Meta):目前最主流的开源大模型,适合对话、逻辑推理。
    Qwen 系列 (阿里):中文能力极强,开源社区的热门选择。
    DeepSeek 系列:近期极具性价比的国产模型,常用于生成和思考任务。
    GPT-2:虽然较老,但因其轻量,常作为教学文本生成的入门案例。
  • 翻译与摘要(Encoder-Decoder):
    T5 / FLAN-T5:能够将所有 NLP 任务转换为“文本到文本”的格式。
    BART:擅长文本纠错和长文档摘要。

2)CV(计算机视觉)与多模态领域

  • ViT (Vision Transformer): 图像分类的标杆。
  • Stable Diffusion: 目前最火的开源图像生成模型。
  • CLIP (OpenAI): 连接文本与图像,常用于以图搜图或零样本分类。
任务类型 常用数据集名称 简介
情感分析 IMDb / Amazon Polarity 5万条电影评论/3500万条商品评论,带正负标签。
问答系统 SQuAD / CoQA 斯坦福问答数据集,用于训练模型提取文章中的答案。
大模型预训练 FineWeb / C4 数千亿词规模的清洗后网页文本,是大模型进化的基石。
代码生成 MBPP / CodeContests 包含数千个编程问题及其正确答案。
语音识别 Common Voice Mozilla 提供的多语言开源语音数据集。
中文特定 CLUECorpusSmall 常用中文通用语料库,适合初学者训练中文小模型。

在HuggingFace平台内Datasets,找到对应的数据集,比如:IMDb

模型不仅仅是代码,它是一种能力;
数据集不仅仅是文件,它是知识;
而 Pipeline 则是将能力与知识打包好的一键服务。

Pipeline 是最快的落地方式,Demo 阶段首选。

  • Tokenizer 的 padding 和 truncation 是批处理数据的关键。
  • AutoModelFor… 系列封装了特定任务的头,我们在微调时通常使用这一类模型。

BERT 微调方式: 文本 → Tokenize → 模型前向传播 → Logits → argmax → 类别ID。

大模型 Prompt 方式: 文本 → 构建 Prompt → Tokenize → 模型生成 → 解码文本 → 解析结果 → 类别

什么时候用BERT微调,什么时候用大模型?

  • BERT: 有大量标注数据,任务固定,需要高准确率,快速推理(生产环境),显存有限(1-2GB);
  • 大模型: 没有标注数据,任务多样,需要快速验证,需要零样本学习能力,有足够的显存(8GB+)。

Tokenization概念
模型不认识汉字或英文单词,它只认识数字。Tokenizer 是人类语言和机器数字之间的桥梁。
比如:
Input: “我爱HuggingFace”
Tokenize (切分): [‘我’, ‘爱’, ‘Hugging’, ‘##Face’] (注:BERT常用WordPiece切分)
Convert to IDs (转数字): [2769, 4263, 12890, 8921]
Output: 模型接收的就是这串数字向量。

不同的模型有专属的 Tokenizer,不能混用!
用 BERT 的 Tokenizer 去处理数据喂给 GPT 模型,会报错或输出乱码。

Token 是大型语言模型处理文本的最小单位,也简称 “词元”。由于模型本身无法直接理解文字,因此需要将文本切分成一个个

Token,再将Token转换为数字(向量)进行运算。不同的模型使用不同的“分词器”(Tokenizer)来定义Token。

例如,对于英文 Hello World:
GPT-4o 会切分为 [“Hello“, ”World“] => 对应的 token id = [13225, 5922]。
对于中文“人工智能你好啊”:
DeepSeek-R1会切分为 [“人工智能”, “你好”, “啊”] => 对应的token id = [33574, 30594, 3266]。

大家想详细了解Token的,可以看下我之前写的文章 AI大模型与API之间不得不说的二三事

分词方式的不同会直接影响模型的效率和对语言细节的理解能力。
可以通过 https://tiktokenizer.vercel.app/ 这个工具看到不同模型是如何切分你输入的文本的。

HuggingFace使用环境(针对国内)
我们如果按照官方文档写 model.from_pretrained(‘bert-base-uncased’),在国内大概率会报错ConnectionError。这是因为HuggingFace在外网,网络原因导致报错。

我们有两种最稳妥的解决方案:
方案 1:使用 HF-Mirror (镜像站)
不需要修改代码逻辑,只需要在运行 Python 之前设置一个环境变量,把流量指引到国内镜像站。

import os

# 在 Python 代码最开头(import transformers 之前)加入设置环境变量,使用国内镜像站
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'

from transformers import AutoModel, AutoTokenizer

# 此时会自动从镜像站下载,速度飞快
model = AutoModel.from_pretrained("bert-base-chinese")

方案 2:使用 ModelScope (魔搭社区)
使用阿里的 ModelScope 下载文件,然后用 HuggingFace 加载。
ModelScope 是下载工具,HuggingFace 是加载工具。

# 1. 安装 modelscope: pip install modelscope
from modelscope import snapshot_download
from transformers import AutoModel, AutoTokenizer

# 2. 从 ModelScope 下载模型文件到本地
# 这里的 qwen/Qwen2.5-0.5B 是魔搭上的模型ID,通常和HF同名
model_dir = snapshot_download('qwen/Qwen2.5-0.5B')
print(f"模型已下载到:{model_dir}")

# 3. 使用 HuggingFace 原生库加载(注意:这里传入的是本地路径)
tokenizer = AutoTokenizer.from_pretrained(model_dir)
model = AutoModel.from_pretrained(model_dir)

# 4. 验证是否成功
print("模型加载成功!")

Pipeline与模型应用

Pipeline:一行代码实现AI功能

Pipeline是一个全自动的黑盒。当你把文本扔进去,它自动帮你完成三个繁琐的步骤:

  • 预处理 (Tokenizer): 把文本变成数字。
  • 模型推理 (Model): 模型进行计算,输出一堆看不懂的分数(Logits)。
  • 后处理 (Post-processing): 把分数变成人类能看懂的标签(比如 “Positive”, 99%)。

图像得检测:YOLO模型(目标检测)
分类:BERT(文本分类)
翻译:BART

简单来说,pipeline是huggingface封装得工具,task是pipeline得一个参数。模型不一定都支持所有得task,可以通过help(pipeline)来查看支持哪些task。

Huggingface是傻瓜相机。如果想要深度定制,或者微调模型,就要把 Pipeline 拆开:

核心组件 1:Tokenizer (分词器)
作用: 把文本变成 Tensor (张量)。

  • 加载词表: 必须和模型配套(不能用 BERT 的字典查 GPT 的词)。
  • Padding (填充): 把短句子补长(通常补 0),因为 GPU 喜欢整齐的矩阵。
  • Truncation (截断): 把太长的句子切掉,因为模型有最大长度限制(如 512)。

核心组件2:Model

  • AutoModel (Base Model): 只有大脑。它输出的是隐藏状态 (Hidden States),一堆高维向量,人类看不懂,适合做从头搭建网络。简单来说,我只要看它中间得内容,它的输出是隐藏的。

  • AutoModelForSequenceClassification (带头模型): 大脑 + 嘴巴。它在 Base Model 后面加了一个全连接层(Classification Head),直接输出分类的分数。简单来说,我不仅要看中间的内容,我还要看输出的结果。

pipeline 是 HuggingFace 提供的最简易接口,只需指定 task 名称即可直接调用。

  • NLP 常用任务:
    sentiment-analysis:情感分析,判断文本褒贬。
    text-generation:文本生成,如写故事、续写代码。
    zero-shot-classification:零样本分类,无需训练即可根据自定义标签分类。
    question-answering:问答系统,根据给定的上下文回答问题。
    summarization:自动摘要,将长文浓缩为短句。
    translation_xx_to_yy:翻译任务,如 translation_en_to_zh。
    ner:命名实体识别,提取人名、地名、组织名。
  • CV & 音频 常用任务:
    image-classification:图像分类。
    object-detection:目标检测,识别图中的物体并定位。
    automatic-speech-recognition (ASR):语音转文字。
    text-to-speech (TTS):文字转语音。

pipeline是huggingface封装好得一个工具,task是pipeline得一个参数,模型不一定支持所有得task。

生成式AI(tongyi、deepseek、kimi)参数量大,能力强,可以做复杂任务,对数据不敏感。
huggingface + 小模型(专属领域模型),通过pipeline,做特定任务,对数据安全性要求高。

总结:

  • 模型不仅仅是代码,它是一种能力;
  • 数据集不仅仅是文件,它是知识;
  • Pipeline 是将能力与知识打包好的一键服务。Pipeline 是最快的落地方式,Demo 阶段首选。
  • Tokenizer 的 padding 和 truncation 是批处理数据的关键。
  • AutoModelFor… 系列封装了特定任务的头,我们在微调时通常使用这一类模型。

使用huggingface进行情感分析

在这里插入图片描述

全量微调

HuggingFace 上模型那么多,我直接拿来用不行吗?为什么非要自己训练?
Pre-training (预训练) = 大学通识教育。
模型(比如 BERT)读了海量的维基百科、书籍。
能力: 它懂语法,懂成语,知道“苹果”既是水果也是公司。
局限: 它不知道你公司具体的业务逻辑。

Fine-tuning (微调) = 岗前专业培训。
动作: 在预训练模型的基础上,用你特定领域的数据再训练一小会儿。
目标: 让它从“懂中文的毕业生”变成“懂医疗发票的审核员”。

场景举例:通用模型搞不定的事

  • 通用 BERT: 看到“CT显示肺部纹理增多”,它知道这是一句话。
  • 医疗微调 BERT: 能精准识别出 CT (检查项), 肺部 (解剖部位), 纹理增多 (临床表现)。
  • 垃圾邮件场景: 通用模型可能觉得“恭喜您中奖了”是句好话(Positive),但在我们的业务里,它是 100% 的垃圾邮件(Spam)。

模型微调,需要积累大量的标准数据,尤其是可能出错的数据。
BERT,预训练模型,别人已经训练好了,直接可以用的。我们要进行数据的预测,需要针对错误的数据进行修改标准,就需要进行模型的微调,就能提升在某个专业领域内BERT的能力。

微调 vs 预训练:
预训练模型已经具备语言理解能力,微调只需要少量领域数据即可适应特定任务。

动态补齐:
使用 DataCollatorWithPadding 实现批次级别的动态补齐,提升训练效率。

Trainer API:
封装了训练的所有细节,让开发者专注于数据和模型本身。

评估策略:
每个 epoch 结束后进行评估和保存,便于监控训练过程。

HuggingFace 生态简化 NLP 任务的开发流程,从数据准备到模型训练,再到最终推理,整个过程清晰高效。

核心工具:Datasets 与 DataCollator

1. 数据加载与清洗 (Datasets)
在实际工作中,数据通常不在 Hub 上,而在你的 CSV 或 Excel 里。

  • 加载: load_dataset(“csv”, data_files=“my_data.csv”)
  • Map 函数 (神器):
    作用:它不是简单的 for 循环,而是支持多进程的并行处理。
    操作:我们需要把文本列(Text)批量转换成数字列(Input IDs)。

2. DataCollator:动态补齐

  • 痛点: BERT 模型要求同一批(Batch)进来的数据长度必须一致。
  • 传统做法: 不管句子多长,全部补齐到 512。缺点:如果一句话只有 10 个字,你补了 502 个 0,显卡在疯狂计算无效的 0,浪费显存和时间。
  • 聪明做法 (动态补齐): 在训练时,看这一批数据(比如 16 条)里最长的那句是多少(比如 50)。把其他 15 条都只补齐到 50。结果:训练速度极大提升,显存占用大幅下降。

使用Trainer API(微调神器)的好处:
在 HuggingFace 出现之前,写一个训练循环需要手动写出所有步骤。
你要自己写 Forward, Backward, Optimizer.step, Zero_grad… 写错一步模型就不收敛。
现在,Trainer 把这些脏活累活全包了。

维度 传统 PyTorch 写法 HuggingFace Trainer
代码量 50+ 行循环代码 实例化 1 个类
功能支持 需手写日志、保存、断点续训 开箱即用 (Checkpoints, Logging)
硬件优化 需手动配置混合精度 (fp16) 参数 fp16=True 即可
多卡训练 配置 DistributedDataParallel (极难) 自动适配多卡

大模型微调工具

huggingface/PEFT工具:是针对大尺寸的模型进行微调的工具。

在这里插入图片描述

案例:垃圾邮件分类器

搭建垃圾邮件分类器
垃圾邮件分类是经典二分类任务,用户每天都会收到大量的邮件和短信,其中不乏垃圾信息(如诈骗信息、广告推广、恶意链接等)。手动筛选这些信息不仅耗时耗力,而且容易遗漏。

使用 HuggingFace 的 Transformers 库,基于预训练的 BERT 中文模型(bert-base-chinese)进行微调,构建一个能够自动识别垃圾邮件的分类器。

输入:一条短信或邮件文本。
输出:0 (正常), 1 (垃圾)。
模型:bert-base-chinese (中文小模型,显存友好)。

代码截图:

在这里插入图片描述

结果:

在这里插入图片描述

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐