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

f5emj3cl  于 2023-02-04  发布在  其他
关注(0)|答案(4)|浏览(207)

我想在一个特定的域上微调BERT。我有那个域的文本文件。我怎样才能使用这些来微调BERT?我正在这里寻找。
我的主要目标是使用BERT实现句子嵌入。

axzmvihb

axzmvihb1#

这里要做的重要区别是,您是想要微调您的模型,还是想要将其暴露给额外的预训练
前者只是一种训练BERT以适应特定的 * 监督任务 * 的方法,对于该任务,您通常需要1000个或更多的样本包括标签
另一方面,预训练基本上是试图帮助BERT更好地“理解”来自某个领域的数据,基本上是通过继续其无监督的训练目标([MASK] ing特定的单词,并试图预测哪个单词应该在那里),为此你 * 不 * 需要标记数据。
然而,如果你的最终目标是句子嵌入,我强烈建议你看看Sentence Transformers,它基于Huggingface的transformers库的一个稍微过时的版本,但主要是试图生成高质量的嵌入。注意,有一些方法可以用替代损失来训练,在那里你试图模拟与嵌入相关的某种形式的损失。

**编辑:**Sentence-Transformers的作者最近加入了Huggingface,所以我希望在接下来的几个月里支持率会大大提高!

dldeef67

dldeef672#

@dennlinger给出了详尽的答案,额外的预训练也被称为“后训练”、“领域适应”和“语言建模微调”。here你会找到一个如何做的例子。
但是,既然你想有好的句子嵌入,你最好使用Sentence Transformers。而且,他们提供了微调的模型,已经能够理解句子之间的语义相似性。“继续训练其他数据”部分是你想要进一步微调你的领域的模型。你必须准备训练数据集。根据可用的loss functions之一,例如ContrastLoss需要一对文本和一个标签,无论这对文本是否相似。

rt4zxlrg

rt4zxlrg3#

我相信迁移学习对于在特定领域训练模型是有用的。首先,你加载预先训练好的基础模型并冻结其权重,然后在基础模型上添加另一层,并基于你自己的训练数据训练该层。然而,数据需要被标记。
Tensorflow在迁移学习方面有一些有用的guide

im9ewurl

im9ewurl4#

你说的是pre-training,对未标记数据的微调被称为预训练,为了开始,你可以看看这里。

相关问题