MSMARCO 模型

MS MARCO 是一个大规模的信息检索语料库,它基于使用Bing搜索引擎的真实用户搜索查询创建。提供的模型可用于语义搜索,即,给定关键词/搜索短语/问题,模型将找到与搜索查询相关的段落。

训练数据由超过50万个示例组成,而完整的语料库则包含超过880万个段落。

用法

from sentence_transformers import SentenceTransformer, util

model = SentenceTransformer("msmarco-distilroberta-base-v3")

query_embedding = model.encode("How big is London")
passage_embedding = model.encode("London has 9,787,426 inhabitants at the 2011 census")

print("Similarity:", util.cos_sim(query_embedding, passage_embedding))

有关使用方法的更多详细信息,请参阅应用程序 - 信息检索

性能

性能在 TREC-DL 2019 上进行评估,这是一个查询-段落检索任务,其中多个查询已被标注为与给定查询的相关性。此外,我们在 MS Marco 段落检索数据集上进行评估。

作为基线,我们展示了使用 Elasticsearch 进行 BM25 词法搜索的结果。

Approach NDCG@10 (TREC DL 19 Reranking) MRR@10 (MS Marco Dev) Queries (GPU / CPU) Docs (GPU / CPU)
Models tuned for cosine-similarity
msmarco-MiniLM-L-6-v3 67.46 32.27 18,000 / 750 2,800 / 180
msmarco-MiniLM-L-12-v3 65.14 32.75 11,000 / 400 1,500 / 90
msmarco-distilbert-base-v3 69.02 33.13 7,000 / 350 1,100 / 70
msmarco-distilbert-base-v4 70.24 33.79 7,000 / 350 1,100 / 70
msmarco-roberta-base-v3 69.08 33.01 4,000 / 170 540 / 30
Models tuned for dot-product
msmarco-distilbert-base-dot-prod-v3 68.42 33.04 7,000 / 350 1100 / 70
msmarco-roberta-base-ance-firstp 67.84 33.01 4,000 / 170 540 / 30
msmarco-distilbert-base-tas-b 71.04 34.43 7,000 / 350 1100 / 70
Previous approaches
BM25 (Elasticsearch) 45.46 17.29
msmarco-distilroberta-base-v2 65.65 28.55
msmarco-roberta-base-v2 67.18 29.17
msmarco-distilbert-base-v2 68.35 30.77

注释:

  • 我们提供两种类型的模型,一种针对余弦相似度进行了调整,另一种针对点积进行了调整。确保使用正确的方法来计算查询和段落之间的相似度。

  • 针对余弦相似度调整的模型将倾向于检索较短的段落,而针对点积调整的模型将倾向于检索较长的段落。根据您的任务,您可能更喜欢其中一种类型的模型。

  • msmarco-roberta-base-ance-firstp 是来自 ANCE 的 MSMARCO Dev Passage Retrieval ANCE(FirstP) 600K 模型。此模型应与点积一起使用,而不是余弦相似度。

  • msmarco-distilbert-base-tas-b 使用来自 sebastian-hofstaetter/distilbert-dot-tas_b-b256-msmarco 的模型。更多详情请参阅链接的文档/论文。

  • 编码速度是每秒计算的,并在 V100 GPU 和 8 核 Intel(R) Xeon(R) Platinum 8168 CPU @ 2.70GHz 上测量。

v3 中的更改

v2 的模型已被用于为所有训练查询查找相似的段落。然后,基于 electra-base-model 的 MS MARCO 交叉编码器被用来分类这些检索到的段落是否回答了问题。

如果交叉编码器给它们的评分较低,我们将它们保存为硬负样本:它们在双编码器中获得了高分,但在(更好的)交叉编码器中获得了低分。

然后我们使用这些新的困难负样本训练了v2模型。

版本历史

  • 版本 2

  • 版本 1