最后更新于
最后更新于
NSP(Next Sentence Prediction)任务是给定两个句子A和B, 判断这句子B是否是句子A紧邻的下一句. NSP任务是BERT预训练的标准任务, NSP的loss为BCE.
在预训练BERT时, 每个输入样本都是由两个句子组成的, 在组织训练样本时, 选定一个A, 以50%的概率选取语料中下一个句子作为B, 以50%的概率在语料中随机选取一个句子作为B.
训练NSP任务的目的是加强模型理解句子间的关系信息, 弥补语言模型能力的缺失. 但相比于BERT中另一个任务, MLM(Masked Language Model), NSP任务可以说太简单了, 在训练过程中经过1~2
个epoch之后分类的准确率就能达到98%~99%
.
因此在后续的模型中, 如RoBERTa, ALBERT等, 去掉了NSP任务, 或者使用其他的任务来代替NSP.
DLM(Dialogue Language Model)在ERNIE 1.0 (Baidu)中部分代替NSP任务. ERNIE的预训练语料中有多轮对话的语料(百度贴吧语料), 对于这部分语料, 除了训练MLM模型(当然与BERT相比, mask的策略不同), 还会将3个句子拼接在一起, DLM任务就是判断这个组合代表的多轮对话是真实的还是伪造的.
ERNIE将3个句子组合成[CLS]S1[SEP]S2[SEP]S3[SEP]
来表示多轮对话. 输入除了token embedding
和position embedding
, 还使用了dialogue embedding
. dialogue embedding
的输入只有Q
和R
两种, 分别代表提问和回答, 因此与segment embedding
是一致的.
3个句子组成的多轮对话可以是QRQ
, QRR
, QQR
等形式, 在组织负样本时, 随机替换R.
SOP(Sentence Order Prediction)是ALBERT中使用的用来代替NSP的任务. 在使用了该损失函数后, ALBERT能显著提升下游多句子编码任务的性能.
分析BERT中的NSP任务, 预测是否是下一句的任务实际上是将主题预测和连贯性预测结合到单个任务中, 这是由于它构造正负样本的方法决定的. 构造负样本时, 基本是使用不同文档的两个句子搭配在一起进行判断, 但不同文档的topic不同, 很容易就能预测出来不相关. 主题预测比连贯性预测简单得多, 且与MLM学习到的语言模型信息是有重合的.
ALBERT认为, 句间建模在语言理解中是非常重要的, 因此提出了判断语言连贯性的任务和对应的损失函数. 语言连贯与否的情况是复杂的, 因此任务难度较高, 避免了NSP过于简单的情况.
在构造训练样本时, 将同一文档内的两个正向顺序的连续的segments作为正样本, 将这两个segments位置交换作为负样本. 由于两个segments出自同一个文档, 因此消除掉了主题预测的内容. 计算Inter-sentence coherence loss, 其实也是BCE, 只是换了个名字, 相当于只是换了一种正负样本的采样方式.
MLM(Masked Language Model)任务是一种无监督任务, 是将句子中某些片段在输入时Mask掉, 然后使用它的上下文预测出它自己. MLM克服传统单向语言模型的缺陷, 结合了双向的信息.
原始的BERT模型使用的是静态Mask机制. 随机遮盖或替换一句话里面任意token, 随机把一句话中15%的token替换成以下内容:
80%的概率被替换成[MASK]
10%的概率被替换成随机的另外一个token
10%的概率不做任何操作
然后对这15%的内容进行预测, 计算预测结果和真实值的差距作为loss. 每个被标记的位置都会做一个softmax, 类别的数目是词表的大小, 计算softmax cross entropy得到每个标记位置的损失, 将所有样本所有标记位置的值汇总在一起, 得到MLM任务的损失.
原始的BERT在中文里, 以字为粒度进行Mask. 后续又有如WWM等优化的Mask方法, 更多Mask方法可以参考: . 但无论如何Mask, MLM的损失计算方法是不变的.