From 480b0c80d1b01899d4a18464946985fada09f291 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E5=BC=A0?= Date: Sun, 12 Sep 2021 21:40:43 +0800 Subject: [PATCH] =?UTF-8?q?Update=204.0=20=E5=9F=BA=E4=BA=8EHugging=20Face?= =?UTF-8?q?=20-Transformers=E7=9A=84=E9=A2=84=E8=AE=AD=E7=BB=83=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E5=BE=AE=E8=B0=83.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... 基于Hugging Face -Transformers的预训练模型微调.md | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/docs/篇章4-使用Transformers解决NLP任务/4.0 基于Hugging Face -Transformers的预训练模型微调.md b/docs/篇章4-使用Transformers解决NLP任务/4.0 基于Hugging Face -Transformers的预训练模型微调.md index 0931fed..15b7fd6 100644 --- a/docs/篇章4-使用Transformers解决NLP任务/4.0 基于Hugging Face -Transformers的预训练模型微调.md +++ b/docs/篇章4-使用Transformers解决NLP任务/4.0 基于Hugging Face -Transformers的预训练模型微调.md @@ -1,4 +1,4 @@ -本文参考资料是[Hugging Face主页](https://huggingface.co/)Resources下的课程。在此课程基础上做了一些翻译工作,节选部分内容并注释(加粗斜体),加了Trainer和args主要参数介绍。感兴趣的同学可以去查看[原文](https://huggingface.co/course/chapter1)。 +本文参考资料是[Hugging Face主页](https://huggingface.co/)Resources下的课程。在此课程基础上做了一些翻译工作,节选部分内容并注释(加粗斜体),并加了Trainer和args主要参数介绍。感兴趣的同学可以去查看[原文](https://huggingface.co/course/chapter1)。 **** 本章节主要内容包含两部分内容: - pipeline工具演示NLP任务处理 @@ -28,7 +28,7 @@ - [Dynamic padding——动态填充技术](#dynamic-padding动态填充技术) ## 1. 简介 -本章节将使用 [Hugging Face 生态系统中的库](https://github.com/huggingface)——🤗 Transformers、🤗 Datasets、🤗 Tokenizers 和 🤗 Accelerate——以及 Hugging Face Hub,来进行自然语言处理工作(NLP)。 +本章节将使用 [Hugging Face 生态系统中的库](https://github.com/huggingface)——🤗 Transformers来进行自然语言处理工作(NLP)。 ### Transformers的历史 以下是 Transformer 模型(简短)历史中的一些参考点: ![transformers_chrono](https://img-blog.csdnimg.cn/3ba51fe4f21d4d528ca7b0f2fd78aee4.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA56We5rSb5Y2O,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center) @@ -48,16 +48,16 @@ - BART/T5 类(Transformer-encoder-decoder模型) ### Architectures和checkpoints -当我们在本课程中深入研究 Transformer 模型时,您会看到架构Architectures和检查点checkpoints以及模型的提及。 这些术语的含义略有不同: +对Transformer模型的研究中,会出现一些术语:架构Architecture和检查点checkpoint以及Model。 这些术语的含义略有不同: -Architectures:这是模型的骨架——对模型每一层的定义和模型中发生的每个操作。 +Architecture:定义了模型的基本结构和基本运算 -checkpoints:模型的某个训练状态,加载此checkpoint会加载此时的权重。(训练时可以选择自动保存checkpoint) +checkpoint:模型的某个训练状态,加载此checkpoint会加载此时的权重。(训练时可以选择自动保存checkpoint) -Model:这是一个总称,不像“架构”或“检查点”那样精确:它可以同时表示两者。 当需要减少歧义时,本课程将指定架构或检查点。
+Model:这是一个总称,不像“架构”或“检查点”那样精确,它可以同时表示两者。 当需要减少歧义时,本课程将指定架构或检查点。
例如,BERT 是一种 Architectures,而 bert-base-cased(谷歌团队为 BERT 的第一个版本训练的一组权重)是一个checkpoints。 但是,可以说“the BERT model”和“the bert-base-cased model”。 -***checkpoint概念在大数据里面说的比较多。我的理解是模型在训练时可以设置自动保存于某个时间点(比如模型训练了一轮epoch,更新了参数,将这个状态的模型保存下来,为一个checkpoint。) +***checkpoint概念在大数据里面说的比较多。模型在训练时可以设置自动保存于某个时间点(比如模型训练了一轮epoch,更新了参数,将这个状态的模型保存下来,为一个checkpoint。) 所以每个checkpoint对应模型的一个状态,一组权重。大数据中检查点是一个数据库事件,存在的根本意义是减少崩溃时间。即减少因为意外情况数据库崩溃后重新恢复的时间。*** ### The Inference API [Model Hub](https://huggingface.co/models)(模型中心)包含多语言模型的checkpoints。您可以通过单击语言标签来优化对模型的搜索,然后选择生成另一种语言文本的模型。 @@ -110,7 +110,7 @@ classifier([ - zero-shot-classification零样本分类 您也可以从 Hub 中针对特定任务来选择特定模型的管道 例如,文本生成。转到 [Model Hub](https://huggingface.co/models)并单击左侧的相应标签,页面将会仅显示文本生成任务支持的模型。 -(***除了模型要匹配任务,更进一步考虑的因素之一是:预训练模型训练时使用的数据集,要尽可能的接近你需要处理的任务包含的数据集,两个数据集越接近越好。我扯这么多也是想提供点思路***) +(***除了模型要匹配任务,更进一步考虑的因素之一是:预训练模型训练时使用的数据集,要尽可能的接近你需要处理的任务所包含的数据集,两个数据集越接近越好。***) Transformers pipeline API 可以处理不同的 NLP 任务。您可以使用完整架构,也可以仅使用编码器或解码器,具体取决于您要解决的任务类型。 下表总结了这一点: @@ -217,7 +217,7 @@ Model heads:将隐藏状态的高维向量(也就是logits向量)作为输 以情感分类为例,我们需要一个带有序列分类的Model head(能够将句子分类为正面或负面)。 因此,我们实际上不会使用 AutoModel 类,而是使用 AutoModelForSequenceClassification: -(***也就是前面写的model = AutoModel.from_pretrained(checkpoint)并不能得到情感分类任务的结果,因为没有加载Model head***) +(***也就是说前面写的model = AutoModel.from_pretrained(checkpoint)并不能得到情感分类任务的结果,因为没有加载Model head***) ```python from transformers import AutoModelForSequenceClassification @@ -639,10 +639,10 @@ Trainer 默认支持 多GPU/TPU,也支持混合精度训练,可以在训练 - 特征提取(预训练模型不做后续训练,不调整权重) - 微调(根据下游任务简单训练几个epoch,调整预训练模型权重) -某个人说的是:就像BERT论文第五部分(实验)写的,虽然BERT做NLP任务有两种方法,但是不建议不训练模型,就直接输出结果来预测。而且Hugging Face的作者就推荐大家使用Trainer来训练模型。 +BERT论文第五部分(实验)写的,虽然BERT做NLP任务有两种方法,但是不建议不训练模型,就直接输出结果来预测。而且Hugging Face的作者也推荐大家使用Trainer来训练模型。 实际中,微调的效果也会明显好于特征提取(除非头铁,特征提取后面接一个很复杂的模型)。 -至于为什么用Trainer,之前已经说了。Trainer是专门为Transformers写的一个PyTorch 训练和评估循环,否则就要自定义训练循环。 +至于为什么用Trainer来微调,之前也已经说了:Trainer是专门为Transformers写的一个PyTorch训练和评估循环API,使用相对简单一点。否则就要自定义训练循环。 这一小段是我的理解,不在HF主页课程中。 @@ -717,7 +717,7 @@ model = BertModel.from_pretrained("bert-base-cased") ``` 正如您之前看到的,我们可以用 AutoModel 类替换 BertModel,效果是一样的。后面我们会使用AutoModel类,这样做的好处是设定模型结构的部分可以不影响checkpoint。如果您的代码适用于一个checkpoint,那么也可以用于另一个checkpoint。甚至即使模型结构不同,只要checkpoint是针对类似任务训练的,也适用。 -***感觉这句话意思是,使用AutoModel类,传入不同的ckeckpoint,就可以实现不同的模型,来处理任务(只要这个模型的输出可以处理此任务)。如果选择BertModel这样的,模型结构就定死了。*** +***使用AutoModel类,传入不同的ckeckpoint,就可以实现不同的模型,来处理任务(只要这个模型的输出可以处理此任务)。如果选择BertModel这样的,模型结构就定死了。*** 在上面的代码示例中,我们没有使用 BertConfig(BertConfig是初始化的模型,没有经过任何训练),而是通过标识符"bert-base-cased"加载了一个预训练模型的checkpoint,这个checkpoint由 BERT 的作者自己训练。您可以在其[model card](https://huggingface.co/bert-base-cased)中找到有关它的更多详细信息。 @@ -767,6 +767,8 @@ batch = data_collator(samples) 'labels': torch.Size([8])} ``` +Tips:以上加粗的斜体字都是笔者的注释,是对原文部分内容的解读。本教程中如果发现问题请及时反馈,谢谢。 +