检索与重排序

语义搜索中,我们展示了如何使用 SparseEncoder 来计算查询、句子和段落的嵌入,以及如何将其用于语义搜索。对于复杂的搜索任务,例如问答检索,通过使用检索与重排序可以显著改善搜索结果。请注意,使用 Bi-Encoder 生成的密集嵌入的详细解释可在此处查看。

概述

检索与重排序方法包含两个阶段

  1. 检索阶段:使用快速但精度较低的方法(SparseEncoder/bi-encoders)来检索更大集合的潜在相关文档

  2. 重排序阶段:使用更复杂但较慢的模型(cross-encoders)对检索到的文档进行重排序,以提高精度

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

综合评估:混合搜索管道

文件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. 使用倒数排名融合进行混合搜索ReciprocalRankFusionEvaluator

  5. 混合重排序将 cross-encoder 应用于融合结果

输出:脚本生成全面的指标,并将结果保存在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)

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

Cross-Encoders(重排序器)

有关预训练的 Cross Encoder 模型,请参阅:MS MARCO Cross-Encoders