如何微调未标记数据上的BERT?

时间:2020-05-22 19:42:05

标签: nlp pytorch huggingface-transformers bert-language-model

我想微调特定域上的BERT。我在文本文件中有该域的文本。我如何使用它们来微调BERT? 我目前正在寻找here

我的主要目标是使用BERT获得句子嵌入。

4 个答案:

答案 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