StructBERT: Incorporating Language Structures into Pre-training for Deep Language Understanding


本文前置知识:

StructBERT: Incorporating Language Structures into Pre-training for Deep Language Understanding

本文是论文StructBERT: Incorporating Language Structures into Pre-training for Deep Language Understanding的阅读笔记和个人理解.

Basic Idea

虽然BERT和RoBERTa将注意力放在了NLU问题上, 并大幅度的化简NLU相关的任务难度, 但仍然没有把语言结构信息集成进去.

如”研表究明, 汉字序顺并不定一影阅响读. 比如当你看完这句话后, 才发这现里的字全是都乱的”. 尤其在使用了Self Attention后, Token之间的最短距离恒为1, 自然语言中的单词顺序可能对BERT没那么重要了, 语言的结构可能也就得不到关注.

因此, 作者希望改进BERT的训练方式, 使其能够注意到句子中的结构信息的变化.

StructBERT

作者在保留BERT现有的两个训练任务的基础上, 额外引入两个辅助任务, 分别是Word Structural Objective和Sentence Structural Objective, 即从单词句子的两个角度来提升BERT对语言结构的理解.

Input Representation and Transformer Encoder

和BERT一样, 对于输入序列(可能是单句子也可能是句子对)的每个Token $t_i$, 将它的Word Embedding, Segment Embedding, Position Embedding相加作为其初始表示$\mathbf{x}_i$, 然后能通过对$L$ 层Transformer Encoder的堆叠获得其在当前语境下的表示$\mathbf{h}_i$.

同理, 输入句子时, 句向量$\mathbf{X}=\left\{\mathbf{x}_{i}\right\}_{i=1}^{N}$ 会被$L$ 层Transformer Encoder编码为$\mathbf{H}^l$:
$$
\mathbf{H}^{l}=\text { Transformer }_{l}\left(\mathbf{H}^{l-1}\right)
$$
其中$l \in [1, L]$, $\mathbf{H}^0 = X$, $\mathbf{H}^{L}=\left[\mathbf{h}_{1}^{L}, \cdots, \mathbf{h}_{N}^{L}\right]$.

Word Structural Objective

作者认为, 一个好的语言模型必须能够通过句子中打乱顺序的单词组恢复出单词的原来顺序, 而BERT仍不能正确的做到这一点. 针对这点, 作者直接将这种想法作为训练任务补充到BERT的训练当中.

该任务的目标为:
$$
\arg \max _{\theta} \sum \log P\left(\operatorname{pos}_{1}=t_{1}, \operatorname{pos}_{2}=t_{2}, \ldots, \operatorname{pos}_{K}=t_{K} \mid t_{1}, t_{2}, \ldots, t_{K}, \theta\right)
$$
$\theta$ 为参数, $K$ 为打乱顺序的子序列长度.

如果$K$ 比较大, 意味着模型需要对比较长的序列重建, 噪声比较多, $K$ 比较小, 模型只需要对比较短的子序列重建, 噪声相应的也比较少. 为达到模型鲁棒性和模型重建能力的平衡, 作者设定$K=3$.

该任务与原始MLM训练目标是不冲突的, 能够联合训练:

在输入为[MASK]的地方应该能被预测出正确被Mask掉的Token, 对于输入打乱的地方应该能根据$\mathbf{h}_i^L$ 恢复出正确顺序的Token.

Word Structural Objective主要针对单句子任务.

Sentence Structural Objective

除去单词级别的结构, 还需要关注句子和句子之间的结构.

在BERT训练中, 使用的是NSP任务, 而在RoBERTa中提出NSP任务由于过于简单, 有害于模型性能.

其实NSP任务也不是不能用, 必须增加它的任务难度. 在StructBERT中, 沿着组装句子的思路, NSP被改进成一个三分类问题, 分别令当前句子$S_1$ 与另一个句子$S_2$ 组合, $S_2$ 可能是以下的其中一种:

  1. $S_2$ 为$S_1$ 的一句, 此时任务为原始的NSP任务.
  2. $S_2$ 为$S_1$ 的一句.
  3. $S_2$ 为其他文档随机一句.

这三种情况均为等概率发生, 即发生概率均为$\frac{1}{3}$, [SEP] 的添加与BERT相同, 采用[CLS]处的输出做三分类结果. 示意图如下:

Sentence Structural Objective主要针对句子对任务.

Experiments

详细的实验设置请参照原论文.

General Language Understanding

GLUE benchmark

在GLUE上的结果如下:

StructBERT在GLUE上的平均表现超过了其他的PLM.

SNLI

在自然语言推理的数据集SNLI上结果如下:

Extractive Question Answering

在抽SQuAD1.1上的结果如下:

即使没有使用任何的数据增强和额外数据, StructBERT还是仅次于使用了数据增强和额外数据的XLNet.

其实打乱顺序这种处理也可以看做是一种数据增强.

Effect of Different Structural Objectives

消融实验便是针对StructBERT的两个额外任务做的:

前三个数据集是单句任务, 在去掉Word Structural Objective后, 前三个任务的性能有退化. 后三个是句子对任务, 去掉Sentence Structural Objective后对后三个任务影响也比较大. 证明了这两种新增的任务的有效性.

下图分别是Word Prediction Loss, Word Prediction Acc, Sentence Prediction Loss, Sentence Prediction Acc随着训练步长的增长的变化曲线:

红色代表原始BERT, 蓝色为StructBERT, 绿色为StructBERT在Masked Token任务上的表现.

作者认为, 加入Word Structural Objective使得MLM任务做的更好, 加入Sentence Structural Objective明显使得任务变得更难.

Summary

StructBERT通过在原有任务的基础上从Word Level和Sentence Level添加了两个新的辅助训练任务, 使得BERT能够关注一些语言结构, 想法非常非常简单, 但效果却出乎意料的好.

StructBERT属于对BERT的改进, 没有太多值得进一步的建议.


文章作者: DaNing
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 DaNing !
评论
  目录