检索与重排

语义搜索中,我们展示了如何使用 SparseEncoder (稀疏编码器) 为查询、句子和段落计算嵌入,以及如何将其用于语义搜索。对于复杂的搜索任务,例如问答检索,使用检索与重排 (Retrieve & Re-Rank) 可以显著改善搜索效果。请注意,关于使用双编码器 (Bi-Encoder) 生成的密集嵌入的详细说明,请见此处

概述

检索与重排方法包括两个阶段:

  1. 检索阶段:使用快速但精度较低的方法(稀疏编码器/双编码器)来检索一个较大的潜在相关文档集合。

  2. 重排阶段:使用更复杂但速度较慢的模型(交叉编码器)对检索到的文档进行重排,以获得更高的精度。

这种方法结合了第一阶段检索的效率和第二阶段重排的准确性。

综合评估:混合搜索流程

文件hybrid_search.py

该脚本提供了一个完整的评估流程,用于在给定数据集上(在我们的示例中是 NanoNFCorpus)比较不同的检索和重排方法。它包括:

  1. 使用 ibm-granite/granite-embedding-30m-sparse 进行稀疏检索

  2. 使用 multi-qa-MiniLM-L6-cos-v1 进行密集检索

  3. 使用 cross-encoder/ms-marco-MiniLM-L6-v2 对稀疏和密集结果进行重排

  4. 使用倒数排名融合(Reciprocal Rank Fusion)进行混合搜索 ReciprocalRankFusionEvaluator

  5. 混合重排:将交叉编码器应用于融合后的结果

输出:脚本生成全面的指标,并将结果保存在 runs/ 目录中。

评估结果

NanoNFCorpus 上运行混合搜索评估的示例结果

================================================================================
EVALUATION SUMMARY
================================================================================
METHOD                            NDCG@10     MRR@10        MAP
--------------------------------------------------------------------------------
Sparse Retrieval                    32.10      47.27      28.29
Dense Retrieval                     27.35      41.59      22.79
Sparse + Reranking                  37.35      57.19      32.12
Dense + Reranking                   37.56      58.27      31.93
Hybrid RRF                          32.62      49.63      22.51
Hybrid RRF + Reranking              36.16      55.77      26.99
================================================================================

关键观察:

  • 重排在所有检索方法中都能稳定提升性能

  • 稀疏检索似乎已经能提供很强的初步结果

  • 稀疏和密集重排都能达到相似的高性能

  • 混合方法提供了平衡的结果

预训练模型

稀疏编码器(检索)

稀疏编码器 (SparseEncoder) 会为您的段落和搜索查询独立生成嵌入。您可以这样使用它:

from sentence_transformers import SparseEncoder

model = SparseEncoder("naver/splade-cocondenser-ensembledistil")

docs = [
    "My first paragraph. That contains information",
    "Python is a programming language.",
]
document_embeddings = model.encode_document(docs)

query = "What is Python?"
query_embedding = model.encode_query(query)

关于预训练的稀疏编码器模型,请参阅:预训练稀疏编码器

交叉编码器(重排器)

关于预训练的交叉编码器模型,请参阅:MS MARCO 交叉编码器