如何在未标记的数据上微调 BERT?
Posted
技术标签:
【中文标题】如何在未标记的数据上微调 BERT?【英文标题】:How to fine tune BERT on unlabeled data? 【发布时间】:2020-09-09 17:57:09 【问题描述】:我想在特定域上微调 BERT。我在文本文件中有该域的文本。我如何使用这些来微调 BERT? 我目前正在寻找here。
我的主要目标是使用 BERT 获得句子嵌入。
【问题讨论】:
【参考方案1】:这里要区分的重要一点是您是要微调您的模型,还是要使其接受额外的预训练。
前者只是一种训练 BERT 以适应特定监督任务的方法,为此您通常需要大约 1000 个或更多样本包括标签。
另一方面,预训练基本上是通过继续其无监督训练目标([MASK]
ing 特定单词并尝试预测应该存在的单词)来帮助 BERT 更好地“理解”来自某个领域的数据,您确实不需要需要标记数据。
但是,如果您的最终目标是句子嵌入,我强烈建议您查看 Sentence Transformers,它基于 Huggingface 的转换器库的稍微过时的版本,但主要尝试生成高质量的嵌入。请注意,有一些方法可以使用替代损失进行训练,您可以在其中尝试模拟与嵌入相关的某种形式的损失。
编辑: Sentence-Transformers 的作者最近加入了 Huggingface,所以我希望在接下来的几个月里支持会大大改善!
【讨论】:
我想做额外的预训练。查看“Sentence Transformers”的链接,看起来我想要的是“继续对其他数据进行培训”部分。我可以在这里使用未标记的文本作为训练数据吗?该部分中提到的 py 文件的链接不再存在。 @Rish 你找到解决方案了吗?我正在寻找相同的。我想对特定领域进行额外的预训练。 @Miguel 我最终尝试了这个:DeCLUTR @Rish - 它的表现如何?【参考方案2】:@dennlinger 给出了详尽的答案。额外的预训练也称为“后训练”、“域适应”和“语言建模微调”。 here 你会找到一个例子。
但是,既然你想要有好的句子嵌入,你最好使用Sentence Transformers。此外,它们提供了微调模型,这些模型已经能够理解句子之间的语义相似性。 “继续对其他数据进行培训”部分是您想要在您的域上进一步微调模型的部分。您必须根据可用的loss functions 之一准备训练数据集。例如。 ContrastLoss
需要一对文本和一个标签,这对是否相似。
【讨论】:
嗨@pashok3ddd,我正在尝试在我自己的特定领域文本上训练一个变形金刚模型。不幸的是,您发布的示例的链接不存在。您对我在哪里可以获得此任务的代码有任何其他建议吗? @mitramirshafiee 我修复了链接。【参考方案3】:我相信迁移学习对于在特定领域训练模型很有用。首先加载预训练的基础模型并冻结其权重,然后在基础模型之上添加另一层并根据您自己的训练数据训练该层。但是,需要对数据进行标记。
Tensorflow 在迁移学习方面有一些有用的guide。
【讨论】:
【参考方案4】:你说的是pre-training
。对未标记数据进行微调称为预训练,要开始使用,您可以查看 here。
【讨论】:
以上是关于如何在未标记的数据上微调 BERT?的主要内容,如果未能解决你的问题,请参考以下文章
将 LIME 解释应用于我的微调 BERT 以进行序列分类模型?
输入文件应该如何格式化以进行语言模型微调(BERT 通过 Huggingface Transformers)?