本模块预计时长: 1.5-2小时
目标: 使学生能够独立从Hugging Face加载任何Transformer模型,理解其输入和输出,并将其用于常见的分类、生成或问答任务——无需微调。
Hugging Face不仅仅是一个库。它是一个完整的语言模型生态系统。
🔹 它提供:
transformers:用于加载、使用和训练模型的主要库。datasets:访问数千个现成的数据集。tokenizers:将文本转换为标记的工具(模型理解的输入)。evaluate:用于评估模型的标准化指标。🔹 有用的类比:
Hugging Face就像"AI模型的应用商店"。
需要一个总结文本的模型?有几十个。
一个检测情感的模型?有几百个。
一个中文模型?也有。
一个可以在笔记本电脑上运行的小模型?绝对有!
只需搜索、安装和使用。
开始之前,我们需要安装库。我们将在干净环境中进行(推荐:Google Colab或本地虚拟环境)。
pip install torch transformers datasets
注意:
torch(PyTorch)是Hugging Face默认使用的深度学习框架。你也可以使用TensorFlow,但PyTorch在社区中更常见。
让我们从简单的开始:一个读取文本并告诉你它是积极还是消极的模型。
我们将使用distilbert-base-uncased-finetuned-sst-2-english,这是一个为此任务预训练的小型、快速模型。
from transformers import pipeline
# 创建文本分类管道
classifier = pipeline("sentiment-analysis")
# 用短语测试
result = classifier("I love this course! It's amazing and very clear.")
print(result)
# 输出: [{'label': 'POSITIVE', 'score': 0.9998}]
就是这样!3行代码,你就有了一个工作的AI模型。
🔹 pipeline做了什么?
Hugging Face为常见任务提供管道:
"sentiment-analysis" → 情感分类"text-generation" → 文本生成(GPT-2等)"question-answering" → 问答(BERT等)"translation" → 翻译"summarization" → 摘要"ner" → 命名实体识别(人名、地名等)示例:使用GPT-2生成文本
generator = pipeline("text-generation", model="gpt2")
text = "The future of artificial intelligence is"
result = generator(text, max_length=50, num_return_sequences=1)
print(result[0]['generated_text'])
可能的输出:
"The future of artificial intelligence is one of the most exciting areas of research today. It has the potential to revolutionize..."
管道很神奇……但要真正理解发生了什么,我们需要看到手动过程。
让我们采用相同的分类器,逐步进行。
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
# 1. 加载分词器和模型
model_name = "distilbert-base-uncased-finetuned-sst-2-english"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
# 2. 对文本进行分词
text = "This movie is absolutely wonderful!"
inputs = tokenizer(text, return_tensors="pt") # "pt" = PyTorch张量
print(inputs)
输出:
{
'input_ids': tensor([[ 101, 2023, 3042, 2003, 2675, 12712, 1029, 102]]),
'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1]])
}
🔹 解释:
input_ids:每个数字是一个标记。101 = [CLS],102 = [SEP],其余是单词。attention_mask:指示哪些标记是真实的(1)哪些是填充的(0)。这里,所有都是真实的。# 3. 将输入传递给模型
outputs = model(**inputs)
# 4. 获取logits(未标准化的输出)
logits = outputs.logits
print("Logits:", logits) # 例如: tensor([[-4.5, 3.2]])
# 5. 应用softmax获取概率
probabilities = torch.softmax(logits, dim=-1)
print("Probabilities:", probabilities) # 例如: tensor([[0.001, 0.999]])
# 6. 获取预测标签
predicted_class = torch.argmax(probabilities, dim=-1).item()
labels = ["NEGATIVE", "POSITIVE"]
print("Predicted label:", labels[predicted_class]) # → POSITIVE
🔹 为什么要手动做? 为了理解其工作原理,调试错误,或自定义过程(例如,更改决策阈值)。
并非所有模型都适合所有任务。这里是一个快速指南:
| 任务 | 模型类型 | Hugging Face上的示例模型 |
|---|---|---|
| 文本分类 | 仅编码器(BERT风格) | bert-base-uncased, distilbert-base-uncased, nlptown/bert-base-multilingual-uncased-sentiment |
| 文本生成 | 仅解码器(GPT风格) | gpt2, facebook/opt-350m, mistralai/Mistral-7B-v0.1(需要更多RAM) |
| 问答(提取式) | 仅编码器 | bert-large-uncased-whole-word-masking-finetuned-squad, deepset/roberta-base-squad2 |
| 翻译/摘要 | 编码器-解码器 | t5-small, facebook/bart-large-cnn, Helsinki-NLP/opus-mt-en-es |
| 命名实体识别(NER) | 仅编码器 | dslim/bert-base-NER, Jean-Baptiste/roberta-large-ner-english |
🔍 提示: 在Hugging Face模型中心,你可以按以下方式筛选:
- 任务
- 语言
- 模型大小
- 许可证
- 框架(PyTorch, TensorFlow)
是的,有很多中文模型!
示例:中文推文的情感分类。
classifier_zh = pipeline(
"sentiment-analysis",
model="nlptown/bert-base-multilingual-uncased-sentiment"
)
result = classifier_zh("这门课程太棒了,强烈推荐!")
print(result)
# 输出: [{'label': '5 stars', 'score': 0.8742}]
另一个更具体的模型:ckiplab/bert-base-chinese-ner (用于中文命名实体识别)。
解决方案:使用较小的模型(
distilbert而不是bert-large),或在CPU上运行(较慢,但有效)。
model = AutoModelForSequenceClassification.from_pretrained(model_name).to("cpu")
解决方案:截断文本。
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512)
解决方案:在模型中心验证确切名称。在网站上使用自动完成。
选择一个你感兴趣的任务(例如,总结新闻、检测垃圾邮件、翻译短语)。
转到Hugging Face模型中心并找到2-3个候选模型。
比较它们的指标、大小、语言和许可证。
你会选择哪个?为什么?
文本 → 分词器 → input_ids + attention_mask → 模型 → logits → softmax → 标签 + 概率
↑ ↑ ↑ ↑
转换为 指示真实 预训练 转换为
数字 vs 填充标记 神经网络 概率
Hugging Face消除了使用Transformer模型的入门障碍。
你不再需要数周的设置、昂贵的GPU或深度深度学习知识来开始。
只需几行代码,你就可以让AI模型生成文本、分类情感或回答问题。但是……这只是开始!在下一个模块中,我们将把所学知识应用到指导项目中:我们将构建一个问答系统,回答关于给定文本的查询——使用预训练模型,无需微调。