Hugging Face 发布 MTEB 大规模文本嵌入基准与排行榜
MTEB: Massive Text Embedding Benchmark
Hugging Face 发布 MTEB(Massive Text Embedding Benchmark),用于衡量文本嵌入模型在多类任务上的表现,排行榜已汇总超过 2000 条结果。
原文给出 56 个数据集、8 类任务、112 种语言的嵌入模型评测结果和模型选择分组,可用于按任务挑合适的嵌入模型。
MTEB 是一个大规模基准,用于衡量文本嵌入模型在各种嵌入任务上的性能。
🥇 排行榜提供了在各种任务上最佳文本嵌入模型的整体视图。
📝 论文介绍了 MTEB 中任务和数据集的背景,并分析了排行榜结果!
💻 Github 仓库包含用于基准测试的代码,并可将你选择的任何模型提交到排行榜。
为什么需要文本嵌入?
文本嵌入是文本的向量表示,可编码语义信息。由于机器需要数值输入才能进行计算,文本嵌入是许多下游 NLP 应用的关键组成部分。例如,Google 使用文本嵌入来为其搜索引擎提供支持。文本嵌入还可用于通过聚类在大量文本中寻找模式,或作为文本分类模型的输入,例如我们最近的 SetFit 工作。然而,文本嵌入的质量高度依赖于所使用的嵌入模型。MTEB 旨在帮助你找到适用于各种任务的最佳嵌入模型!
MTEB
🐋 大规模:MTEB 包含 8 个任务中的 56 个数据集,目前在排行榜上汇总了 >2000 个结果。
🌎 多语言:MTEB 包含多达 112 种不同语言!我们已在 Bitext Mining、Classification 和 STS 上对多个多语言模型进行了基准测试。
🦚 可扩展:无论是新任务、数据集、指标还是排行榜新增内容,任何贡献都非常欢迎。查看 GitHub 仓库以提交到排行榜或解决未解决问题。我们希望你能加入我们寻找最佳文本嵌入模型的旅程!
MTEB 中任务和数据集的概览。多语言数据集以紫色阴影标记。
模型
对于 MTEB 的初始基准测试,我们重点关注声称达到最先进结果的模型以及 Hub 上的热门模型。这导致 transformers 的占比很高。🤖
模型按平均英语 MTEB 分数(y)与速度(x)与嵌入大小(圆圈大小)对比。
我们将模型分为以下三个属性,以简化为你任务找到最佳模型的过程:
🏎 最高速度 像 Glove 这样的模型提供高速度,但缺乏上下文感知,导致平均 MTEB 分数较低。
⚖️ 速度与性能 稍慢但显著更强,all-mpnet-base-v2 或 all-MiniLM-L6-v2 在速度与性能之间提供了良好平衡。
💪 最高性能 像 ST5-XXL、GTR-XXL 或 SGPT-5.8B-msmarco 这样的数十亿参数模型在 MTEB 上占据主导地位。它们往往还会产生更大的嵌入,例如 SGPT-5.8B-msmarco 会产生 4096 维嵌入,需要更多存储!
模型性能因任务和数据集而异,因此我们建议在决定使用哪个模型之前,查看排行榜的各个选项卡!
对你的模型进行基准测试
使用 MTEB 库,你可以对任何产生嵌入的模型进行基准测试,并将其结果添加到公共排行榜。让我们快速看一个示例!
首先,安装库:
pip install mteb
接下来,在数据集上对模型进行基准测试,例如在 Banking77 上的 komninos 词嵌入。
from mteb import MTEB
from sentence_transformers import SentenceTransformer
model_name = "average_word_embeddings_komninos"
model = SentenceTransformer(model_name)
evaluation = MTEB(tasks=["Banking77Classification"])
results = evaluation.run(model, output_folder=f"results/{model_name}")
这应该会生成一个 results/average_word_embeddings_komninos/Banking77Classification.json 文件!
现在,你可以通过将其添加到 Hub 上任何模型 README.md 的元数据中,将结果提交到排行榜。
运行我们的自动脚本来生成元数据:
python mteb_meta.py results/average_word_embeddings_komninos
该脚本将生成一个 mteb_metadata.md 文件,如下所示:
```sh
tags: - mteb model-index: - name: average_word_embeddings_komninos results: - task: type: Classification dataset: type: mteb/banking77 name: MTEB Banking77Classification config: default split: test revision: 0fd18e25b25c072e09e0d92ab615fda904d66300 metrics: - type: accuracy value: 66.76623376623377 - type: f1 value: 66.59096432882667
Now add the metadata to the top of a `README.md` of any model on the Hub, like this [SGPT-5.8B-msmarco](https://huggingface.co/Muennighoff/SGPT-5.8B-weightedmean-msmarco-specb-bitfit/blob/main/README.md) model, and it will show up on the [leaderboard](https://huggingface.co/spaces/mteb/leaderboard) after refreshing!
## Next steps
Go out there and benchmark any model you like! Let us know if you have questions or feedback by opening an issue on our [GitHub repo](https://github.com/embeddings-benchmark/mteb) or the [leaderboard community tab](https://huggingface.co/spaces/mteb/leaderboard/discussions) 🤗
Happy embedding!
## Credits
Huge thanks to the following who contributed to the article or to the MTEB codebase (listed in alphabetical order): Steven Liu, Loïc Magne, Nils Reimers and Nouamane Tazi.
来源:Hugging Face:Blog · huggingface.co
