diff --git a/chapters/zh-CN/chapter3/6.mdx b/chapters/zh-CN/chapter3/6.mdx
index f0e33b25c..bf93482ba 100644
--- a/chapters/zh-CN/chapter3/6.mdx
+++ b/chapters/zh-CN/chapter3/6.mdx
@@ -11,11 +11,12 @@
Test what you learned in this chapter!
-### 1.“情绪”数据集包含标记有情绪的 Twitter 消息。在[模型中心](https://huggingface.co/datasets)中搜索它,然后读取数据集卡。哪一个不是它的基本情感?
+
+### 1.`emotion`数据集包含标记有情绪的 Twitter 消息。在[Hub](https://huggingface.co/datasets)中搜索它,然后读取数据集卡。哪一个不是它的基本情感?
-### 2.在[模型中心](https://huggingface.co/datasets)中搜索‘ ar _ sarcasm’数据集,它支持哪个任务?
+### 2.在[Hub](https://huggingface.co/datasets)中搜索`ar_sarcasm`数据集,它支持哪个任务?
dataset card !"
+ explain: "不是这样的ーー再看看 数据集卡 !"
},
{
text: "命名实体识别",
- explain: "不是这样的ーー再看看 < a href =’https://huggingface.co/datasets/ar _ sarcasm’> dataset card !"
+ explain: "不是这样的ーー再看看 数据集卡 !"
},
{
text: "回答问题",
- explain: "Alas, this question was not answered correctly. 再试一次!"
+ explain: "哎呀, 问题回答不正确. 再试一次!"
}
]}
/>
-### 3.BERT 模型期望如何处理一对句子?
+### 3.BERT模型期望如何处理一对句子?
[SEP]标记来分割两个句子,但这并不是唯一的需求!"
},
{
- text: "表示句子的记号表示句子的记号",
- explain: "一个 < code > [ CLS ] 特殊令牌在开始时是必需的,但是这不是唯一的事情!"
+ text: "[CLS]句子1 句子2",
+ explain: "确实在最开始需要一个[CLS]
标记的,但是这不是唯一的事情!"
},
{
- text: "表示句子1[ SEP ]的符号表示句子2[ SEP ]",
+ text: "[CLS]句子1 [SEP] 句子2 [SEP]",
explain: "没错!",
correct: true
},
{
- text: "表示句子1[ SEP ]的符号表示句子2",
- explain: "开头需要一个 < code > [ CLS ] 特殊标记,还需要一个 < code > [ SEP ] 特殊标记来分隔两个句子,但这还不是全部!"
+ text: "[CLS]句子1 [SEP] 句子2",
+ explain: "开头需要一个[CLS]
特殊标记,还需要一个[SEP]
特殊标记来分隔两个句子,但这还不是全部!"
}
]}
/>
{#if fw === 'pt'}
-### 4.‘ Dataset.map ()’方法的好处是什么?
+### 4.`Dataset.map()`方法的好处是什么?
@@ -126,25 +127,25 @@ Test what you learned in this chapter!
choices={[
{
text: "它确保数据集中的所有序列具有相同的长度。",
- explain: "校对函数用于处理单个批处理,而不是整个数据集。此外,我们讨论的是通用的校对函数,而不是特定的 < code > > DataCollatorWithPadding 。"
+ explain: "校对函数用于处理单个批次,而不是整个数据集。此外,我们讨论的是通用的排序函数,而不是专门讨论DataCollatorWithPadding
。"
},
{
- text: "它把所有的样品一批一批地放在一起。",
- explain: "正确! You can pass the collate function as an argument of a DataLoader
. We used the DataCollatorWithPadding
function, which pads all items in a batch so they have the same length.",
+ text: "它把所有的样品放在一起成一批",
+ explain: "正确的!可以将校对函数作为DataLoader
的参数传递。我们使用了DataCollatorWithPadding
函数,该函数填充批处理中的所有项,使它们具有相同的长度。",
correct: true
},
{
- text: "它预处理整个数据集。",
+ text: "它对整个数据集进行预处理。",
explain: "这将是一个预处理函数,而不是校对函数。"
},
{
text: "它截断数据集中的序列。",
- explain: "校对函数用于处理单个批处理,而不是整个数据集。如果您对截断感兴趣,可以使用 < code > tokenizer 的 < truncate 参数。"
+ explain: "校对函数用于处理单个批次,而不是整个数据集。如果您对截断感兴趣,可以使用标记器
的truncate
参数。"
}
]}
/>
-### 7.当你用一个预先训练过的语言模型(例如‘ bert-base-uncased’)实例化一个‘ AutoModelForXxx’类,这个类对应于一个不同于它所被训练的任务时会发生什么?
+### 7.当你用一个预先训练过的语言模型(例如`bert-base-uncased`)实例化一个`AutoModelForXxx`类,这个类对应于一个不同于它所被训练的任务时会发生什么?
Trainer 所做的,而不是 Accelerate 库。再试一次!",
+ explain: "正确的。例如,当我们使用AutoModelForSequenceClassification
配合bert-base-uncase
时,我们在实例化模型时会得到警告。预训练的头部不用于序列分类任务,因此它被丢弃,并用随机权重实例化一个新的头部。",
correct: true
},
{
text: "丢弃预先训练好的模型头部。",
- explain: "Something else needs to happen. 再试一次!"
+ explain: "还有其他事情需要发生。 再试一次!"
},
{
- text: "没有,因为模型仍然可以针对不同的任务进行微调。",
- explain: "这个经过训练的模特的头没有经过训练来解决这个问题,所以我们应该丢掉这个头!"
+ text: "无事发生,因为模型仍然可以针对不同的任务进行微调。",
+ explain: "预训练模型的头部没有被训练来解决这个任务,所以我们应该丢弃头部!!"
}
]}
/>
-### 8.训练争论的目的是什么?
+### 8.`TrainingArguments`的目的是什么?
训练器进行训练和评估的所有超参数。",
explain: "正确!",
correct: true
},
{
text: "它指定模型的大小。",
- explain: "模型大小是由模型配置定义的,而不是类 < code > TrainingArguments 。"
+ explain: "模型大小是由模型配置定义的,而不是类TrainingArguments
。"
},
{
text: "它只包含用于评估的超参数。",
- explain: "In the example, we specified where the model and its checkpoints will be saved. 再试一次!"
+ explain: "在举例中,我们指定了模型及其检查点的保存位置。再试一次!"
},
{
- text: "您可以轻松地计算与数据集相关的指标。",
- explain: "In the example, we used an evaluation_strategy
as well, so this impacts evaluation. 再试一次!"
+ text: "它只包含用于训练的超参数。",
+ explain: "在举例中,我们还使用了求值策略
,因此这会影响求值。再试一次!"
}
]}
/>
-### 9.为什么要使用 Accelerate 库?
+### 9.为什么要使用 🤗Accelerate 库?
Trainer, not the 🤗 Accelerate library. 再试一次!"
+ explain: "这是我们在Trainer
所做的,而不是🤗Accelerate库。再试一次!”"
},
{
text: "它使我们的训练循环工作在分布式策略上",
- explain: "正确! 随着加速,你的训练循环将为多个 gpu 和 TPUs 工作。",
+ explain: "正确! 随着🤗Accelerate库,你的训练循环将为多个GPU和TPU工作。",
correct: true
},
{
text: "它提供了更多的优化功能。",
- explain: "不,Accelerate 库不提供任何优化功能。"
+ explain: "不,🤗Accelerate 库不提供任何优化功能。"
}
]}
/>
{:else}
-### 4.当你用一个预先训练过的语言模型(例如‘ bert-base-uncased’)实例化一个‘ tfautoodelforxxx’类时,会发生什么?
+### 4.当你用一个预先训练过的语言模型(例如`bert-base-uncased`)实例化一个`TFAutoModelForXxx`类时,会发生什么?
TFAutoModelForSequenceClassification配合bert-base-uncase
时,我们在实例化模型时会得到警告。预训练的头部不用于序列分类任务,因此它被丢弃,并用随机权重实例化一个新的头部。",
correct: true
},
{
text: "丢弃预先训练好的模型头部。",
- explain: "Something else needs to happen. 再试一次!"
+ explain: "还有其他事情需要发生。 再试一次!"
},
{
- text: "没有,因为模型仍然可以针对不同的任务进行微调。",
- explain: "这个经过训练的模特的头没有经过训练来解决这个问题,所以我们应该丢掉这个头!"
+ text: "无事发生,因为模型仍然可以针对不同的任务进行微调。",
+ explain: "预训练模型的头部没有被训练来解决这个任务,所以我们应该丢弃头部!!"
}
]}
/>
-### 5.来自“变压器”的 TensorFlow 模型已经是 Keras 模型,这有什么好处?
+### 5.来自`transfomers`的 TensorFlow 模型已经是 Keras 模型,这有什么好处?
TPUStrategy scope 中的所有内容,包括模型的初始化。"
+ text: "这些模型在一个开箱即用的TPU上工作。",
+ explain: "差不多了!还需要进行一些小的额外更改。例如,您需要在TPUStrategy
范围内运行所有内容,包括模型的初始化。"
},
{
- text: "您可以利用现有的方法,如 < code > compile () 、 < code > fit () 和 < code > predict () 。",
+ text: "您可以利用现有的方法,如compile()
、fit()
和predict()
。",
explain: "正确! 一旦你有了这些数据,在这些数据上进行培训只需要很少的工作。",
correct: true
},
{
- text: "你可以学习 Keras 和变形金刚。",
+ text: "你可以学习 Keras 和 transformers库。",
explain: "没错,但我们要找的是别的东西:)",
correct: true
},
{
- text: "困惑",
- explain: "Keras 帮助我们训练和评估模型,而不是计算与数据集相关的度量。"
+ text: "您可以轻松地计算与数据集相关的指标。",
+ explain: "Keras 帮助我们训练和评估模型,而不是计算与数据集相关的指标。"
}
]}
/>
-### 6.如何定义自己的定制度量?
+### 6.如何定义自己的定制指标?
tfkeras.metrics. Metric 。",
+ text: "通过子类化tf.keras.metrics.Metric
。",
explain: "太好了!",
correct: true
},
@@ -274,7 +275,7 @@ Test what you learned in this chapter!
explain: "再试一次!"
},
{
- text: "通过使用带签名的可调用 < code > metric _ fn (y _ true,y _ pred) 。",
+ text: "通过使用带签名的可调用metric_fn(y_true, y_pred)
。",
explain: "正确!",
correct: true
},
diff --git a/chapters/zh-CN/chapter4/6.mdx b/chapters/zh-CN/chapter4/6.mdx
index 806ab4352..8308af695 100644
--- a/chapters/zh-CN/chapter4/6.mdx
+++ b/chapters/zh-CN/chapter4/6.mdx
@@ -102,28 +102,28 @@
]}
/>
-### 5.哪些🤗 Transformers 库的对象可以直接在 Hub 上通过push _ to _ Hub ()共享?
+### 5.哪些🤗 Transformers 库的对象可以直接在 Hub 上通过`push_to_Hub()`共享?
{#if fw === 'pt'}
push_to_hub方法,使用该方法将把所有标记器文件(词汇表、标记器的架构等)推送到给定的存储库。不过,这不是唯一正确的答案!",
correct: true
},
{
text: "模型配置",
- explain: "对!所有模型配置都有 push _ to _ hub 方法,使用这个方法可以将它们推送到给定的存储库。你还有其他能共享的吗?",
+ explain: "对!所有模型配置都有push_to_hub
方法,使用这个方法可以将它们推送到给定的存储库。你还有其他能共享的吗?",
correct: true
},
{
text: "一个模型",
- explain: "正确! 所有模型都有 push_to_hub 方法,使用它会将它们及其配置文件推送到给定的存储库。不过,这并不是您可以共享的全部内容。",
+ explain: "正确! 所有模型都有push_to_hub
方法,使用它会将它们及其配置文件推送到给定的存储库。不过,这并不是您可以共享的全部内容。",
correct: true
},
{
text: "Trainer",
- explain: "没错————Trainer也实现了push _ to _ hub方法,并且使用它将模型、配置、标记器和模型卡草稿上传到给定的存储器。试试其他答案!",
+ explain: "没错————Trainer
也实现了push_to_hub
方法,并且使用它将模型、配置、标记器和模型卡草稿上传到给定的存储器。试试其他答案!",
correct: true
}
]}
@@ -133,29 +133,29 @@
choices={[
{
text: "一个标记器",
- explain: "正确! 所有标记器都有push_to_hub方法,使用该方法将把所有标记器文件(词汇表、标记器的架构等)推送到给定的存储库。不过,这不是唯一正确的答案!",
+ explain: "正确! 所有标记器都有push_to_hub
方法,使用该方法将把所有标记器文件(词汇表、标记器的架构等)推送到给定的存储库。不过,这不是唯一正确的答案!",
correct: true
},
{
text: "模型配置",
- explain: "对!所有模型配置都有 push _ to _ hub 方法,使用这个方法可以将它们推送到给定的存储库。你还有其他能共享的吗?",
+ explain: "对!所有模型配置都有push_to_hub
方法,使用这个方法可以将它们推送到给定的存储库。你还有其他能共享的吗?",
correct: true
},
{
text: "一个模型",
- explain: "正确! 所有模型都有 push_to_hub 方法,使用它会将它们及其配置文件推送到给定的存储库。不过,这并不是您可以共享的全部内容。",
+ explain: "正确! 所有模型都有push_to_hub
方法,使用它会将它们及其配置文件推送到给定的存储库。不过,这并不是您可以共享的全部内容。",
correct: true
},
{
text: "以上都有专用的回调函数",
- explain: "正确————在训练期间,PushToHubCallback会定期将所有这些对象发送到存储器。",
+ explain: "正确————在训练期间,PushToHubCallback
会定期将所有这些对象发送到存储器。",
correct: true
}
]}
/>
{/if}
-### 6.当使用push _ to _ hub ()方法或 CLI 工具时,第一步是什么?
+### 6.当使用`push_to_hub()`方法或 CLI 工具时,第一步是什么?
huggingface _ hub 实用程序: 不需要额外的包装!"
+ text: "在 Python 运行时中,将它们包装在huggingface_hub
实用程序中。",
+ explain: "模型和标记器已经受益于huggingface_hub
实用程序: 不需要额外的包装!"
},
{
- text: "将它们保存到磁盘并调用 < code > transformers-cli upload-model ",
- explain: "命令 < code > upload-model 不存在。"
+ text: "将它们保存到磁盘并调用 transformers-cli upload-model
",
+ explain: "命令 upload-model
不存在。"
}
]}
/>
-### 8.您可以使用'Repository'类执行哪些 git 操作?
+### 8.您可以使用`Repository`类执行哪些 git 操作?
git _ commit () > 方法就是为此而存在的。",
+ explain: "正确,git_commit()
方法就是为此而存在的。",
correct: true
},
{
- text: "拉一下",
- explain: "这就是 < code > git _ pull () 方法的目的。",
+ text: "拉取",
+ explain: "这就是 git_pull()
方法的目的。",
correct: true
},
{
- text: "推一下",
- explain: "方法 < code > git _ push () 可以做到这一点。",
+ text: "推送",
+ explain: "方法 git_push()
可以做到这一点。",
correct: true
},
{
diff --git a/chapters/zh-CN/chapter5/8.mdx b/chapters/zh-CN/chapter5/8.mdx
index 502c0d8b5..503108c9c 100644
--- a/chapters/zh-CN/chapter5/8.mdx
+++ b/chapters/zh-CN/chapter5/8.mdx
@@ -44,8 +44,8 @@ dataset = load_dataset("glue", "mrpc", split="train")
dataset.sample (50) ",
- explain: "这是不正确的——没有 < code > Dataset.sample () 方法。"
+ text: "dataset.sample(50)
",
+ explain: "这是不正确的——没有 Dataset.sample()
方法。"
},
{
text: "dataset.shuffle().select(range(50))
",
@@ -63,17 +63,17 @@ dataset = load_dataset("glue", "mrpc", split="train")
pets _ dataset. filter (lambda x: x ['name'] . startswith ('L')) ",
+ text: "pets_dataset.filter(lambda x: x['name'].startswith('L'))
",
explain: "正确! 为这些快速过滤使用 Python lambda 函数是一个好主意。你还能想到其他解决方案吗?",
correct: true
},
{
- text: "< code > pets _ dataset. filter (lambda x ['name'] . startswith ('L') ",
- explain: "这是不正确的—— lambda 函数采用通用格式 < code > lambda * arguments * : * expression * , 因此在这种情况下需要提供参数。"
+ text: "pets_dataset.filter(lambda x['name'].startswith('L')
",
+ explain: "这是不正确的—— lambda 函数采用通用格式 lambda * arguments * : * expression *
, 因此在这种情况下需要提供参数。"
},
{
- text: "创建一个类似于 < code > def filter _ names (x) : return x ['name'] . startswith ('L') 的函数并运行 < code > pets _ dataset. filter (filter _ names) 。",
- explain: "正确!就像使用 < code > Dataset.map () 一样,你可以将显式函数传递给 < code > Dataset.filter () 。当你有一些不适合于简短 lambda 函数的复杂逻辑时,这是非常有用的。其他解决方案中还有哪一个可行?",
+ text: "创建一个类似于 def filter_names(x) : return x['name'].startswith('L')
的函数并运行 pets_dataset.filter(filter_names)
。",
+ explain: "正确!就像使用 Dataset.map()
一样,你可以将显式函数传递给 Dataset.filter()
。当你有一些不适合于简短 lambda 函数的复杂逻辑时,这是非常有用的。其他解决方案中还有哪一个可行?",
correct: true
}
]}
@@ -133,13 +133,13 @@ dataset[0]
explain: "这是不正确的---- 流数据集是动态解压的, 你可以用非常小的RAM处理TB大小的数据集!",
},
{
- text: "它尝试访问 < code > IterableDataset 。",
- explain: "正确! < code > IterableDataset 是一个生成器, 而不是一个容器, 因此你应该使用 < code > next (iter (dataset)) 来访问它的元素。",
+ text: "它尝试访问 IterableDataset
。",
+ explain: "正确! IterableDataset
是一个生成器, 而不是一个容器, 因此你应该使用 next(iter(dataset))
来访问它的元素。",
correct: true
},
{
- text: "数据集 < code > allocine 没有分割< code >训练集。",
- explain: "这是不正确的---- 查看 Hub 上的[ < code > allocine dataset card ]( https://huggingface.co/datasets/allocine ), 看看它包含哪些拆分。"
+ text: "数据集 allocine
没有分割train
。",
+ explain: "这是不正确的---- 查看 Hub 上的[allocine
数据集卡](https://huggingface.co/datasets/allocine), 看看它包含哪些拆分。"
}
]}
/>