1. Transformer 介绍

Transformer 是现代大语言模型(LLM)的核心架构。
它解决了 RNN/LSTM 在长文本处理、并行计算上的不足。
Hugging Face 的 Transformers 库 让我们可以直接调用各种基于 Transformer 的预训练模型,快速完成 NLP 任务。

备注:

  • “LLM” 指的是 Large Language Model(大语言模型),如 ChatGPT、GPT-4、BERT 等。
  • Transformer 是一种模型架构,而 Transformers 库是一个工具包,二者不要混淆。

2. Transformer 原理

2.1 背景

  • RNN/LSTM 的局限:速度慢、长依赖差、训练不稳定。
  • Transformer 由 Google 于 2017 年提出,完全基于注意力机制(Attention)。

备注:

  • “长依赖”指的是句子中相隔很远的词之间的关系,比如“我昨天在公园看见了一只猫,它很可爱”中,“猫”和“可爱”之间的关系。
  • Transformer 通过 Attention 可以一次性看到整句话,不需要像 RNN 那样一个词一个词处理。

2.2 核心思想

  • 注意力机制:在处理某个词时,根据它与其他词的相关性分配不同的关注权重。
  • 多头注意力:并行计算多组注意力,捕捉不同特征。
  • 位置编码:为模型提供词序信息。
  • 前馈网络:加工每个位置的向量。
  • 残差连接 + 层归一化:稳定训练、防止信息丢失。

备注:

  • “多头”不是指模型有多个脑袋,而是指它会用多组不同的参数去计算注意力,每组关注的重点可能不同。
  • 位置编码是因为 Transformer 本身不关心顺序,需要额外告诉它“第几个词”。

2.3 结构

  • 编码器(Encoder):理解输入序列。
  • 解码器(Decoder):生成输出序列。
  • 在 GPT 等 LLM 中,通常只保留解码器部分。

备注:

  • BERT 属于“只用编码器”的模型,适合理解类任务(分类、问答)。
  • GPT 属于“只用解码器”的模型,适合生成类任务(写作、对话)。

3. Transformers 库简介

3.1 什么是 Transformers 库?

  • Hugging Face 开发的开源 Python 库。
  • 提供各种预训练的 Transformer 模型(BERT、GPT、T5 等)。
  • 支持 PyTorch 和 TensorFlow。
  • 提供简单的 pipeline API 和灵活的底层接口。

备注:

  • “预训练模型”是指已经在大规模数据上训练好的模型,可以直接用,也可以在你的数据上微调。
  • pipeline 是最简单的调用方式,适合快速体验。

3.2 为什么用它?

  • 节省时间:无需从零训练模型。
  • 降低门槛:几行代码即可调用先进模型。
  • 快速验证:适合原型开发和实验。

备注:

  • 从零训练一个 GPT 级别的模型可能需要几百万美元的算力成本,而用 Transformers 库可以免费调用别人训练好的模型。

3.3 能做什么?

  • 文本分类(情感分析、垃圾邮件检测)
  • 文本生成(自动写作、对话机器人)
  • 机器翻译(多语言互译)
  • 文本摘要(新闻、报告)
  • 问答系统(文档问答、阅读理解)
  • 命名实体识别(人名、地名、机构名)
  • 语音与多模态任务(ASR、TTS、图像分类)

备注:

  • 这些任务都可以用 pipeline 一行代码完成,非常适合初学者先跑通流程。

4. 安装与环境准备

4.1 安装 Transformers

pip install transformers

备注:

  • 如果下载速度慢,可以换国内镜像,比如清华 TUNA。

4.2 安装 PyTorch(GPU 版本)

pip install torch --index-url https://download.pytorch.org/whl/cu118

备注:

  • cu118 表示 CUDA 11.8 版本,要和你电脑的 CUDA 驱动匹配。
  • 如果没有 GPU,可以直接安装 CPU 版本:pip install torch。

4.3 可选:安装加速工具

pip install accelerate

备注:

  • accelerate 可以帮你自动选择设备(CPU/GPU/多卡),适合大模型推理。

5. 快速上手示例

5.1 情感分析

from transformers import pipeline
classifier = pipeline("sentiment-analysis")
print(classifier("I love learning AI!"))

备注:

  • 输出是一个列表,包含标签(POSITIVE/NEGATIVE)和置信度分数。

5.2 文本生成

generator = pipeline("text-generation", model="gpt2")
print(generator("Once upon a time", max_length=30))

备注:

  • max_length 控制生成的最大长度,单位是 token(不等于字数)。

5.3 机器翻译

translator = pipeline("translation_en_to_zh", model="Helsinki-NLP/opus-mt-en-zh")
print(translator("Transformers are amazing for NLP tasks!"))

备注:

  • 模型名 Helsinki-NLP/opus-mt-en-zh 表示“英语到中文”的翻译模型。

6. 自定义模型调用

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

model_name = "distilbert-base-uncased-finetuned-sst-2-english"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

inputs = tokenizer("I love learning AI!", return_tensors="pt")
with torch.no_grad():
    outputs = model(**inputs)
    predictions = torch.nn.functional.softmax(outputs.logits, dim=-1)

print(predictions)

备注:

  • AutoTokenizer 负责把文本转成模型能理解的数字(token)。
  • AutoModelForSequenceClassification 是分类任务的模型类。
  • return_tensors="pt" 表示返回 PyTorch 张量。

7. 常见问题与优化建议

  • 下载慢:使用国内镜像或提前下载模型。
  • 显存不足:使用更小的模型或 device_map="auto"。
  • 版本冲突:使用虚拟环境隔离依赖。

备注:

  • 如果显存不足,可以用 model.half()(半精度)或 quantization(量化)来减少显存占用。

8. 总结

  • Transformer 原理是理解 LLM 的基础。
  • Transformers 库让我们可以直接使用这些模型完成各种 NLP 任务。
  • 初学者建议先用 pipeline 快速体验,再深入学习自定义模型和微调方法。
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐