学习目标

  • 理解大语言模型(LLM)和 Transformer 架构的基本概念。
  • 了解 Hugging Face 生态系统(Hub, Transformers, Tokenizers)的核心作用。
  • 掌握使用 transformers 库加载预训练模型和分词器。
  • 能够使用 Pipeline(管道)快速完成文本分类、问答等常见 NLP 任务。
  • 学习如何使用模型和分词器进行手动推理。

1. 核心概念

  • 大语言模型 (LLM): 指的是在海量文本数据上训练过的、参数数量巨大(通常数十亿以上)的深度学习模型。它们能够理解和生成类似人类的文本。
  • Transformer 架构: 由 Google 在 2017 年提出,是现代几乎所有主流大模型(如 GPT, BERT)的基础。其核心是自注意力机制 (Self-Attention),使其能高效处理长距离依赖关系。
  • Hugging Face: 目前最流行、最核心的开源 AI 社区和公司。
    • Model Hub: 一个庞大的模型仓库,用户可以在上面分享和下载数以万计的预训练模型。
    • transformers: 提供了统一的 API 来加载和使用 Hub 上的各种模型。
    • tokenizers: 提供了高效的分词工具,用于将文本转换为模型可以理解的数字。

2. 安装与准备

pip install transformers
pip install torch  # transformers 通常需要 PyTorch 或 TensorFlow 作为后端

3. Pipeline:最简单的入门方式

Pipeline 是 transformers 库中最高度抽象的工具,它封装了从分词、模型推理到后处理的完整流程,让你用几行代码就能完成一个任务。

from transformers import pipeline

# 1. 情感分析 (Text Classification)
# 这会自动从 Hub 下载一个适合情感分析的预训练模型
classifier = pipeline('sentiment-analysis')
result = classifier('We are very happy to show you the Transformers library.')
print("情感分析:", result) # [{'label': 'POSITIVE', 'score': 0.9998...}]

# 2. 文本生成 (Text Generation)
generator = pipeline('text-generation', model='gpt2') # 指定使用 gpt2 模型
result = generator('In a world where AI is becoming more powerful,', max_length=30, num_return_sequences=2)
print("文本生成:", result)

# 3. 问答 (Question Answering)
qa_pipeline = pipeline('question-answering')
context = "The capital of France is Paris."
question = "What is the capital of France?"
result = qa_pipeline(question=question, context=context)
print("问答:", result) # {'score': ..., 'start': ..., 'end': ..., 'answer': 'Paris'}

4. 手动推理:深入理解流程

虽然 Pipeline 很方便,但理解其背后的手动流程更重要。

  1. 加载模型 (Model) 和分词器 (Tokenizer)
  2. 分词: 将输入文本转换为模型能理解的 ID。
  3. 模型推理: 将 ID 输入模型,得到输出(logits)。
  4. 后处理: 将模型的输出转换为人类可读的结果。
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

# 模型标识符,可以在 Hugging Face Hub 上找到
model_name = "distilbert-base-uncased-finetuned-sst-2-english"

# 1. 加载分词器和模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

# 2. 准备并分词文本
raw_inputs = ["I love this movie, it's fantastic!", "This is a terrible film."]
inputs = tokenizer(raw_inputs, padding=True, truncation=True, return_tensors="pt")
# 'pt' 表示返回 PyTorch tensors

# 3. 模型推理
with torch.no_grad(): # 在推理时关闭梯度计算,节省资源
    outputs = model(**inputs)

# 4. 后处理
logits = outputs.logits
predictions = torch.nn.functional.softmax(logits, dim=-1)
print("模型预测概率:", predictions)

# 将预测概率转换为标签
predicted_labels = torch.argmax(predictions, dim=-1)
for i, label_id in enumerate(predicted_labels):
    label = model.config.id2label[label_id.item()]
    print(f"'{raw_inputs[i]}' -> 预测标签: {label}")

5. AutoClass 的作用

  • AutoTokenizer, AutoModel...AutoClasstransformers 的一大特色。
  • 你只需要提供模型的名称(如 "bert-base-uncased"),AutoClass 会自动识别模型类型,并从 Hub 下载、加载正确的模型架构和权重。这极大地简化了模型加载过程。

6. 今日练习

  1. Pipeline 探索

    • 创建 day29_exercise.py 文件。
    • 使用 Pipeline 尝试 zero-shot-classification (零样本分类) 任务。给一段文本和几个候选标签,看模型能把它分到哪一类。
    • 尝试 fill-mask (掩码填充) 任务,例如填充句子 “Hello I’m a <mask> model.”。
  2. 翻译任务

    • 在 Hugging Face Hub 上找到一个用于“英译法”的翻译模型(例如搜索 “translation english to french”)。
    • 使用 Pipeline 或手动推理的方式,翻译几个英文句子。
  3. 手动推理练习

    • 选择一个你感兴趣的文本分类模型(例如,用于新闻分类或垃圾邮件检测的模型)。
    • 按照手动推理的步骤,加载模型和分词器,对几个自定义的句子进行分类,并解释模型的输出结果。
  4. 思考题

    • 什么是“分词 (Tokenization)”?为什么它是处理文本数据的第一步,而且如此重要?
    • Pipeline 和手动推理各有什么优缺点?在快速原型开发和需要深度定制的场景中,你分别会选择哪种方式?
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐