MSMARCO 模型

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

训练数据包含超过 50 万个样本,而完整的语料库包含超过 880 万个段落。

用法

from sentence_transformers import SentenceTransformer, util

model = SentenceTransformer("msmarco-distilbert-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 Passage Retrieval 数据集上进行评估。

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

方法 NDCG@10 (TREC DL 19 重排序) MRR@10 (MS Marco 开发集) 查询 (GPU / CPU) 文档 (GPU / CPU)
为余弦相似度调整的模型
msmarco-MiniLM-L6-v3 67.46 32.27 18,000 / 750 2,800 / 180
msmarco-MiniLM-L12-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
为点积调整的模型
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
先前方法
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 模型。

版本历史