医疗人读懂 LLM 的第一课: 了解 Transformer
听诊器的发明,让医生第一次能听见心肺的内部声音。 Transformer 的诞生,则让机器第一次真正理解了语言的上下文。对医疗人来说,这不只是技术的突破,它意味着我们可以重新思考如何让 AI 在临床、科研和患者服务中发挥作用。
作为医疗从业者,我们每天都要处理庞杂的信息:病历、科研文献……而 Transformer 正是当下所有大语言模型(LLM)的核心。理解它,等于理解了 ChatGPT、医学辅助诊断系统、自动科研写作工具的根基。
所以,接下来我希望带你一步步走入 Hugging Face 提供的 Transformer 学习课程,用通俗的方式来理解复杂的技术。
需要课程代码以及问题咨询通过留言
📮在路上的蟹老板(pqjrkwem@gmail.com)
课程简介
本课程将教你如何使用 Transformaer 生态系统的库进行自然语言处理(NLP)。
涵盖的库
- Transformers - 核心模型库
- Datasets - 数据集处理
- Tokenizers - 文本分词
- Accelerate - 训练加速
- Hugging Face Hub - 模型共享平台
课程结构
第 1-4 章:Transformers 基础
介绍 Transformers 库的主要概念。完成后你将:
- 了解 Transformer 模型的工作原理
- 使用 Transformer 模型
- 微调一个预训练模型
- 分享模型和标记器
第 5-8 章:拥有一个自己的模型
- Datasets库
- Tokenizers库
- 主要的 NLP 任务
- 构建和分享你的模型
学习要求
具备:
良好的 Python 知识, 要是熟悉 深度学习和机器学习就更好了, 对于tensorflow 或者 pytorch 熟悉更更更加分
第一章:了解Transformer 模型
什么是自然语言处理?
NLP(Natural Language Processing) 是语言学和机器学习的交叉领域,专注于理解与人类语言相关的一切。
🎯 核心目标:不仅理解单个单词,更要理解单词的上下文关系。
常见 NLP 任务
1️⃣ 句子级任务
- 情感分析:判断评论的情感倾向
- 垃圾邮件检测:识别是否为垃圾邮件
- 语法检查:判断句子是否语法正确
- 语义关系:判断两个句子是否逻辑相关
2️⃣ 词级任务
- 词性标注:识别语法成分(名词、动词、形容词)
- 命名实体识别(NER):识别人名、地点、组织等实体
3️⃣ 生成任务
- 文本补全:自动生成文本续写
- 完形填空:填充文本空白
- 问答系统:根据上下文提取或生成答案
- 机器翻译:文本翻译
- 文本摘要:生成文本总结
4️⃣ 多模态任务
- 语音识别:音频转文本
- 图像描述:生成图像说明
为什么具有挑战性?
计算机处理信息的方式与人类不同:
人类理解
- "我饿了" → 立即理解含义
- "我很饿" vs "我很伤心" → 轻松判断相似度
机器学习的挑战
- 文本需要特殊处理才能让模型学习
- 语言复杂性使算法设计困难
- 需要研究如何有效表示文本
Transformers 能做什么?
🌟 应用场景
Transformer 模型被广泛应用于各种 NLP 任务,许多知名公司和组织都在使用并回馈社区。
Pipeline 基础
Transformers 库中最基本的工具是 pipeline() 函数,它整合了:
- 预处理
- 模型推理
- 后处理
示例:情感分析
from transformers import pipeline
classifier = pipeline("sentiment-analysis")
classifier("I've been waiting for a HuggingFace course my whole life.")
输出:
[{'label': 'POSITIVE', 'score': 0.9598047137260437}]
批量处理
classifier([
"I've been waiting for a HuggingFace course my whole life.",
"I hate this so much!"
])
输出:
[{'label': 'POSITIVE', 'score': 0.9598047137260437},
{'label': 'NEGATIVE', 'score': 0.9994558095932007}]
Pipeline 工作流程
- 预处理:文本转换为模型可理解的格式
- 模型推理:处理预处理后的输入
- 后处理:转换为人类可读的结果
可用的 Pipeline 类型
| Pipeline | 功能 |
|---|---|
feature-extraction |
获取文本向量表示 |
fill-mask |
完形填空 |
ner |
命名实体识别 |
question-answering |
问答系统 |
sentiment-analysis |
情感分析 |
summarization |
文本摘要 |
text-generation |
文本生成 |
translation |
翻译 |
zero-shot-classification |
零样本分类 |
Pipeline 实战示例
1. 零样本分类
无需预先训练,直接指定分类标签:
from transformers import pipeline
classifier = pipeline("zero-shot-classification")
classifier(
"This is a course about the Transformers library",
candidate_labels=["education", "politics", "business"],
)
输出:
{
'sequence': 'This is a course about the Transformers library',
'labels': ['education', 'business', 'politics'],
'scores': [0.8445963859558105, 0.111976258456707, 0.043427448719739914]
}
💡 零样本学习:无需微调即可使用,直接返回任意标签的概率分数。
2. 文本生成
自动补全文本:
from transformers import pipeline
generator = pipeline("text-generation")
generator("In this course, we will teach you how to")
输出:
[{
'generated_text': 'In this course, we will teach you how to understand and use '
'data flow and data interchange when handling user data...'
}]
控制生成参数
generator = pipeline("text-generation", model="distilgpt2")
generator(
"In this course, we will teach you how to",
max_length=30, # 控制输出长度
num_return_sequences=2, # 生成多个候选
)
🔄 文本生成涉及随机性,每次结果可能不同。
3. 使用特定模型
从 Hub 选择模型:
from transformers import pipeline
generator = pipeline("text-generation", model="distilgpt2")
generator(
"In this course, we will teach you how to",
max_length=30,
num_return_sequences=2,
)
输出:
[
{'generated_text': 'In this course, we will teach you how to manipulate the world...'},
{'generated_text': 'In this course, we will teach you how to become an expert...'}
]
模型筛选
- 访问 Model Hub
- 使用左侧标签筛选任务类型和语言
- 使用在线小组件测试模型
- 在代码中指定模型名称
4. 推理 API
所有模型都可通过 Inference API 在浏览器中测试:
- 直接在 Hugging Face 网站上使用
- 输入自定义文本,观察模型输出
- 付费版本适用于生产环境
💼 详情查看定价页面
5. 完形填空
填充文本空白:
from transformers import pipeline
unmasker = pipeline("fill-mask")
unmasker("This course will teach you all about <mask> models.", top_k=2)
输出:
[
{
'sequence': 'This course will teach you all about mathematical models.',
'score': 0.19619831442832947,
'token': 30412,
'token_str': ' mathematical'
},
{
'sequence': 'This course will teach you all about computational models.',
'score': 0.04052725434303284,
'token': 38163,
'token_str': ' computational'
}
]
⚠️ 注意:不同模型的 mask token 可能不同(如
<mask>、[MASK]等)。使用前请检查模型文档或在线小组件。
6. 命名实体识别(NER)
识别文本中的实体:
from transformers import pipeline
ner = pipeline("ner", grouped_entities=True)
ner("My name is Sylvain and I work at Hugging Face in Brooklyn.")
输出:
[
{'entity_group': 'PER', 'score': 0.99816, 'word': 'Sylvain', 'start': 11, 'end': 18},
{'entity_group': 'ORG', 'score': 0.97960, 'word': 'Hugging Face', 'start': 33, 'end': 45},
{'entity_group': 'LOC', 'score': 0.99321, 'word': 'Brooklyn', 'start': 49, 'end': 57}
]
实体类型:
- PER(Person):人名
- ORG(Organization):组织
- LOC(Location):地点
💡
grouped_entities=True参数将属于同一实体的词组合在一起(如 "Hugging Face")。
7. 问答系统
从上下文中提取答案:
from transformers import pipeline
question_answerer = pipeline("question-answering")
question_answerer(
question="Where do I work?",
context="My name is Sylvain and I work at Hugging Face in Brooklyn",
)
输出:
{'score': 0.6385916471481323, 'start': 33, 'end': 45, 'answer': 'Hugging Face'}
⚠️ 注意:此模型从上下文中提取信息,不会凭空生成答案。
8. 文本摘要
压缩长文本为简短摘要:
from transformers import pipeline
summarizer = pipeline("summarization")
summarizer("""
America has changed dramatically during recent years. Not only has the number of
graduates in traditional engineering disciplines such as mechanical, civil,
electrical, chemical, and aeronautical engineering declined, but in most of
the premier American universities engineering curricula now concentrate on
and encourage largely the study of engineering science...
Rapidly developing economies such as China and India, as well as other
industrial countries in Europe and Asia, continue to encourage and advance
the teaching of engineering...
""")
输出:
[{
'summary_text': 'America has changed dramatically during recent years. The '
'number of engineering graduates in the U.S. has declined... '
'Rapidly developing economies such as China and India continue '
'to encourage and advance engineering.'
}]
📏 可使用
max_length和min_length参数控制摘要长度。
9. 翻译
多语言文本翻译:
from transformers import pipeline
translator = pipeline("translation", model="Helsinki-NLP/opus-mt-fr-en")
translator("Ce cours est produit par Hugging Face.")
输出:
[{'translation_text': 'This course is produced by Hugging Face.'}]
使用技巧
- 任务名称可包含语言对(如
translation_en_to_fr) - 从 Hub 选择特定翻译模型效果更好
- 支持
max_length和min_length参数
Transformers 工作原理
发展历史
关键里程碑:
| 时间 | 模型 | 特点 |
|---|---|---|
| 2017.06 | Transformer 架构 | 原创架构,专注于翻译 |
| 2018.06 | GPT | 首个预训练 Transformer,多任务表现优异 |
| 2018.10 | BERT | 大型预训练模型,更好的句子理解 |
| 2019.02 | GPT-2 | GPT 改进版,因道德问题延迟发布 |
| 2019.10 | DistilBERT | BERT 精简版,速度提升 60%,保留 97% 性能 |
| 2019.10 | BART & T5 | 使用完整 Transformer 架构 |
| 2020.05 | GPT-3 | 更大规模,支持零样本学习 |
模型分类
三大类别:
-
GPT-like(自回归模型)
- 特点:从左到右生成
- 适用:文本生成
-
BERT-like(自编码模型)
- 特点:双向理解
- 适用:文本理解
-
BART/T5-like(序列到序列模型)
- 特点:编码器-解码器结构
- 适用:翻译、摘要
Transformers 是语言模型
核心特点:
- 使用无监督学习在大量原始文本上训练
- 目标根据输入自动计算,无需人工标注
- 对训练语言有统计学理解
训练方式:
因果语言建模(Causal Language Modeling)
- 预测下一个词
- 输出依赖过去和现在
- 示例:GPT 系列
掩码语言建模(Masked Language Modeling)
- 预测被遮盖的词
- 完形填空任务
- 示例:BERT 系列
⚠️ 预训练模型需要微调才能在特定任务上表现出色。
Transformers 是大模型
规模趋势:
- 模型越来越大
- 训练数据越来越多
- 性能越来越好
环境影响:
- 训练大模型消耗大量资源
- 产生显著碳排放
- 需要考虑环境成本
解决方案:模型共享
为什么共享模型?
- ✅ 降低计算成本
- ✅ 减少碳排放
- ✅ 节省训练时间
- ✅ 促进研究发展
碳排放评估工具:
- ML CO2 Impact
- Code Carbon(集成在 Transformers 中)
迁移学习
预训练(Pretraining)
- 从头开始训练
- 随机初始化权重
- 需要大量数据和时间
- 成本高昂
微调(Fine-tuning)
- 在预训练模型基础上训练
- 使用特定任务数据
- 所需数据少
- 训练时间短
- 成本更低
微调优势:
-
📚 知识迁移
- 利用预训练知识
- 减少数据需求
-
⚡ 高效快速
- 训练时间短
- 资源消耗少
-
🎯 效果更好
- 通常优于从头训练
- 除非有海量专用数据
实践建议:
💡 总是先寻找最接近目标任务的预训练模型,然后进行微调!
通用架构
Transformer 模型由两个核心部分组成:
编码器(Encoder)
- 📥 接收输入
- 🔍 构建特征表示
- 💡 理解输入含义
解码器(Decoder)
- 📤 生成输出
- 🔄 使用编码器的表示
- ✍️ 生成目标序列
三种架构模式
| 架构类型 | 组件 | 特点 | 适用任务 |
|---|---|---|---|
| Encoder-only | 仅编码器 | 双向注意力 | 句子分类、NER、阅读理解 |
| Decoder-only | 仅解码器 | 单向注意力 | 文本生成 |
| Encoder-Decoder | 编码器+解码器 | 混合注意力 | 翻译、摘要 |
注意力层(Attention Layer)
核心思想:
💡 告诉模型在处理每个词时,应该关注(或忽略)哪些词。
实例说明:
英译法:"You like this course"
-
翻译 "like"
- 需要关注主语 "You"
- 法语动词变形依赖主语
-
翻译 "this"
- 需要关注名词 "course"
- 翻译依赖名词单复数
-
其他词
- 对当前翻译不重要
- 可以忽略
关键特性:
- 词的含义受上下文影响
- 可能需要关注远处的词
- 动态调整注意力权重
原始 Transformer 架构
设计目标: 机器翻译
编码器特点:
- ✅ 可以访问句子所有词
- 🔍 双向理解上下文
解码器特点:
- ⏩ 按顺序工作
- 👁️ 只能看到已翻译的词
- 🚫 不能"偷看"未来的词
训练加速技巧:
- 输入完整目标句子
- 使用注意力掩码
- 阻止访问未来位置
架构组成:
-
编码器注意力层
- 关注输入句子所有词
-
解码器第一注意力层
- 关注解码器已生成的词
-
解码器第二注意力层
- 关注编码器的输出
- 访问整个源句子信息
术语说明
架构(Architecture)
- 模型的骨架结构
- 层的定义和连接方式
- 操作流程
检查点(Checkpoints)/ 权重参数
- 具体的数值
- 加载到架构中
- 训练得到的参数
模型(Model)
- 笼统术语
- 可指架构或参数
- 避免歧义时使用更精确术语
示例:
BERT= 架构bert-base-cased= 检查点/权重- 可以说 "BERT 模型" 或 "bert-base-cased 模型"
三种模型架构详解
编码器模型(Encoder Models)
结构特点:
- 🔍 仅使用编码器部分
- 👀 双向注意力(看所有词)
- 📚 也称自编码模型
预训练方式:
- 破坏输入句子(如随机遮盖词)
- 让模型重建原句
适用任务:
- ✅ 句子分类
- ✅ 命名实体识别
- ✅ 词分类
- ✅ 阅读理解问答
典型代表:
- ALBERT
- BERT
- DistilBERT
- ELECTRA
- RoBERTa
解码器模型(Decoder Models)
结构特点:
- ✍️ 仅使用解码器部分
- ⏩ 单向注意力(只看前文)
- 🔄 也称自回归模型
预训练方式:
- 预测句子中的下一个词
适用任务:
- ✅ 文本生成
典型代表:
- CTRL
- GPT
- GPT-2
- Transformer XL
编码器-解码器模型(Sequence-to-Sequence Models)
结构特点:
- 🔗 同时使用编码器和解码器
- 📊 编码器:双向注意力
- 📝 解码器:单向注意力
- 🌉 也称序列到序列模型
预训练方式:
- 更复杂的训练方式
- 示例:T5 用单个掩码词替换随机文本范围
适用任务:
- ✅ 摘要
- ✅ 翻译
- ✅ 生成式问答
典型代表:
- BART
- mBART
- Marian
- T5
偏见和局限性
⚠️ 重要警告
虽然预训练和微调模型功能强大,但它们存在局限性。
主要问题:训练数据偏见
- 研究人员收集大量网络文本
- 可能包含刻板印象
- 可能包含偏见观点
实例演示
from transformers import pipeline
unmasker = pipeline("fill-mask", model="bert-base-uncased")
result = unmasker("This man works as a [MASK].")
print([r["token_str"] for r in result])
# ['lawyer', 'carpenter', 'doctor', 'waiter', 'mechanic']
result = unmasker("This woman works as a [MASK].")
print([r["token_str"] for r in result])
# ['nurse', 'waitress', 'teacher', 'maid', 'prostitute']
问题分析:
- 大多数职业与性别相关
- 存在性别刻板印象
- 即使使用"中立"数据集(Wikipedia + BookCorpus)
🚨 使用注意事项
使用这些工具时需要记住:
- ⚠️ 可能生成性别歧视内容
- ⚠️ 可能生成种族歧视内容
- ⚠️ 可能生成其他偏见内容
- ⚠️ 微调不会消除固有偏见
课程总结
🎯 核心知识点
1. Pipeline 使用
- ✅ 使用
pipeline()处理各种 NLP 任务 - ✅ 在 Hub 中搜索和使用模型
- ✅ 使用推理 API 在线测试
2. Transformer 工作原理
- ✅ 理解模型基本原理
- ✅ 掌握迁移学习概念
- ✅ 了解微调重要性
3. 架构选择
- ✅ 根据任务选择合适架构
- ✅ 可使用完整架构或部分组件
📊 模型架构总结表
| 模型类型 | 典型代表 | 适用任务 |
|---|---|---|
| 编码器 | ALBERT, BERT, DistilBERT, ELECTRA, RoBERTa | 句子分类、命名实体识别、抽取式问答 |
| 解码器 | CTRL, GPT, GPT-2, Transformer XL | 文本生成 |
| 编码器-解码器 | BART, T5, Marian, mBART | 文本摘要、翻译、生成式问答 |
学习资源
🔗 官方链接
📚 推荐阅读
- Attention Is All You Need - Transformer 原论文
- Deep Learning for Coders with fastai and PyTorch
- O'Reilly Transformers Book
🎓 祝学习愉快!

浙公网安备 33010602011771号