四、双塔模型预训练
一般的预训练模型使用的目标函数主要是MLM或者seq2seq,这种预训练目标和双塔的匹配任务还是有一些不一致。并且已有的预训练模型即使有匹配任务(比如NSP),也是使用交互而非双塔的工作方式。为了使用预训练提高双塔模型的效果,SimCSE通过对比学习,提升模型对句子的表示能力。该方法的实现很简单,假设提取一个batch的句子,通过模型自带的dropout,将每个句子输入到预训练模型中,dropout两次,将同一个句子dropout后的结果作为正样本,不同句子的dropout结果作为负样本,拉近正样本的距离,拉远负样本的距离,每个句子的向量由BERT的CLS位置向量表示。如下图所示:
模型虽然很简单,但是在句子匹配任务上取得了很好的效果。该模型在检索任务上的效果还需实验。
还有的工作是针对检索任务的预训练。ICLR2020一篇论文Pre-training Tasks for Embedding-based Large-scale Retrieval提出了一些预训练任务,这些任务主要是针对Wikipedia的,不一定具有普适性。如下图所示,紫色d框出来的代表document,q1,q2,q3代表不同任务构造的的query,q1是ICT,即利用document所在的一句话作为query,q2是BFS,即利用document所在网页的第一段中的一句话作为query,q3是WLP,使用document中的某个超链接页面的第一句话作为query。任务目标是匹配q1,q2,q3和d。
Condenser
传统的MLM预训练任务如下图所示,该任务没有特别强制训练CLS位置的向量表示能力。为了将整个序列的信息压缩到CLS位置上,Condenser将模型分成两部分,第一部分和普通的Transformer一样,第二部分使用经过更多交互后的[CLS]位置向量(黄色部分)来预测[MASK]的token,强制模型的[CLS]编码可以具有还原其他token的能力。
/