IDCM框架包含多个不可微分操作,使得进行端到端的方法训练优化变得困难。因此,论文将IDCM模型分成具有三个不同目标的子任务,进行pipeline方式训练,如下图所示。三个任务步骤如下:(1)在段落排序阶段训练ETM模型;(2)将ETM模型训练扩展到文档级排序;(3)利用知识精馏训练段落筛选的ESM模型。每个步骤的训练完成都是基于验证集的效果,并且使用最佳模型chekpoint作为下一个步骤的模型初始化参数。Step 1: Optimizing ETM for Passage Ranking.第一步训练是在段落集合上训练ETM模型。训练采用RankNet模型中的pair-wise排序损失函数。更详细地说,对于训练集中的查询 ,给定的正负两个段落p−和p+,使用二元交叉熵损失函数对pair-wise段落排序进行优化如下:其中, 是sigmoid激活函数。Step 2: Extending the ETM Optimization to Full-Document Ranking.第二步训练是将ETM模型训练扩展到文档级排序。段落排序模型不足以支撑文档检索,主要有以下两个原因:(1)对段落聚合的参数(例如: )是需要训练的;(2)段落集合和文档集合会对哪些内容相关具有不同的假设。因此,在第二步训练中,使用一个完整文档的所有段落进行评分,并取排名靠前的 个段落进行聚合层训练。使用在上一步训练得到的最有模型对该步骤的ETM模型进行参数初始化。依然使用二进制交叉熵损失函数,但是该步骤使用的输入为查询q和一对正负文档d−和d+。这一步骤主要是继续微调ETM模型参数并学习聚合层 的参数。Step 3: Optimizing ESM for Passage Selection using Knowledge Distillation. 第三步是利用知识精馏训练段落筛选的ESM模型。也就是,在训练ESM模型时,让ETM模型扮演教师的角色,指导ESM模型训练。此步骤的损失函数为其中, 表示文档 中的所有段落, 表示知识蒸馏的损失函数。函数 负责计算所有段落得分的平均值。由于数据集中没有段落排序的标签,因此ESM模型训练采用的是ETM模型创造的标签作为唯一训练信号源。在实验中,尝试了知识蒸馏的多个损失函数,包括:mean square error loss 、cross entropy loss和 nDCG2 loss等。并且nDCG2 loss效果最优,可能是由于nDCG2 loss是一种基于增益的损失函数,在nDCG2损失函数计算中,只将增益值分配给按ETM模型排序在前 段落,其他段落没有增益。而ESM模型的目的就是为了找到top-k的段落集合。
IDCM模型实现
ESM: The CK Model.ESM模型是级联架构中的第一个模型,要求模型具有较高的效率。因此,论文使用了CK模型,它是ConvKNRM模型的一个变体(结合了卷积神经网络及内核池化方法)。ConvKNRM模型使用多个不同窗口大小的卷积层,对查询q和文档d中的n-gram进行软匹配,而CK模型仅采用单个卷积层为段落的上下文化表示进行编码。也就是,CK模型仅使用单层CNN转换查询q和段落d的表示,并用余弦函数计算它们的相似性,然后被不同分布参数的高斯核激活:其中, 和 分别表示查询q中第i个token和段落p中第j个token。 和 为高斯核参数。每个内核代表一个特征提取器,后面进行一个池化操作,进行特征筛选,再对结果用单个线性层( )加权求和,如下所示:ETM: The BERT Ranking Model.BERT段落排序模型的输入为查询 和段落 的拼接序列,然后获取BERT的[CLS]token的向量进行一个全连接层,以产生排序得分,如下:其中,“;”表示拼接。