多任务文本嵌入模型评估基准
MTEB是一个开源的文本嵌入模型评估基准,涵盖多种任务类型和语言。它提供标准化的测试集、灵活的评估配置和公开排行榜。研究人员可以使用MTEB评估自定义模型,添加新任务,并进行模型性能比较,从而推动文本嵌入技术的进步。
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} 文件夹中
点击下面的每个部分查看详细信息。
<br /> <details> <summary> 数据集选择 </summary>可以通过提供数据集列表来选择数据集,也可以:
tasks = mteb.get_tasks(task_types=["Clustering", "Retrieval"]) # 仅选择聚类和检索任务
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 个英语数据集:
</details> <details> <summary> 传 递 `encode` 参数 </summary>from mteb import MTEB_MAIN_EN evaluation = mteb.MTEB(tasks=MTEB_MAIN_EN, task_langs=["en"])
encode
参数要向模型的 encode
函数传递参数,您可以使用编码关键字参数(encode_kwargs
):
</details> <details> <summary> 选择评估分割 </summary>evaluation.run(model, encode_kwargs={"batch_size": 32}
您可以通过以下方式仅在 所有任务的 test
分割上进行评估:
evaluation.run(model, eval_splits=["test"])
请注意,公开排行榜使用所有数据集的测试分割,但 MSMARCO 除外,它使用 "dev" 分割。
</details> <details> <summary> 使用自定义模型 </summary>模型应实现以下接口,实现一个 encode
函数,该函数接受句子列表作为输入,并返回嵌入列表(嵌 入可以是 np.array
、torch.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_queries
和 encode_corpus
方法。如果这些方法存在,它们将自动用于这些任务。您可以参考 mteb/evaluation/evaluators/RetrievalEvaluator.py
中的 DRESModel
作为这些函数的示例。
</details> <details> <summary> 在自定义数据集上评估 </summary>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中创建新任务,请参见如何添加新任务。
</details> <br />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进行基准测试的工作,你可以在排行榜上找到它们。
最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。
像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。
AI数字人视频创作平台
Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。
一站式AI创作平台
提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作
AI办公助手,复杂任务高效处理
AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!
AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号