该教程于6月2日在NAACL 2019在美国明尼阿波利斯的NAACL举行,由塞巴斯蒂安·鲁德(Sebastian Ruder),马修·彼得斯(Matthew Peters),斯瓦巴·斯瓦纳(Swabha Swayamdipta)和托马斯·沃尔夫(Thomas Wolf)提供。
这是NAACL教程的网页,以获取更多信息。
教程的幻灯片可以在此处找到:https://tinyurl.com/naacltransfer。
可以在此处找到带有教程的所有代码的Google COLAB笔记本:https://tinyurl.com/naacltransfercolab。
当前的存储库也可以使用以下简短URL访问:https://tinyurl.com/naacltransfercode
经典的监督机器学习范式基于隔离学习的学习,一个使用单个数据集的任务的单个预测模型。这种方法需要大量的培训示例,并且最适合定义明确和狭窄的任务。转移学习是指通过利用来自其他域或任务的数据来训练具有更好概括属性的模型来扩展此方法的一组方法。
在过去的两年中,自然语言处理领域(NLP)见证了几种转移学习方法和体系结构的出现,这些方法和体系结构在各种NLP任务上都大大改善了。
这些改进以及这些方法的广泛可用性和易用性使人联想到导致在计算机视觉中预处理的嵌入和Imagenet预处理成功的因素,并表明这些方法可能成为NLP景观中的常见工具以及重要的研究方向。
我们将概述NLP中的现代转移学习方法,如何进行预培训,他们学习捕获的表示形式以及审查如何在下游NLP任务中集成和调整这些模型的示例和案例研究。
该代码库试图以最简单,最紧凑的方式呈现一些主要的转移学习技术,这些技术在过去几年中出现了。此存储库中的代码并不试图成为最新的。但是,已经努力实现合理的绩效,并进行了一些修改,使其与当前的最新状态竞争。
已经做出了特别的努力
目前,代码库包括:
pretraining_model.py :具有GPT-2样结构的变压器模型,作为基本预验证的模型;pretraining_train.py :一个预处理的脚本,可以使用分布式培训(如果有)进行分布式培训,以选择大型数据集(Wikitext-103,SimpleBooks-92)的语言建模目标训练该模型;finetuning_model.py :基于用于微调的变压器模型的几个体系结构(顶部有分类头,带有适配器);finetuning_train.py :一个微调脚本,可以在分类任务(IMDB)上微调这些体系结构。 要使用此代码库,只需克隆github存储库,然后安装这样的要求:
git clone https://github.com/huggingface/naacl_transfer_learning_tutorial
cd naacl_transfer_learning_tutorial
pip install -r requirements.txt要预先训练变压器,请运行pretraining_train.py脚本:
python ./pretraining_train.py或使用这样的分布式培训(对于8 GPU服务器):
python -m torch.distributed.launch --nproc_per_node 8 ./pretraining_train.py培训前脚本将:
wikitext-103用于预训练(默认),./runs下方在Wikitext-103上验证约29的验证困惑将在8 V100 GPU上大约需要15小时(可以较早停止)。如果您对SOTA感兴趣,则有几个原因的验证困惑比等效的Transformer-XL困惑(大约24)高一点。主要原因是使用开放的词汇(Bert Tokenizer的子字)而不是封闭的词汇(请参阅Sebastian Mielke的此博客文章,以获取一些解释)
提供各种预培训选项,您可以列出以下方式:
python ./pretraining_train.py --help要微调预训练的变压器,请运行finetuning_train.py脚本:
python ./finetuning_train.py --model_checkpoint PATH-TO-YOUR-PRETRAINED-MODEL-FOLDER PATH-TO-YOUR-PRETRAINED-MODEL-FOLDER可以例如./runs/May17_17-47-12_my_big_server
或使用这样的分布式培训(对于8 GPU服务器):
python -m torch.distributed.launch --nproc_per_node 8 ./finetuning_train.py --model_checkpoint PATH-TO-YOUR-PRETRAINED-MODEL-FOLDER提供各种微调选项,您可以列出:
python ./finetuning_train.py --help