-
Notifications
You must be signed in to change notification settings - Fork 776
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Chinese - Chapter 1 finished * Add zh to the languages field Co-authored-by: petrichor1122 <[email protected]> Co-authored-by: zhlhyx <[email protected]>
- Loading branch information
1 parent
12a5240
commit e812f74
Showing
13 changed files
with
901 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
- title: 1. Transformer 模型 | ||
sections: | ||
- local: chapter1/1 | ||
title: 章节简介 | ||
- local: chapter1/2 | ||
title: 自然语言处理 | ||
- local: chapter1/3 | ||
title: Transformers能做什么? | ||
- local: chapter1/4 | ||
title: Transformers 是如何工作的? | ||
- local: chapter1/5 | ||
title: 编码器模型 | ||
- local: chapter1/6 | ||
title: 解码器模型 | ||
- local: chapter1/7 | ||
title: 序列到序列模型 | ||
- local: chapter1/8 | ||
title: 偏见和局限性 | ||
- local: chapter1/9 | ||
title: 总结 | ||
- local: chapter1/10 | ||
title: 章末小测验 | ||
quiz: 1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
# 简介 | ||
|
||
## 欢迎来到🤗课程 | ||
|
||
<Youtube id="00GKzGyWFEs" /> | ||
|
||
本课程将使用 Hugging Face 生态系统中的库——🤗 Transformers、🤗 Datasets、🤗 Tokenizers 和 🤗 Accelerate——以及 Hugging Face Hub 教你自然语言处理 (NLP)。它是完全免费的,并且没有广告。 | ||
|
||
|
||
## 有什么是值得期待的? | ||
|
||
以下是课程的简要概述: | ||
|
||
<div class="flex justify-center"> | ||
<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/summary.svg" alt="Brief overview of the chapters of the course."/> | ||
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/summary-dark.svg" alt="Brief overview of the chapters of the course."/> | ||
</div> | ||
|
||
- 第 1 章到第 4 章介绍了 🤗 Transformers 库的主要概念。在本课程的这一部分结束时,您将熟悉 Transformer 模型的工作原理,并将了解如何使用 [Hugging Face Hub](https://huggingface.co/models) 中的模型,在数据集上对其进行微调,并在 Hub 上分享您的结果。 | ||
- 第 5 章到第 8 章在深入研究经典 NLP 任务之前,教授 🤗 Datasets和 🤗 Tokenizers的基础知识。在本部分结束时,您将能够自己解决最常见的 NLP 问题。 | ||
- 第 9 章到第 12 章更加深入,探讨了如何使用 Transformer 模型处理语音处理和计算机视觉中的任务。在此过程中,您将学习如何构建和分享模型,并针对生产环境对其进行优化。在这部分结束时,您将准备好将🤗 Transformers 应用于(几乎)任何机器学习问题! | ||
|
||
这个课程: | ||
|
||
* 需要良好的 Python 知识 | ||
* 最好先学习深度学习入门课程,例如[DeepLearning.AI](https://www.deeplearning.ai/) 提供的 [fast.ai实用深度学习教程](https://course.fast.ai/) | ||
* 不需要事先具备 [PyTorch](https://pytorch.org/) 或 [TensorFlow](https://www.tensorflow.org/) 知识,虽然熟悉其中任何一个都会对huggingface的学习有所帮助 | ||
|
||
完成本课程后,我们建议您查看 [DeepLearning.AI的自然语言处理系列课程](https://www.coursera.org/specializations/natural-language-processing?utm_source=deeplearning-ai&utm_medium=institutions&utm_campaign=20211011-nlp-2-hugging_face-page-nlp-refresh),其中涵盖了广泛的传统 NLP 模型,如朴素贝叶斯和 LSTM,这些模型非常值得了解! | ||
|
||
## 我们是谁? | ||
|
||
关于作者: | ||
|
||
**Matthew Carrigan** 是 Hugging Face 的机器学习工程师。他住在爱尔兰都柏林,之前在 Parse.ly 担任机器学习工程师,在此之前,他在Trinity College Dublin担任博士后研究员。他不相信我们会通过扩展现有架构来实现 AGI,但无论如何都对机器人充满希望。 | ||
|
||
**Lysandre Debut** 是 Hugging Face 的机器学习工程师,从早期的开发阶段就一直致力于 🤗 Transformers 库。他的目标是通过使用非常简单的 API 开发工具,让每个人都可以使用 NLP。 | ||
|
||
**Sylvain Gugger** 是 Hugging Face 的一名研究工程师,也是 🤗Transformers库的核心维护者之一。此前,他是 fast.ai 的一名研究科学家,他与Jeremy Howard 共同编写了[Deep Learning for Coders with fastai and Py Torch](https://learning.oreilly.com/library/view/deep-learning-for/9781492045519/)。他的主要研究重点是通过设计和改进允许模型在有限资源上快速训练的技术,使深度学习更容易普及。 | ||
|
||
**Merve Noyan** 是 Hugging Face 的开发者倡导者,致力于开发工具并围绕它们构建内容,以使每个人的机器学习平民化。 | ||
|
||
**Lucile Saulnier** 是 Hugging Face 的机器学习工程师,负责开发和支持开源工具的使用。她还积极参与了自然语言处理领域的许多研究项目,例如协作训练和 BigScience。 | ||
|
||
**Lewis Tunstall** 是 Hugging Face 的机器学习工程师,专注于开发开源工具并使更广泛的社区可以使用它们。他也是即将出版的一本书[O’Reilly book on Transformers](https://www.oreilly.com/library/view/natural-language-processing/9781098103231/)的作者之一。 | ||
|
||
**Leandro von Werra** 是 Hugging Face 开源团队的机器学习工程师,也是即将出版的一本书[O’Reilly book on Transformers](https://www.oreilly.com/library/view/natural-language-processing/9781098103231/)的作者之一。他拥有多年的行业经验,通过在整个机器学习堆栈中工作,将 NLP 项目投入生产。 | ||
|
||
你准备好了吗?在本章中,您将学习: | ||
* 如何使用 `pipeline()` 函数解决文本生成、分类等NLP任务 | ||
* 关于 Transformer 架构 | ||
* 如何区分编码器、解码器和编码器-解码器架构和用例 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,253 @@ | ||
<!-- DISABLE-FRONTMATTER-SECTIONS --> | ||
|
||
# 章末小测试 | ||
|
||
这一章涵盖了很多内容! 如果有一些不太明白的地方,请不要担心; 下一章将帮助你了解这些模块在底层是如何工作的。 | ||
|
||
让我们来测试一下你在这一章学到了什么! | ||
|
||
### 1. 探索 Hub 并寻找 `roberta-large-mnli` checkpoint。 它可以完成什么类型的任务? | ||
|
||
|
||
<Question | ||
choices={[ | ||
{ | ||
text: "文本摘要提取", | ||
explain: "点击前往<a href=\"https://huggingface.co/roberta-large-mnli\">roberta-large-mnli 页面</a>回顾一下." | ||
}, | ||
{ | ||
text: "文本分类", | ||
explain: "更准确地说,它对两个句子在三个标签(矛盾、无关、相近)之间的逻辑链接进行分类——这项任务也称为<em>自然语言推理</em>.", | ||
correct: true | ||
}, | ||
{ | ||
text: "文本生成", | ||
explain: "点击前往<a href=\"https://huggingface.co/roberta-large-mnli\">roberta-large-mnli 页面</a>回顾一下." | ||
} | ||
]} | ||
/> | ||
|
||
### 2. 下面的代码将会返回什么结果? | ||
|
||
```py | ||
from transformers import pipeline | ||
|
||
ner = pipeline("ner", grouped_entities=True) | ||
ner("My name is Sylvain and I work at Hugging Face in Brooklyn.") | ||
``` | ||
|
||
<Question | ||
choices={[ | ||
{ | ||
text: "它将返回这个句子的分类的分数, 带有 \"positive\" 或者 \"negative\"的标签.", | ||
explain: "这个选项是不对的 — <code>sentiment-analysis</code> pipeline将会返回这些." | ||
}, | ||
{ | ||
text: "它将返回一个生成的文本来完成这句话。", | ||
explain: "这个选项是不对的 — <code>text-generation</code> pipeline将会返回这些.", | ||
}, | ||
{ | ||
text: "它将返回代表人员、组织或位置的单词。", | ||
explain: "此外,使用 <code>grouped_entities=True</code>,它会将属于同一实体的单词组合在一起,例如“Hugging Face”。", | ||
correct: true | ||
} | ||
]} | ||
/> | ||
|
||
### 3. 在此代码示例中...的地方应该填写什么? | ||
|
||
```py | ||
from transformers import pipeline | ||
|
||
filler = pipeline("fill-mask", model="bert-base-cased") | ||
result = filler("...") | ||
``` | ||
|
||
<Question | ||
choices={[ | ||
{ | ||
text: "This <mask> has been waiting for you.", | ||
explain: "这个选项是不对的。 请查看 <code>bert-base-cased</code> 模型卡片,然后再尝试找找错在哪里。" | ||
}, | ||
{ | ||
text: "This [MASK] has been waiting for you.", | ||
explain: "正解! 这个模型的mask的掩码是[MASK].", | ||
correct: true | ||
}, | ||
{ | ||
text: "This man has been waiting for you.", | ||
explain: "这个选项是不对的。 这个pipeline的作用是填充经过mask的文字,因此它需要在输入的文本中存在mask的token。" | ||
} | ||
]} | ||
/> | ||
|
||
### 4. 为什么这段代码会无法运行? | ||
|
||
```py | ||
from transformers import pipeline | ||
|
||
classifier = pipeline("zero-shot-classification") | ||
result = classifier("This is a course about the Transformers library") | ||
``` | ||
|
||
<Question | ||
choices={[ | ||
{ | ||
text: "这个pipeline要求提供用来分类此文本的标签。", | ||
explain: "正解 — 正确的代码需要包括:<code>candidate_labels=[...]</code>.", | ||
correct: true | ||
}, | ||
{ | ||
text: "这个pipeline需要多个句子,而不仅仅是一个。", | ||
explain: "这个选项是不对的。尽管正确使用时,此pipeline可以同时处理多个句子(与所有其他pipeline一样)。" | ||
}, | ||
{ | ||
text: "像往常一样,🤗 Transformers库出故障了。", | ||
explain: "对此,我们不予置评!" | ||
}, | ||
{ | ||
text: "该pipeline需要更长的输入; 这个句子太短了。", | ||
explain: "这个选项是不对的。 不过请注意,在这个pipeline处理时,太长的文本将被截断。" | ||
} | ||
]} | ||
/> | ||
|
||
### 5. “迁移学习”是什么意思? | ||
|
||
<Question | ||
choices={[ | ||
{ | ||
text: "通过在同一数据集上训练模型,将预训练模型的知识迁移到新模型。", | ||
explain: "不,那将是同一模型的两个版本。" | ||
}, | ||
{ | ||
text: "通过使用第一个模型的权重初始化第二个模型,将预训练模型的知识迁移到新模型。", | ||
explain: "正确:当第二个模型接受新任务训练时,它*迁移*第一个模型的知识。", | ||
correct: true | ||
}, | ||
{ | ||
text: "构建与第一个模型具有相同架构的第二个模型,将预训练模型的知识迁移到新模型。", | ||
explain: "架构只是模型的构建方式; 在这种情况下,没有知识共享或迁移。" | ||
} | ||
]} | ||
/> | ||
|
||
### 6. 语言模型在预训练时通常不需要标签,这样的说法是否正确。 | ||
|
||
|
||
<Question | ||
choices={[ | ||
{ | ||
text: "正确", | ||
explain: "预训练通常是<em>自监督</em>,这意味着标签是根据输入自动创建的(例如:预测下一个单词或填充一些[MARSK]单词)。", | ||
correct: true | ||
}, | ||
{ | ||
text: "错误", | ||
explain: "这不是一个正确的答案。" | ||
} | ||
]} | ||
/> | ||
|
||
|
||
### 7. 选择最能描述“模型(model)”、“架构(architecture)”和“权重(weights)”的句子。 | ||
<Question | ||
choices={[ | ||
{ | ||
text: "如果模型是一座建筑物,那么它的架构就是蓝图,而权重就是住在里面的人。", | ||
explain: "按照这个比喻,权重将是用于建造建筑物的砖块和其他材料。" | ||
}, | ||
{ | ||
text: "架构是构建模型的地图,其权重是地图上表示的城市。", | ||
explain: "这个比喻的问题在于,一张地图通常代表只有一个确定的事实(法国只有一个城市叫巴黎)。 对于给定的体系结构,多个权重是可能的。" | ||
}, | ||
{ | ||
text: "架构是用于构建模型的一系列数学函数,其权重是这些函数参数。", | ||
explain: "同一组数学函数(架构)可以通过使用不同的参数(权重)来构建不同的模型。", | ||
correct: true | ||
} | ||
]} | ||
/> | ||
|
||
|
||
### 8. 你将使用以下哪种类型的模型来根据输入的提示生成文本? | ||
|
||
<Question | ||
choices={[ | ||
{ | ||
text: "一个“编码器”模型", | ||
explain: "“编码器”模型生成整个句子的表示,这种表示更适合于分类之类的任务。" | ||
}, | ||
{ | ||
text: "一个“解码器”模型", | ||
explain: "“解码器”模型非常适合根据提示生成文本。", | ||
correct: true | ||
}, | ||
{ | ||
text: "一个“序列到序列”模型", | ||
explain: "“序列到序列”模型更适合于你想要根据输入的句子而不是给定的提示生成句子的任务。" | ||
} | ||
]} | ||
/> | ||
|
||
### 9. 你会使用哪些类型的模型来生成文本的摘要? | ||
|
||
<Question | ||
choices={[ | ||
{ | ||
text: "一个“编码器”模型", | ||
explain: "“编码器”模型生成整个句子的表示,这种表示更适合于分类之类的任务。" | ||
}, | ||
{ | ||
text: "一个“解码器”模型", | ||
explain: "“解码器”模型对于生成输出文本(如摘要)很好,但它们不具备利用上下文(如整个文本)进行总结的能力。" | ||
}, | ||
{ | ||
text: "一个“序列到序列”模型", | ||
explain: "“序列到序列”模型非常适合摘要任务。", | ||
correct: true | ||
} | ||
]} | ||
/> | ||
|
||
### 10. 你会使用哪一种类型的模型来根据特定的标签对文本输入进行分类? | ||
|
||
<Question | ||
choices={[ | ||
{ | ||
text: "一个“编码器”模型", | ||
explain: "“编码器”模型可以生成整个句子的表示,非常适合分类这样的任务。", | ||
correct: true | ||
}, | ||
{ | ||
text: "一个“解码器”模型", | ||
explain: "“解码器”模型适合于生成输出文本,而不是从句子中提取标签。" | ||
}, | ||
{ | ||
text: "一个“序列到序列”模型", | ||
explain: "“序列到序列”模型更适合于输入句子而不是标签生成文本的任务。", | ||
} | ||
]} | ||
/> | ||
|
||
### 11. 模型中观察到的偏见有哪些可能的来源? | ||
|
||
<Question | ||
choices={[ | ||
{ | ||
text: "这个模型是一个预训练模型的微调版本,它从中继承了预训练模型的偏见。", | ||
explain: "当应用迁移学习时,在预训练模型中产生的偏见在微调模型中不能完全去除。", | ||
correct: true | ||
}, | ||
{ | ||
text: "用于训练模型的数据是有偏见的。", | ||
explain: "这是最明显的偏见来源,但不是唯一的来源。", | ||
correct: true | ||
}, | ||
{ | ||
text: "模型优化的指标是有偏见的。", | ||
explain: "一个不太明显的偏见来源是模型的训练方式。 你的模型将盲目地只针对你选择的指标进行优化,而不会思考是否会带有偏见。", | ||
correct: true | ||
} | ||
]} | ||
/> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
# 自然语言处理 | ||
|
||
在进入 Transformer 模型之前,让我们快速概述一下自然语言处理是什么以及我们为什么这么重视它。 | ||
|
||
## 什么是自然语言处理? | ||
|
||
NLP 是语言学和机器学习交叉领域,专注于理解与人类语言相关的一切。 NLP 任务的目标不仅是单独理解单个单词,而且是能够理解这些单词的上下文。 | ||
|
||
以下是常见 NLP 任务的列表,每个任务都有一些示例: | ||
|
||
- **对整个句子进行分类**: 获取评论的情绪,检测电子邮件是否为垃圾邮件,确定句子在语法上是否正确或两个句子在逻辑上是否相关 | ||
- **对句子中的每个词进行分类**: 识别句子的语法成分(名词、动词、形容词)或命名实体(人、地点、组织) | ||
- **生成文本内容**: 用自动生成的文本完成提示,用屏蔽词填充文本中的空白 | ||
- **从文本中提取答案**: 给定问题和上下文,根据上下文中提供的信息提取问题的答案 | ||
- **从输入文本生成新句子**: 将文本翻译成另一种语言,总结文本 | ||
|
||
NLP 不仅限于书面文本。它还解决了语音识别和计算机视觉中的复杂挑战,例如生成音频样本的转录或图像描述。 | ||
## 为什么具有挑战性? | ||
|
||
计算机处理信息的方式与人类不同。例如,当我们读到“我饿了”这句话时,我们很容易理解它的意思。同样,给定两个句子,例如“我很饿”和“我很伤心”,我们可以轻松确定它们的相似程度。对于机器学习 (ML) 模型,此类任务更加困难。文本需要以一种使模型能够从中学习的方式进行处理。而且由于语言很复杂,我们需要仔细考虑必须如何进行这种处理。关于如何表示文本已经做了很多研究,我们将在下一章中介绍一些方法。 |
Oops, something went wrong.