OpenAI在2018年发布了一篇重要论文《Improving Language Understanding by Generative Pre-Training》,提出了通过生成式预训练来改进语言理解的方法。这篇论文介绍的Transformer语言模型在多个NLP任务上取得了显著效果。为了让更多研究者能够使用这一模型,Hugging Face团队开发了一个PyTorch版本的实现。
该项目是OpenAI论文中TensorFlow代码的PyTorch实现版本。主要包含以下几个部分:
项目的核心文件是model_pytorch.py
,其中包含了模型类和加载预训练权重的脚本。PyTorch模型中的模块名称尽量与TensorFlow版本保持一致,以最小化差异。
要使用该模型,你需要:
如果要运行训练脚本,还需要安装:
from model_pytorch import TransformerModel, load_openai_pretrained_model, DEFAULT_CONFIG args = DEFAULT_CONFIG model = TransformerModel(args) load_openai_pretrained_model(model)
from model_pytorch import LMHead, ClfHead lm_head = LMHead(model.transformer, args.n_embd) clf_head = ClfHead(model.transformer, args.n_embd, args.n_class)
from utils import encode_dataset encoded_dataset = encode_dataset(dataset, encoder)
项目提供了在ROCStories完形填空任务上进行微调的示例。运行以下命令即可复现论文中的结果:
python -m spacy download en
python train.py --dataset rocstories --desc rocstories --submit --analysis --data_dir [path to data]
在单个NVIDIA K-80 GPU上,微调3个epoch大约需要10分钟。
在ROCStories测试集上,该PyTorch实现获得了85.84%的单次运行准确率。相比之下:
这个PyTorch实现为研究者提供了一个方便使用的OpenAI Transformer语言模型版本。它不仅可以加载预训练权重,还可以轻松地在下游任务上进行微调。未来的工作方向包括进一步优化多GPU训练、探索其他下游任务的应用等。
该项目为NLP研究和应用提供了一个强大的基础模型实现,有望推动相关领域的发展。研究者可以基于此进行更多的探索和创新。