综合介绍
MTEB(Massive Text Embedding Benchmark)是一个由 embeddings-benchmark 团队开发并托管在 GitHub 上的开源项目,旨在为文本嵌入模型提供全面的性能评估。它涵盖了8大任务类型,包括分类、聚类、检索等,整合了58个数据集,支持112种语言,是目前最全面的文本嵌入基准测试工具之一。MTEB 通过对33种模型的测试,揭示了不同模型在各类任务中的表现差异,帮助开发者选择适合具体应用的嵌入模型。该项目提供开源代码,用户可以自由运行测试或提交新模型至公共排行榜,广泛适用于NLP研究、模型开发及行业应用场景。
访问地址:https://huggingface.co/spaces/mteb/leaderboard
功能列表
- 多任务评估支持:包含8种嵌入任务,如语义文本相似度(STS)、检索、聚类等,覆盖多种应用场景。
- 多语言数据集:支持112种语言,提供多语言模型的测试能力,适合全球化应用开发。
- 模型性能排行榜:内置公共排行榜,展示33种模型的测试结果,便于用户对比选择。
- 自定义模型测试:允许用户导入自定义嵌入模型,仅需少量代码即可运行评估。
- 缓存嵌入功能:支持嵌入结果缓存,优化重复测试效率,适合大规模实验。
- 灵活参数调整:提供编码参数配置,如批量大小调整,提升测试灵活性。
- 开源代码支持:完整源码开放,用户可根据需求修改或扩展功能。
- 社区扩展性:支持用户提交新任务、数据集或模型,持续丰富测试内容。
使用帮助
安装流程
MTEB 是一个基于 Python 的工具,部署和运行需要一定的编程环境。以下是详细的安装步骤:
1. 环境准备
- 操作系统:支持 Windows、MacOS 或 Linux。
- Python 版本:需要 Python 3.10 或以上版本,可通过
python --version
检查。 - Git 工具:用于从 GitHub 获取源码,建议提前安装。
2. 克隆代码库
打开终端,运行以下命令获取 MTEB 源码:
git clone https://github.com/embeddings-benchmark/mteb.git
cd mteb
这会将项目下载到本地并进入项目目录。
3. 安装依赖
MTEB 需要一些 Python 库支持,安装依赖前建议创建虚拟环境以避免冲突:
python -m venv venv
source venv/bin/activate # Linux/MacOS
venv\Scripts\activate # Windows
然后安装核心依赖:
pip install -r requirements.txt
若需运行排行榜界面,还需安装 Gradio:
pip install mteb[gradio]
4. 验证安装
运行以下命令检查可用任务,确保安装成功:
mteb --available_tasks
若返回任务列表,说明环境配置完成。
使用方法
MTEB 的核心功能是评估文本嵌入模型,以下是主要操作流程:
功能1:运行预置任务评估现有模型
MTEB 支持直接测试已有模型(如 SentenceTransformer 模型)。例如,评估 "average_word_embeddings_komninos" 模型在 Banking77Classification 任务上的表现:
mteb -m average_word_embeddings_komninos -t Banking77Classification --output_folder results/average_word_embeddings_komninos --verbosity 3
-m
指定模型名称。-t
指定任务名称。--output_folder
指定结果保存路径。--verbosity 3
显示详细日志。
结果会保存到指定文件夹,包含各项任务的得分。
功能2:测试自定义模型
若需测试自己的模型,只需实现简单的接口。以 SentenceTransformer 为例:
from mteb import MTEB
from sentence_transformers import SentenceTransformer
# 加载模型
model = SentenceTransformer("average_word_embeddings_komninos")
# 定义评估任务
evaluation = MTEB(tasks=["Banking77Classification"])
# 运行评估
evaluation.run(model, output_folder="results")
运行后,结果会保存到 "results" 文件夹。
功能3:缓存嵌入以优化效率
对于重复测试,可启用缓存功能,避免重复计算嵌入:
from mteb.models.cache_wrapper import CachedEmbeddingWrapper
# 包装模型以启用缓存
model_with_cache = CachedEmbeddingWrapper(model, cache_path="cache_embeddings")
evaluation.run(model_with_cache)
缓存文件会按任务名称存储在指定路径。
功能4:查看排行榜
若想查看当前模型排名,可访问官方排行榜,或本地部署:
git clone https://github.com/embeddings-benchmark/leaderboard.git
cd leaderboard
pip install -r requirements.txt
python app.py
在浏览器中访问 http://localhost:7860
,即可查看实时排行榜。
功能5:添加新任务
用户可通过继承任务类扩展 MTEB。例如,添加一个 reranking 任务:
from mteb.abstasks.AbsTaskReranking import AbsTaskReranking
class CustomReranking(AbsTaskReranking):
@property
def description(self):
return {
"name": "CustomReranking",
"description": "自定义重排序任务",
"type": "Reranking",
"eval_splits": ["test"],
"eval_langs": ["en"],
"main_score": "map"
}
evaluation = MTEB(tasks=[CustomReranking()])
evaluation.run(model)
操作技巧
- 多GPU支持:对于检索任务,可使用多GPU加速:
pip install git+https://github.com/NouamaneTazi/beir@nouamane/better-multi-gpu
torchrun --nproc_per_node=2 scripts/retrieval_multigpu.py
- 选择子集:只评估特定任务子集:
evaluation.run(model, eval_subsets=["Banking77Classification"])
- 调整批量大小:优化编码速度:
evaluation.run(model, encode_kwargs={"batch_size": 32})
通过以上步骤,用户可以轻松上手 MTEB,完成模型评估或功能扩展。