在自然语言处理和信息检索的许多任务中,都需要对句子进行成对比较,例如句子相似性检测、释义识别、问答蕴含和文本蕴含等。句子比较最准确的方法是交叉编码,但训练交叉编码器需要标注数据,而收集这些数据需要大量人力。本文提出了一种名为trans-encoder的无监督句子对模型,在句子相似性基准测试中比现有技术提升高达5%。
目前句子对任务主要有两种范式:交叉编码器(cross-encoder)和双向编码器(bi-encoder)。选择哪种范式取决于计算效率和性能之间的标准权衡。
在交叉编码器中,两个序列被连接起来,一次性输入到句子对模型中,该模型通常构建在基于Transformer的语言模型(如BERT或RoBERTa)之上。Transformer的注意力头可以直接建模一个序列的元素与另一个序列的元素之间的相关性,从而能够计算准确的分类/相关性分数。
然而,交叉编码器需要为每对输入句子计算新的编码,导致较高的计算开销。因此,对于涉及大量成对句子比较的信息检索和聚类等任务,交叉编码是不切实际的。此外,将预训练语言模型(PLM)转换为交叉编码器总是需要对标注数据进行微调。
相比之下,在双向编码器中,每个句子被单独编码并映射到一个共同的嵌入空间,在那里可以测量它们之间的距离。由于编码后的句子可以被缓存和重用,双向编码效率更高,而且双向编码器的输出可以作为句子嵌入即插即用地用于下游任务。
也就是说,众所周知,在监督学习中,双向编码器的性能不如交叉编码器,因为它们没有明确建模句子之间的交互。
在研究中,我们探索是否可以利用双向编码器和交叉编码器的优势,以无监督的方式引导一个准确的句子对模型。我们的答案——trans-encoder——基于以下直觉:
作为起点,我们可以使用双向编码器表示来微调交叉编码器。凭借其更强大的句子间建模能力,交叉编码器应该能够从PLM中提取比双向编码器更多的知识,尽管输入数据相同。反过来,更强大的交叉编码器可以将其知识蒸馏回双向编码器,提高计算更实用的模型的准确性。我们可以重复这个循环,从双向编码器和交叉编码器中迭代引导。
具体来说,训练trans-encoder的过程如下:
步骤1:将PLM转换为有效的双向编码器
为了将现有的PLM转换为双向编码器,我们利用简单的对比调优程序。给定一个句子,我们用两个不同的PLM对其编码两次。由于dropout(一种标准技术,在每次通过训练数据时随机丢弃一部分神经网络节点以防止瓶颈),两个PLM会产生略微不同的编码。然后训练双向编码器以最大化两个几乎相同编码的相似性。这一步使PLM擅长嵌入序列。详细信息可以在先前的工作Mirror-BERT和SimCSE中找到。
步骤2:自蒸馏:从双向到交叉编码器
在从第一步获得一个相当好的双向编码器后,我们使用它来创建交叉编码器的训练数据。具体来说,我们用双向编码器计算的成对相似性分数标记句子对,并将它们用作构建在新PLM之上的交叉编码器的训练目标。
步骤3:自蒸馏:从交叉到双向编码器
一个自然的下一步是将从交叉编码器获得的额外知识蒸馏回双向编码器形式,这对下游任务更有用。更重要的是,更好的双向编码器可以产生更多自标记数据来调整交叉编码器。通过这种方式,我们可以重复步骤二和三,持续引导编码器性能。
我们的论文还提出了其他技术,如互蒸馏,以提高模型性能。更多细节请参阅论文第2.4节。
我们在七个句子文本相似性(STS)基准上对trans-encoder进行了实验。我们观察到在所有数据集上,相比之前的无监督句子对模型都有显著改进。
我们还对二进制分类和领域转移任务进行了基准测试。更多细节请参阅论文第5节。
对话式AI
无监督学习、半监督学习、自然语言处理(NLP)
ICLR 2022
Trans-encoder: 通过自蒸馏和互蒸馏的无监督句子对建模
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。