我想微调特定域上的BERT。我在文本文件中有该域的文本。我如何使用它们来微调BERT? 我目前正在寻找here。
我的主要目标是使用BERT获得句子嵌入。
答案 0 :(得分:2)
此处要进行的重要区别是您是否要微调模型,还是要对其进行其他预训练。
前者只是训练BERT适应特定监督任务的一种方法,为此,您通常需要大约1000个或更多样本包括标签。
另一方面,预训练基本上是通过基本上继续其无监督训练目标([MASK]
特定单词并尝试预测应该使用哪个单词)来帮助BERT更好地“理解”来自特定域的数据。在那里),您 不需要标签数据。
但是,如果您的最终目标是句子嵌入,那么我强烈建议您看看Sentence Transformers,它基于Huggingface的转换器库的过时版本,但主要是尝试生成高质量的嵌入。请注意,有一些方法可以模拟替代损失,在这种情况下,您尝试模拟与嵌入相关的某种形式的损失。
答案 1 :(得分:1)
@dennlinger给出了详尽的答案。附加的预训练也称为“后训练”,“领域适应”和“语言建模微调”。 here,您会找到一个示例。
但是,由于您希望具有良好的句子嵌入效果,因此最好使用Sentence Transformers。而且,它们提供了微调的模型,该模型已经能够理解句子之间的语义相似性。您想在“对其他数据进行继续培训”部分上进一步调整域上的模型。根据可用的loss functions之一,您必须准备训练数据集。例如。 ContrastLoss
需要一对文本和一个标签,无论该对是否相似。
答案 2 :(得分:0)
我认为转移学习对于在特定领域训练模型很有用。首先,加载预训练的基本模型并冻结其权重,然后在基本模型的顶部添加另一层,然后根据您自己的训练数据来训练该层。但是,数据需要标记。
Tensorflow在转移学习方面有一些有用的guide。
答案 3 :(得分:0)
您说的是 pre-training
。对未标记数据进行微调称为预训练,要开始使用,您可以查看 here。