【问题标题】:How to extend the vocabulary of a pretrained transformer model?如何扩展预训练的 Transformer 模型的词汇量?
【发布时间】:2022-11-02 20:04:04
【问题描述】:
我想扩展zero-shot text classification (NLI) model 的词汇表,以包含特定领域的词汇表,或者只是为了使其保持最新状态。例如,我希望模型知道最新的 COVID-19 变体的名称与“医疗保健”主题相关。
我已将标记添加到标记器并调整了标记嵌入的大小。但是,我不知道如何微调嵌入层中的权重,正如 here 所建议的那样。
为了进行微调,我是否可以简单地使用包含新词汇和现有词汇混合的文本,并让分词器以无监督的方式通过共现识别令牌之间的关系?
任何帮助表示赞赏,谢谢!
【问题讨论】:
标签:
nlp
data-science
huggingface-transformers
huggingface-tokenizers
fine-tune
【解决方案1】:
如果您使用resize_token_embeddings 调整相应嵌入权重的大小,它们将被随机初始化。
从技术上讲,您可以在目标任务(在您的情况下为 NLI)上微调模型,而无需触及嵌入权重。在实践中,您的模型将更难了解有关新添加标记的任何有意义的信息,因为它们的嵌入是随机初始化的。
要学习嵌入权重,您可以在对目标任务进行微调之前进行进一步的预训练。这是通过在预训练目标(例如蒙面语言建模)上训练模型来完成的。预训练当然比微调更昂贵,但请记住,你不是从头开始预训练,因为你是从已经预训练模型的检查点开始预训练的。因此,epochs/steps 的数量将明显少于原始预训练设置中使用的数量。
在进行预训练时,包含域内文档将是有益的,这样它就可以学习新添加的标记。根据您是否希望模型更加特定于域或保持变化以不“忘记”任何先前的域,您可能还希望包含来自各种域的文档。
Don't Stop Pretraining paper 也可能是一个有趣的参考,它深入研究了有关使用的数据类型以及训练步骤的细节。