删除Bert中的SEP令牌以进行文本分类

时间:2020-01-13 15:15:36

标签: python bert-language-model

鉴于情感分类数据集,我想微调Bert。

您知道BERT创建的是根据给定的当前句子来预测下一个句子。因此,为了使网络意识到这一点,他们在第一句话的开头插入了for n=1:2:10 if mod(n,2)==1 a((n+1)/2) = 2^n; end end 令牌,然后添加了[CLS]令牌以将第一句话与第二句话分开,最后是另一个{{1} }在第二句话的末尾(我不清楚为什么他们在末尾附加了另一个标记)。

无论如何,对于文本分类,我在一些在线示例(请参阅BERT in Keras with Tensorflow hub)中注意到,它们先添加了[SEP]标记,然后添加了句子,最后又添加了另一个[SEP]令牌。

在其他研究工作(例如Enriching Pre-trained Language Model with Entity Information for Relation Classification)中,他们删除了最后一个[CLS]令牌。

当我的任务仅使用单个句子时,为什么在输入文本的末尾添加[SEP]令牌是有益的呢?

2 个答案:

答案 0 :(得分:2)

我不太确定为什么 BERT 在单句任务的末尾需要分离标记 [SEP],但我的猜测是 BERT 是一个自动编码模型,如前所述,最初是为语言建模和下一步设计的句子预测。因此,BERT 以这种方式进行训练,总是期望 [SEP] 令牌,这意味着令牌涉及 BERT 在训练期间建立的基础知识。

后来的下游任务,例如单句用例(例如文本分类),结果证明也适用于 BERT,但是 [SEP] 被留下作为 BERT 正常工作的残余物,因此即使是这些任务也需要。

BERT 可能学得更快,如果 [SEP] 附加在单个句子的末尾,因为它在该标记中编码了一些知识,这标志着输入的结束。没有它,BERT 仍然会知道句子结束的位置(由于填充标记),这解释了前面提到的研究会遗漏标记,但这可能会稍微减慢训练速度,因为 BERT 可能能够通过附加的 {{ 1}} 标记,尤其是在截断的输入中没有填充标记的情况下。

答案 1 :(得分:1)

BERT's paper中所述,使用两种新颖的无监督预测任务对BERT进行了预训练:屏蔽语言模型和下一句预测。在“下一句预测”任务中,模型将一对句子作为输入,并学习预测第二个句子是否是原始文档中的下一个序列。

因此,我认为BERT模型在文本分类任务以及其他任务中使用了两个文本句子之间的关系。这种关系可以用来预测这两个句子是否属于同一类。因此,需要[SEP]令牌来合并这两个句子并确定它们之间的关系。