（空气呼啸） (air whooshing)
（空气爆裂声） (air popping)
（空气呼啸） (air whooshing)
- Trainer API。 - The Trainer API.
Transformers Library 提供了一个 Trainer API The Transformers Library provides a Trainer API
让你能够轻松的微调 Transformer 模型 that allows you to easily fine-tune transformer models
在你自己的数据集上。 on your own dataset.
Trainer 类接受你的数据集， The Trainer class take your datasets,
你的模型以及训练超参数 your model as well as the training hyperparameters
并且可以在任何类型的设置上进行训练， and can perform the training on any kind of setup,
(CPU、GPU、多个 GPU、TPUs) (CPU, GPU, multiple GPUs, TPUs)
也可以在任意数据集上进行推理 can also compute the predictions
如果你提供了指标 on any dataset and if you provided metrics
就可以在任意数据集上评估你的模型。 evaluate your model on any dataset.
Trainer 也可以负责最后的数据处理 It can also handle final data processing
比如动态填充， such as dynamic padding,
只要你提供 tokenizer as long as you provide the tokenizer
或给定 data collator。 or a given data collator.
我们将在 MRPC 数据集上尝试这个 API， We will try this API on the MRPC dataset,
因为该数据集相对较小且易于预处理。 since it's relatively small and easy to preprocess.
正如我们在 Datasets 概述视频中看到的那样， As we saw in the Datasets overview video,
我们可以像这样对其进行预处理。 here is how we can preprocess it.
我们在预处理过程中不进行填充， We do not apply padding during the preprocessing,
因为我们将进行动态填充 as we will use dynamic padding
使用我们的 DataCollatorWithPadding。 with our DataCollatorWithPadding.
请注意，我们不执行一些最终的数据处理步骤 Note that we don't do the final steps
像是重命名列/删除列 of renaming/removing columns
或将格式设置为 torch 张量。 or set the format to torch tensors.
Trainer 会自动为我们做这一切 The Trainer will do all of this automatically for us
通过分析模型签名。 by analyzing the model signature.
实例化 Trainer 前的最后一步是 The last step before creating the Trainer are
定义模型 to define a model
和一些训练超参数。 and some training hyperparameters.
我们在 model API 视频中学会了如何定义模型。 We saw to do the first in the model API video.
对于第二点，我们使用 TrainingArguments 类。 For the second we use the TrainingArguments class.
Trainer 只需要一个文件夹的路径 It only takes a path to a folder
用以保存结果和检查点， where results and checkpoint will be saved,
但你也可以自定义你的 Trainer 会使用的 but you can also customize all the hyperparameters
所有超参数 your Trainer will use,
比如学习率，训练几个 epoch 等等。 learning rate, number of training epochs etc.
接下来实例化一个 Trainer 并开始训练 It's then very easy to create a Trainer
就非常简单了。 and launch a training.
这会显示一个进度条 This should display a progress bar
几分钟后(如果你在 GPU 上运行) and after a few minutes (if you're running on a GPU)
你会完成训练。 you should have the training finished.
然而，结果将是相当虎头蛇尾， The result will be rather anticlimactic however,
因为你只会得到训练损失 as you will only get a training loss
这并没有真正告诉你 which doesn't really tell you anything
你的模型表现如何。 about how well your model is performing.
这是因为我们没有指定任何指标 This is because we didn't specify any metric
用于评估。 for the evaluation.
要获得这些指标， To get those metrics,
我们将首先使用预测方法 we will first gather the predictions
在整个评估集上收集预测结果。 on the whole evaluation set using the predict method.
它返回一个包含三个字段的命名元组， It returns a namedtuple with three fields,
Prediction （其中包含模型的预测）， Prediction(which contains the model predictions),
Label_IDs （其中包含标签 Label_IDs(which contains the labels
如果你的数据集有的话） if your dataset had them）
和指标（在本示例中是空的） and metrics (which is empty here).
我们正在努力做到这一点。 We're trying to do that.
预测结果是模型 The predictions are the logits of the models
对于数据集中的所有句子所输出的 logits。 for all the sentences in the dataset.
所以是一个形状为 408 x 2 的 NumPy 数组。 So a NumPy array of shape 408 by 2.
为了将它们与我们的标签相匹配， To match them with our labels,
我们需要取最大的 logit we need to take the maximum logit
对于每个预测 for each prediction
（知道两个类别中的哪一个类是所预测的结果） (to know which of the two classes was predicted.)
我们使用 argmax 函数来做到这一点。 We do this with the argmax function.
然后我们可以使用 Datasets library 中的指标。 Then we can use a metric from the Datasets library.
它可以像数据集一样被轻松地加载 It can be loaded as easily as a dataset
使用 load_metric 函数 with the load_metric function
并且返回用于该数据集的评估指标。 and it returns the evaluation metric used for the dataset.
我们可以看到我们的模型确实学到了一些东西 We can see our model did learn something
因为它有 85.7% 的准确率。 as it is 85.7% accurate.
为了在训练期间监控评估指标， To monitor the evaluation metrics during training,
我们需要定义一个 compute_metrics 函数 we need to define a compute_metrics function
和以前一样的步骤。 that does the same step as before.
它接收一个带有预测和标签的命名元组 It takes a namedtuple with predictions and labels
并且返回一个字典 and must return a dictionary
包含我们想要跟踪的指标。 with the metrics we want to keep track of.
通过将评估策略设置为 epoch By passing the epoch evaluation strategy
对于我们的 TrainingArguments， to our TrainingArguments,
我们告诉 Trainer 去进行评估 we tell the Trainer to evaluate
在每个 epoch 结束的时候。 at the end of every epoch.
在 notebook 中启动训练 Launching a training inside a notebook
会显示一个进度条 will then display a progress bar
并在你运行完每个 epoch 时将数据填到你看到的这个表格。 and complete the table you see here as you pass every epoch.
（空气呼啸） (air whooshing)
（空气渐弱） (air decrescendos)