所以官方的 BERT 英文模型是在 Wikipedia 和 BookCurpos (source)上训练的。
现在,例如,假设我想使用 BERT 进行电影标签推荐。我有什么理由在电影相关数据集上从头开始预训练一个新的 BERT 模型?
自从我在电影相关文本而不是一般文本上训练模型后,我的模型能否变得更准确?有这种用法的例子吗?
需要明确的是,问题在于数据集的上下文(而不是大小)的重要性。
所以官方的 BERT 英文模型是在 Wikipedia 和 BookCurpos (source)上训练的。
现在,例如,假设我想使用 BERT 进行电影标签推荐。我有什么理由在电影相关数据集上从头开始预训练一个新的 BERT 模型?
自从我在电影相关文本而不是一般文本上训练模型后,我的模型能否变得更准确?有这种用法的例子吗?
需要明确的是,问题在于数据集的上下文(而不是大小)的重要性。
当然,如果你有一个大而高质量的域内数据集,那么结果肯定会比使用通用的预训练 BERT 更好。
这之前已经做过:BioBERT是一个在生物医学文本上预训练的 BERT 模型:
[...] 在大型生物医学语料库上预训练的特定领域语言表示模型。由于跨任务的架构几乎相同,BioBERT 在对生物医学语料库进行预训练时,在各种生物医学文本挖掘任务中的性能大大优于 BERT 和以前的最先进模型。虽然 BERT 获得了与之前最先进模型相当的性能,但 BioBERT 在以下三个具有代表性的生物医学文本挖掘任务上明显优于它们:生物医学命名实体识别(F1 分数提高 0.62%)、生物医学关系提取(2.80% F1 分数提高)和生物医学问答(MRR 提高 12.24%)。
当然,在决定预训练这样的模型时可以考虑其他因素,例如计算预算。
BERT 是一个相当大的模型,需要大量数据和大量训练时间才能达到其最先进的性能。通常情况下,没有足够的数据或资源来从头开始完全训练 BERT。这就是这些预训练模型有用的地方。从之前的训练中学到的权重可以作为训练数据集的有用起点——这个概念被称为迁移学习。
在一个愚蠢的例子中,要正确生成电影标签推荐,它首先需要学习如何“阅读”标签。或者对于图像分类,它首先需要“看到”图像。从头开始训练这些模型迫使他们在学习如何分类之前“学习”如何阅读或看。通过预训练,模型已经知道如何查看/阅读,并且可以更好地利用训练时间/资源来优化性能。
许多人在迁移学习期间冻结了大多数层,并专注于训练模型的尾部,以此来减少所需的训练时间。你冻结了多少层——如果你冻结了任何层——取决于你愿意投入多少时间来训练模型。玩一玩,看看 BERT 会发生什么。祝你好运!