您可以使用特定于任务的架构从头开始训练 BERT 模型吗?

Posted

技术标签:

【中文标题】您可以使用特定于任务的架构从头开始训练 BERT 模型吗?【英文标题】:Can you train a BERT model from scratch with task specific architecture? 【发布时间】:2020-09-01 17:26:50 【问题描述】:

基本模型的 BERT 预训练是通过语言建模方法完成的,我们在句子中掩盖一定百分比的标记,并让模型学习那些缺失的掩码。然后,我认为为了完成下游任务,我们添加了一个新初始化的层,并对模型进行微调。

但是,假设我们有一个用于句子分类的巨大数据集。理论上,我们是否可以从头开始初始化 BERT 基础架构,仅使用这个句子分类数据集从头开始训练额外的下游任务特定层 + 基础模型权重,仍然可以获得良好的结果?

谢谢。

【问题讨论】:

【参考方案1】:

BERT 可以被视为一种语言编码器,它通过大量数据进行训练以很好地学习语言。众所周知,最初的 BERT 模型是在整个英文***和书籍语料库上进行训练的,总和为 3,300M 个单词。 BERT-base 有 109M 的模型参数。所以,如果你认为你有足够大的数据来训练 BERT,那么你的问题的答案是肯定的。

但是,当您说“仍然取得不错的结果”时,我假设您是在与原始 BERT 模型进行比较。在这种情况下,答案就在于训练数据的大小。

我想知道为什么你更喜欢从头开始训练 BERT 而不是对其进行微调?是不是怕域适配问题?如果没有,预训练的 BERT 可能是一个更好的起点。

请注意,如果您想从头开始训练 BERT,您可以考虑使用更小的架构。您可能会发现以下论文很有用。

Well-Read Students Learn Better: On the Importance of Pre-training Compact Models ALBERT: A Lite BERT for Self-supervised Learning of Language Representations

【讨论】:

你完全正确。我不得不稍微修改基本的 BERT 架构,所以我不能使用预训练的 base-bert。我的 200k 数据集是高度特定于领域的。我最初的想法是使用这些具有语言建模架构的 200k 数据集从头开始训练 BERT,然后针对特定于任务的任务再次对其进行微调,但我很好奇我是否可以跳过语言模型训练并直接训练特定于任务的任务,但仍然获得类似的结果,因为对于预训练和微调,我使用的是相同的数据集。 (我认为这是重复的)。非常感谢! @Wasi Ahmad,请问如何在我自己的 python 数据集上微调 BERT 模型? @nour tensorflow tutorial?

以上是关于您可以使用特定于任务的架构从头开始训练 BERT 模型吗?的主要内容,如果未能解决你的问题,请参考以下文章

第17篇TextCNN

论文泛读200通过适配器使用预训练语言模型进行稳健的迁移学习

论文泛读200通过适配器使用预训练语言模型进行稳健的迁移学习

陈丹琦带着清华特奖学弟发布新成果:打破谷歌BERT提出的训练规律!这个庆祝方式太学神了吧...

预训练模型-从BERT原理到BERT调包和微调

BERT模型