Syntax-Enhanced Pre-trained Model
Motivation
现有的方法是在训练前阶段或微调阶段利用文本的语法,使这两个阶段之间存在差异。
Existing methods utilize syntax of text either in the pre-training stage or in the fine-tuning stage, so that they suffer from discrepancy between the two stages.
这样的问题将导致拥有人工注释的语法信息的必要性,这限制了现有方法在更广泛的场景中的应用。
Introduction
普通的预训练-微调模式指将大量的文本信息处理为token序列,然后进行各种预训练任务。这种基本的文本表示可以从大量的无监督数据中获得,并且使用相同的范式预先训练和微调的模型通常在实践中获得良好的准确性。然而,这些方法的一个明显的局限性是,忽略了更丰富的文本语法结构。
相关研究试图只在微调阶段注入语法信息,或者只在预训练阶段加入,这就会导致两个阶段的gap。当仅在微调阶段中融合语法信息时,Sachan等人(2020)发现,除非有高质量的人工注释依赖解析可用,否则不会有性能提高。然而,这一要求将限制该模型应用于无法获得人工注释的依赖关系信息的更广泛的场景。
本文在预训练和微调两个阶段都引入了语法结构的知识:制造了一个用于预训练的数据集,设计了一个让模型学习两个token之间距离的预训练任务和学习句子语法知识的模型架构。
实验证明,作者提出架构十分有效。
Data Construction
首先,之前的研究工作说明了dependency tree 比结构更加复杂的 constituency tree效果更加好。
从开放域资源爬取1B的句子数据作为预训练数据,然后用现成的工具Stanza
来自动生成依赖树。
Method
定义树上token的距离
首先定义树上任意两个点的距离函数\(d\):
- 如果\(v\)是\(u\)的头,那么\(d(v, u)=1\)。
- 如果\(v\)有到\(u\)的路径,那么\(d(v,u)\)就是路径上所有点的距离和。
- 否则两点之间没有路径,那么\(d(v,u)=\infty\)。
Syntax-Aware Transformer
backbone使用BERT,模型依然使用序列\(X\)作为输入,有\(N\)个transformer层:
式中\(n\)表示层数,\(\hat{H}\)是syntax aware 的表示。\(H_0\)是token的embedding。
而\(H\)的计算方式follow传统的transformer结构,令\(H'_{n-1}=(1 - \alpha) H^{n-1} + \alpha \hat{H}^{n-1}\),那么
Syntax-aware Attention Layer
用矩阵\(D\)编码树结构,\(D_{i,j}\)表示第\(i\)个token到第\(j\)个token之间的距离。
直觉上来讲,距离越远,相关性越小,因此新的矩阵\(\tilde{D}\)归一化后得到:
Syntax-aware Representation
Syntax-aware Pre-training Task
作者将这项任务命名为dependency distance prediction task:
- 随机将\(D\)矩阵中的一部分distance 盖住,假设盖住了\(D_{i,j}\)。
- 将token \(i\)和token \(j\)的表达拼接起来,输出给一个分类器,预测这两个token的距离概率分布。
- 在实验中,盖住矩阵中15%的距离。
- 和BERT预训练设置相似,80%概率被masked,10%的概率用随机数字替换,10%的情况保持不变。