Project Icon

mteb

多任务文本嵌入模型评估基准

MTEB是一个开源的文本嵌入模型评估基准,涵盖多种任务类型和语言。它提供标准化的测试集、灵活的评估配置和公开排行榜。研究人员可以使用MTEB评估自定义模型,添加新任务,并进行模型性能比较,从而推动文本嵌入技术的进步。

大规模文本嵌入基准测试

GitHub 发布版本 GitHub 发布版本 许可证 下载量

安装 | 使用 | 排行榜 | 文档 | 引用

安装

pip install mteb

使用

import mteb
from sentence_transformers import SentenceTransformer

# 定义 sentence-transformers 模型名称
model_name = "average_word_embeddings_komninos"
# 或直接从 huggingface 加载:
# model_name = "sentence-transformers/all-MiniLM-L6-v2"

model = SentenceTransformer(model_name)
tasks = mteb.get_tasks(tasks=["Banking77Classification"])
evaluation = mteb.MTEB(tasks=tasks)
results = evaluation.run(model, output_folder=f"results/{model_name}")
  • 使用命令行界面
mteb available_tasks

mteb run -m sentence-transformers/all-MiniLM-L6-v2 \
    -t Banking77Classification  \
    --verbosity 3

# 如果未指定,默认将结果保存在 results/{model_name} 文件夹中
  • 使用多个 GPU 并行处理可以通过自定义编码函数来实现,该函数将输入分配给多个 GPU,例如这里这里

高级用法

点击下面的每个部分查看详细信息。


数据集选择

数据集选择

可以通过提供数据集列表来选择数据集,也可以:

  • 按任务类型选择(例如 "Clustering" 或 "Classification")
tasks = mteb.get_tasks(task_types=["Clustering", "Retrieval"]) # 仅选择聚类和检索任务
  • 按类别选择,例如 "s2s"(句子到句子)或 "p2p"(段落到段落)
tasks = mteb.get_tasks(categories=["s2s", "p2p"]) # 仅选择句子到句子和段落到段落数据集
  • 按语言选择
tasks = mteb.get_tasks(languages=["eng", "deu"]) # 仅选择包含 "eng" 或 "deu"(ISO 639-3 代码)的数据集

您还可以为多语言/跨语言任务指定要加载的语言,如下所示:

import mteb

tasks = [
    mteb.get_task("AmazonReviewsClassification", languages = ["eng", "fra"]),
    mteb.get_task("BUCCBitextMining", languages = ["deu"]), # 所有包含 "deu" 的子集
]

# 或者您可以像这样选择特定的 huggingface 子集:
from mteb.tasks import AmazonReviewsClassification, BUCCBitextMining

evaluation = mteb.MTEB(tasks=[
        AmazonReviewsClassification(hf_subsets=["en", "fr"]) # 仅加载 Amazon Reviews 的 "en" 和 "fr" 子集
        BUCCBitextMining(hf_subsets=["de-en"]), # 仅加载 BUCC 的 "de-en" 子集
])
# 有关 HF 子集的示例,请参见数据集查看器中的 "Subset":https://huggingface.co/datasets/mteb/bucc-bitext-mining

还有一些预设可用于某些任务集合,例如选择构成 "Overall MTEB English leaderboard" 的 56 个英语数据集:

from mteb import MTEB_MAIN_EN
evaluation = mteb.MTEB(tasks=MTEB_MAIN_EN, task_langs=["en"])
传递 `encode` 参数

传递 encode 参数

要向模型的 encode 函数传递参数,您可以使用编码关键字参数(encode_kwargs):

evaluation.run(model, encode_kwargs={"batch_size": 32}
选择评估分割

选择评估分割

您可以通过以下方式仅在所有任务的 test 分割上进行评估:

evaluation.run(model, eval_splits=["test"])

请注意,公开排行榜使用所有数据集的测试分割,但 MSMARCO 除外,它使用 "dev" 分割。

使用自定义模型

使用自定义模型

模型应实现以下接口,实现一个 encode 函数,该函数接受句子列表作为输入,并返回嵌入列表(嵌入可以是 np.arraytorch.tensor 等)。为获得灵感,您可以查看 mteb/mtebscripts 仓库,该仓库用于通过 SLURM 脚本运行论文中的各种模型。

class MyModel():
    def encode(
        self, sentences: list[str], **kwargs: Any
    ) -> torch.Tensor | np.ndarray:
        """使用编码器对给定句子进行编码。

        参数:
            sentences: 要编码的句子。
            **kwargs: 传递给编码器的其他参数。

        返回:
            编码后的句子。
        """
        pass

model = MyModel()
tasks = mteb.get_task("Banking77Classification")
evaluation = MTEB(tasks=tasks)
evaluation.run(model)

如果您想在评估检索或重排任务时为查询和语料库使用不同的编码函数,可以添加单独的 encode_queriesencode_corpus 方法。如果这些方法存在,它们将自动用于这些任务。您可以参考 mteb/evaluation/evaluators/RetrievalEvaluator.py 中的 DRESModel 作为这些函数的示例。

class MyModel():
    def encode_queries(self, queries: list[str], **kwargs) -> list[np.ndarray] | list[torch.Tensor]:
        """
        返回给定句子的嵌入列表。
        参数:
            queries: 要编码的句子列表

        返回:
            给定句子的嵌入列表
        """
        pass

    def encode_corpus(self, corpus: list[str] | list[dict[str, str]], **kwargs) -> list[np.ndarray] | list[torch.Tensor]:
        """
        返回给定句子的嵌入列表。
        参数:
            corpus: 要编码的句子列表
                或包含 "title" 和 "text" 键的字典列表

        返回:
            给定句子的嵌入列表
        """
        pass
在自定义数据集上评估

在自定义数据集上评估

要在自定义任务上进行评估,你可以在自定义任务上运行以下代码。关于如何在MTEB中创建新任务,请参见如何添加新任务

from mteb import MTEB
from mteb.abstasks.AbsTaskReranking import AbsTaskReranking
from sentence_transformers import SentenceTransformer


class MyCustomTask(AbsTaskReranking):
    ...

model = SentenceTransformer("average_word_embeddings_komninos")
evaluation = MTEB(tasks=[MyCustomTask()])
evaluation.run(model)

文档

文档
📋 任务可用任务概览
📈 排行榜基准测试的交互式排行榜
🤖 添加模型有关如何向排行榜提交模型的信息
👩‍🔬 可复现的工作流程有关如何使用MTEB复现和创建可复现工作流程的信息
👩‍💻 添加数据集如何向MTEB添加新任务/数据集
👩‍💻 添加排行榜标签页如何向MTEB添加新的排行榜标签页
🤝 贡献如何为MTEB做出贡献并进行开发设置
🌐 MMTEB一项开源努力,旨在扩展MTEB以涵盖广泛的语言

引用

MTEB在"MTEB: Massive Text Embedding Benchmark"中被介绍,欢迎引用:

@article{muennighoff2022mteb,
  doi = {10.48550/ARXIV.2210.07316},
  url = {https://arxiv.org/abs/2210.07316},
  author = {Muennighoff, Niklas and Tazi, Nouamane and Magne, Lo{\"\i}c and Reimers, Nils},
  title = {MTEB: Massive Text Embedding Benchmark},
  publisher = {arXiv},
  journal={arXiv preprint arXiv:2210.07316},  
  year = {2022}
}

你可能还想阅读并引用那些扩展MTEB和集成新数据集的出色工作:

对于使用MTEB进行基准测试的工作,你可以在排行榜上找到它们。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号