Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion chapters/zh-CN/chapter1/4.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ Transformer 架构最初是为翻译而设计的。在训练期间,编码器
<img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers-dark.svg" alt="Architecture of a Transformers models"/>
</div>

注意,解码器块中的第一个注意力层关联到解码器的所有(过去的)输入,但是第二个注意力层只使用编码器的输出。因此,它在预测当前单词时,可以使用整个句子的信息。这是非常有用的,因因为不同的语言可以有把词放在不同顺序的语法规则,或者句子后面提供的一些上下文可能有助于确定给定单词的最佳翻译。
注意,解码器块中的第一个注意力层关联到解码器的所有(过去的)输入,但是第二个注意力层只使用编码器的输出。因此,它在预测当前单词时,可以使用整个句子的信息。这是非常有用的,因为不同的语言可以有把词放在不同顺序的语法规则,或者句子后面提供的一些上下文可能有助于确定给定单词的最佳翻译。

也可以在编码器/解码器中使用*attention mask(注意力掩码层)*,以防止模型关注到某些特殊单词。例如,用于在批量处理句子时使所有输入长度一致的特殊填充词。

Expand Down
14 changes: 7 additions & 7 deletions chapters/zh-CN/chapter2/2.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -61,16 +61,16 @@ classifier(

让我们先简单了解一下这三个步骤。

## 使用 tokenizer( tokenizer )进行预处理 [[使用 tokenizer( tokenizer )进行预处理]]
## 使用 tokenizer( 分词器 )进行预处理 [[使用 tokenizer( 分词器 )进行预处理]]

与其他神经网络一样,Transformer 模型无法直接处理原始文本,因此我们管道的第一步是将文本输入转换为模型能够理解的数字。为此,我们使用 tokenizer( tokenizer ),它将负责:
与其他神经网络一样,Transformer 模型无法直接处理原始文本,因此我们管道的第一步是将文本输入转换为模型能够理解的数字。为此,我们使用 tokenizer( 分词器 ),它将负责:

- 将输入拆分为单词、子单词或符号(如标点符号),称为 **token**(标记)
- 将每个标记(token)映射到一个数字,称为 **input ID**(inputs ID)
- 将每个token(标记)映射到一个数字,称为 **input ID**(输入 ID)
- 添加模型需要的其他输入,例如特殊标记(如 `[CLS]` 和 `[SEP]` )
- - 位置编码:指示每个标记在句子中的位置。
- - 段落标记:区分不同段落的文本。
- - 特殊标记:例如 [CLS] 和 [SEP] 标记,用于标识句子的开头和结尾。
- 位置编码:指示每个标记在句子中的位置。
- 段落标记:区分不同段落的文本。
- 特殊标记:例如 `[CLS]``[SEP]` 标记,用于标识句子的开头和结尾。

在使用模型时所有这些预处理都需要与模型预训练时的方式完全相同,因此我们首先需要从 [Model Hub](https://huggingface.co/models) 中下载这些信息。为此,我们使用 `AutoTokenizer` 类和它的 `from_pretrained()` 方法,并输入我们模型 checkpoint 的名称,它将自动获取与模型的 tokenizer 相关联的数据,并对其进行缓存(因此只有在你第一次运行下面的代码时才会下载)。

Expand All @@ -83,7 +83,7 @@ checkpoint = "distilbert-base-uncased-finetuned-sst-2-english"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
```

当我们有了 tokenizer,我们就可以直接将我们的句子传递给它,我们就会得到一个 `input ID(inputs ID)` 的列表!剩下要做的唯一一件事就是将 input ID 列表转换为 tensor(张量)。
当我们有了 tokenizer,我们就可以直接将我们的句子传递给它,我们就会得到一个 `input ID(输入 ID)` 的列表!剩下要做的唯一一件事就是将 input ID 列表转换为 tensor(张量)。

你在使用🤗 Transformers 时,您无需担心它背后的机器学习框架;它可能是 PyTorch 或 TensorFlow,或 Flax。但是,Transformers 模型只接受 `tensor(张量)` 作为输入。如果这是你第一次听说 tensor,你可以把它们想象成 NumPy 数组。NumPy 数组可以是标量(0D)、向量(1D)、矩阵(2D)或具有更多维度。这些都可以称为 tensor;其他 ML 框架的 tensor 使用方法也类似,通常与 NumPy 数组一样容易创建。

Expand Down
8 changes: 2 additions & 6 deletions chapters/zh-CN/chapter3/2.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -302,9 +302,7 @@ def tokenize_function(example):

请注意,我们暂时在 `tokenize_function` 中省略了 padding 参数。这是因为将所有的样本填充到最大长度有些浪费。一个更好的做法是:在构建 batch 的时候。这样我们只需要填充到每个 batch 中的最大长度,而不是整个数据集的最大长度。当输入长度不稳定时,这可以节省大量时间和处理能力!

下面是我们如何使用一次性 `tokenize_function` 处理整个数据集。我们在调用 `map` 时使用了 `batch =True` ,这样函数就可以同时处理数据集的多个元素,而不是分别处理每个元素,这样可以更快进行预处理。

以下是如何使用 tokenization 函数处理我们的整个数据集的方法。我们在调用 map 时使用了 `batched=True` ,因此该函数会一次性处理数据集的多个元素,而不是单独处理每个元素。这样可以实现更快的预处理。
以下是如何使用 `tokenize_function` 函数处理我们的整个数据集的方法。我们在调用 map 时使用了 `batched=True` ,因此该函数会一次性处理数据集的多个元素,而不是单独处理每个元素。这样可以实现更快的预处理。

```py
tokenized_datasets = raw_datasets.map(tokenize_function, batched=True)
Expand Down Expand Up @@ -384,8 +382,6 @@ samples = {k: v for k, v in samples.items() if k not in ["idx", "sentence1", "se

不出所料,我们得到了不同长度的样本,从 32 到 67。动态填充意味着这个 batch 都应该填充到长度为 67,这是这个 batch 中的最大长度。如果没有动态填充,所有的样本都必须填充到整个数据集中的最大长度,或者模型可以接受的最大长度。让我们再次检查 `data_collator` 是否正确地动态填充了这批样本:

```py:

```py
batch = data_collator(samples)
{k: v.shape for k, v in batch.items()}
Expand Down Expand Up @@ -424,7 +420,7 @@ batch = data_collator(samples)

现在我们有了 dataset 和 data collator,我们需要使用 data collator 批量地处理 dataset。我们可以手动加载批次并进行整合,但这需要大量工作,性能也有可能不好。相反,有一个简单的方法为这个问题提供高效的解决方案: `to_tf_dataset()` 。它将把你的数据集包装一个 `tf.data.Dataset` 类中,这个方法带有一个可选的 data collator 功能。 `tf.data.Dataset` 是 TensorFlow 的本地格式,Keras 可以直接用它来进行 `model.fit()` ,因此这种方法会立即将🤗 Dataset 转换为可用于训练的格式。让我们用我们的数据集演示一下这个方法!

```py
```python
tf_train_dataset = tokenized_datasets["train"].to_tf_dataset(
columns=["attention_mask", "input_ids", "token_type_ids"],
label_cols=["labels"],
Expand Down