文档检索任务的目标是在海量的文本库中检索出和给定查询语义近似的文本。在实际场景应用中,文档文档库的数量会非常庞大,为了提高检索效率,检索任务一般会分成两个阶段,即初筛和精排阶段。在初筛阶段中,模型通过一些检索效率高的方法筛选出一部分候选文档,作为后续精排阶段的输入。在精排阶段,模型使用高精度排序方法来对候选文档进行排序,得到最终的检索结果。
随着预训练模型的发展和应用,很多工作开始将查询和文档同时送入预训练进行编码,并输出匹配分数。然而,由于预训练模型的计算复杂度较高,对每个查询和文档都进行一次计算耗时较长,这种应用方式通常只能在精排阶段使用。为了加快检索速率,一些工作开始使用预训练模型单独编码文档和查询,在查询前提前将文档库中的文档编码成向量形式,在查询阶段,仅需利用查询编码和文档编码进行相似度计算,减少了时间消耗。由于这种方式会将文档和查询编码为稠密向量形式,因此这种检索也称作“稠密检索”(Dense Retrival)。
一个基本的稠密检索方法会将文档和查询编码成为一个向量。然而由于文档包含的信息较多,容易造成信息丢失。为了改进这一点,有些工作开始对查询和文档的向量表示进行改进,目前已有的改进方法大致可分为三种,如下图所示:
我们的工作从改进文档的编码入手来提高文档编码的语义表示能力。首先,我们认为稠密检索的主要瓶颈在于编码时,文档编码器并不知道文档中的哪部分信息可能会被查询,在编码过程中,很可能造成不同的信息互相影响,造成信息被改变或者丢失。因此,我们在编码文档的过程中,对每个文档构建了多个“伪查询向量”(Pseudo Query Embeddings),每个伪查询向量对应每个文档可能被提问的信息。
具体而言,我们通过聚类算法,将BERT编码的Token向量进行聚类,对每个文档保留Top-k个聚类向量,这些向量包含了多个文档Token向量中的显著语义。另外,由于我们对每个文档保留多个伪查询向量,在相似度计算时可能造成效率降低。我们使用Argmax操作代替Softmax,来提高相似度计算的效率。在多个大规模文档检索数据集的实验表明,我们的方法既可以提高效果也提高了检索效率。