ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

E5 文本嵌入模型全解析:模型选型与 BEIR/MTEB 基准评测实战指南

E5 文本嵌入模型全解析:模型选型与 BEIR/MTEB 基准评测实战指南 E5 文本嵌入模型全解析模型选型与 BEIR/MTEB 基准评测实战指南【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm导读E5EmbEddings from bidirEctional Encoder rEpresentations是微软研究院发布的一系列高质量文本嵌入Text Embedding模型涵盖英文与多语言场景并在 BEIR、MTEB 等主流检索与嵌入基准上提供了可复现的评测结果。本文以 e5/README.md 为骨架结合仓库内的评测脚本与核心实现源码系统讲解 E5 模型家族的组织方式、依赖安装、BEIR/MTEB 评测命令与参数细节并深入剖析前缀prefix、池化pooling与指令化提示instruction prompt等底层机制。读完本文你将能够独立完成 E5 任意模型的基准评测复现并理解评测脚本背后query/passage 前缀 均值池化 指令模板的完整推理链路。E5 模型家族三代技术路线的演进E5 系列在 e5/README.md 中被划分为三条技术路线对应三篇论文均为 Liang Wang、Furu Wei 等微软研究员的成果《Text Embeddings by Weakly-Supervised Contrastive Pre-training》arXiv 2022提出弱监督对比预训练范式利用海量query, passage配对文本如搜索点击日志训练嵌入模型奠定了 E5 第一代与第二代v2模型的基础《Improving Text Embeddings with Large Language Models》arXiv 2024利用 LLM 合成高质量、多样化的训练数据含各类任务的指令数据来增强文本嵌入催生了带-instruct后缀的指令化模型《Multilingual E5 Text Embeddings: A Technical Report》arXiv 2024将 E5 扩展到多语言场景覆盖 100 种语言并系统评估了多语言检索如 MIRACL、C-MTEB上的表现。仓库按这三条路线提供了完整的模型清单与评测脚本下面逐一展开。基于 LLM 的嵌入模型模型BEIR层数嵌入维度HuggingFace 模型 IDE5-mistral-7b-instruct56.9324096intfloat/e5-mistral-7b-instructe5-mistral-7b-instruct是基于 Mistral-7B 底座微调而来的指令化嵌入模型BEIR 分数显著高于小规模模型。由于底层是 Mistral 架构加载它需要transformers4.34详见下文环境准备。从 model_config.py 可以看到该模型在评测脚本中被自动配置为last池化取最后一个 token 的隐藏状态和instruction前缀类型与小模型默认的均值池化、query/passage 前缀截然不同——这是由其训练目标决定的。英文预训练模型模型BEIR层数嵌入维度HuggingFace 模型 IDE5-small-v249.012384intfloat/e5-small-v2E5-base-v250.312768intfloat/e5-base-v2E5-large-v250.6241024intfloat/e5-large-v2E5-small46.012384intfloat/e5-smallE5-base48.812768intfloat/e5-baseE5-large50.0241024intfloat/e5-largeE5-small-unsupervised40.812384intfloat/e5-small-unsupervisedE5-base-unsupervised42.912768intfloat/e5-base-unsupervisedE5-large-unsupervised44.2241024intfloat/e5-large-unsupervised英文模型按训练方式分为三组-unsupervised后缀只在大规模无标注数据集上预训练未使用任何监督信号BEIR 分数相对最低40.844.2但体现了纯自监督路线的基线能力正如 e5/README.md 明确说明的The models with-unsupervisedsuffix only pre-trains on unlabeled datasets无后缀的第一代模型在弱监督数据上进一步训练BEIR 提升至 46.050.0-v2第二代模型优化了训练数据与配方同规模下 BEIR 最高49.050.6是英文场景下推荐的首选系列。多语言预训练模型模型BEIR层数嵌入维度HuggingFace 模型 IDmultilingual-e5-small46.612384intfloat/multilingual-e5-smallmultilingual-e5-base48.912768intfloat/multilingual-e5-basemultilingual-e5-large51.4241024intfloat/multilingual-e5-largemultilingual-e5-large-instruct52.5241024intfloat/multilingual-e5-large-instruct多语言系列面向跨语言检索与多语言语义匹配场景。其中multilingual-e5-large-instruct是唯一带-instruct的多语言模型评测脚本会为其自动启用指令化提示模式prefix_typeinstruction见 model_config.py即在输入前拼接任务指令而不是简单的query:前缀。环境准备与依赖安装进入e5目录后安装依赖pip install -r requirements.txte5/requirements.txt 中的核心依赖及作用如下依赖版本要求用途torch1.7深度学习框架承载模型前向计算与 GPU 加速transformers4.15.0加载 E5 各类预训练模型与分词器tqdm无编码进度条展示beir无BEIR 基准的数据加载与评测逻辑mteb1.0.2MTEB 基准的任务加载与评测逻辑版本锁定特别提示若评测e5-mistral-7b-instruct需要将transformers升级到4.34才能正确加载 Mistral 架构e5/README.md 明确说明。此外由于评测脚本通过AutoModel.from_pretrained动态拉取 HuggingFace 模型见 mteb_beir_eval.py首次运行需要可访问 HuggingFace Hub 的网络环境模型会自动下载缓存。在 BEIR 基准上评估模型BEIRBenchmarking IR是信息检索领域的经典评测基准覆盖 15 个异构检索任务。安装依赖后在 GPU 机器上执行bash scripts/eval_mteb_beir.sh intfloat/e5-small-v2执行后脚本将自动使用机器上所有可用 GPU多卡时通过torch.nn.DataParallel并行编码见 mteb_beir_eval.py对 BEIR 全部英文检索任务逐一进行评测MSMARCOv2 除外见 mteb_beir_eval.py将结果输出到默认目录tmp-outputs/。时间成本须知由于需要对语料库corpus做全量编码完整评测相当耗时——e5/README.md 明确警告大约需要~10 小时而intfloat/e5-mistral-7b-instruct由于模型规模巨大可能需要数天。建议先用--dry-run快速验证流程见下文参数表。评测脚本入口解析e5/scripts/eval_mteb_beir.sh 是一个轻量封装核心逻辑如下MODEL_NAME_OR_PATH if [[ $# -ge 1 ! $1 --* ]]; then MODEL_NAME_OR_PATH$1 shift fi if [ -z $OUTPUT_DIR ]; then OUTPUT_DIRtmp-outputs/ fi python -u mteb_beir_eval.py \ --model-name-or-path ${MODEL_NAME_OR_PATH} \ --output-dir ${OUTPUT_DIR} $它做了三件事把第一个位置参数识别为模型路径/名称、默认输出目录设为tmp-outputs/、把其余参数原样透传给 Python 脚本。因此你可以自由追加下文列出的任意命令行参数。mteb_beir_eval.py 支持的参数e5/mteb_beir_eval.py 定义的可调参数参数默认值说明--model-name-or-pathintfloat/e5-small-v2要评测的模型支持 HuggingFace ID 或本地模型目录--output-dirtmp-outputs/评测结果输出目录--doc-as-queryFalse开关对 passage 也使用 query 前缀仅用于 Quora 这类对称检索任务--pool-typeavg池化方式可选cls/avg/last/weightedavg--prefix-typequery_or_passage前缀模式可选query_or_passage/instruction--dry-runFalse开关快速冒烟测试只跑 SciFact 与 FiQA2018 两个任务其中--pool-type与--prefix-type有自动覆盖机制脚本会根据模型名从 model_config.py 的MODEL_NAME_TO_POOL_TYPE与MODEL_NAME_TO_PREFIX_TYPE两张映射表中查询最佳配置如 E5-v2 系为avgquery_or_passagee5-mistral-7b-instruct为lastinstruction只有映射表未收录的模型才回落到命令行默认值。脚本还通过断言对参数合法性做了校验mteb_beir_eval.pyassert args.pool_type in [cls, avg, last, weightedavg], pool_type should be cls / avg / last assert args.prefix_type in [query_or_passage, instruction], prefix_type should be query_or_passage / instruction检索评测的内部工作流RetrievalModel实现了 MTEB 的DRESModel接口mteb_beir_eval.py其编码逻辑完整复现了 E5 论文规定的推理协议query 编码在query_or_passage模式下每个查询前拼接query:前缀在instruction模式下则拼接按任务生成的具体指令如Instruct: Given a claim, find documents that refute the claim\nQuery:corpus 编码默认拼接title与text{title} {text}并加上passage:前缀当--doc-as-query开启时脚本在 Quora 任务上自动开启因为 Quora 是语义对称的重复问题检索corpus 也走 query 前缀逻辑批量编码batch_size 64 * gpu_count在torch.cuda.amp.autocast()下前向计算对last_hidden_state做池化后执行 L2 归一化mteb_beir_eval.py评测数据集除 MSMARCO 使用dev切分外其余任务统一使用test切分mteb_beir_eval.py。这一协议也是你在生产环境中用 E5 做向量检索时必须遵循的query 加query:前缀、passage 加passage:前缀、对嵌入做 L2 归一化否则相似度计算结果与官方基准不可比。在 MTEB 基准上评估模型除检索外MTEBMassive Text Embedding Benchmark覆盖 8 大类共 58 个数据集。仓库提供的评测脚本覆盖除 Retrieval 之外的 7 类任务运行bash scripts/eval_mteb_except_retrieval.sh intfloat/e5-small-v2对于多语言模型只需追加--multilingual参数bash scripts/eval_mteb_except_retrieval.sh intfloat/multilingual-e5-base --multilingual支持的 7 类任务e5/scripts/eval_mteb_except_retrieval.sh 将以下任务类型显式传给 Python 脚本python -u mteb_except_retrieval_eval.py \ --model-name-or-path ${MODEL_NAME_OR_PATH} \ --task-types STS Summarization PairClassification Classification Reranking Clustering BitextMining \ --output-dir ${OUTPUT_DIR} $任务类型评测内容示例STS语义文本相似度如 STSBenchmarkSummarization摘要语义相似检索PairClassification句子对分类如重复问题检测Classification文本分类情感、意图、毒性等Reranking重排序如 SciDocsRR、MindSmallRerankingClustering聚类如 Arxiv、Reddit、新闻主题聚类BitextMining平行语料挖掘跨语言--multilingual开关的作用体现在 mteb_except_retrieval_eval.py多语言模式下task_langsNone即不限定语言评测全部语种默认英文模式则限定task_langs[en]。分类任务的特殊处理mteb_except_retrieval_eval.py 中有一个值得注意的实现细节评测 Classification 任务时会关闭 L2 归一化model.l2_normalize False因为源码注释表明disable l2 normalize for classification tasks, as it achieves slightly better results——分类器直接基于原始嵌入训练归一化反而损失了范数信息其余 6 类任务则保持 L2 归一化。这一取舍体现了 E5 评测对任务特性的精细适配。与 BEIR 评测类似该脚本也内置了--dry-run冒烟模式仅运行Banking77Classification、ImdbClassification、STS12三个任务mteb_except_retrieval_eval.py适合先快速验证环境与流程是否就绪。源码级原理前缀、池化与任务指令理解 E5 评测脚本的关键在于三个核心机制——它们全部集中在 e5/utils.py 与 e5/model_config.py 中。机制一query/passage 前缀E5 的核心设计之一是不对称前缀查询侧加query:文档侧加passage:使模型能够区分两种语义角色。评测脚本在 mteb_beir_eval.py 中实现if args.prefix_type query_or_passage: input_texts [fquery: {q} for q in queries] # 查询侧 ... input_texts [passage: {}.format(t) for t in input_texts] # 文档侧这也是 e5/README.md 所述查询与文档编码方式不同的具体代码体现任何复现 E5 嵌入或做线上向量检索的实现都必须遵守这一约定。机制二四种池化方式utils.py 的pool()函数实现了四种池化评测脚本通过--pool-type选择avg对 last_hidden_state 按 attention mask 做掩码求和再除以有效 token 数即标准均值池化——E5 绝大多数模型包括全部 v2 与多语言系列的默认方式weightedavgSGPT 提出的位置加权均值池化把[0,1,1,1,0,0]变换为[0,1,2,3,0,0]越靠后的 token 权重越大utils.pycls直接取序列首 tokenlast_hidden[:, 0]的隐藏状态last取最后一个有效 token 的隐藏状态需要处理左填充与右填充两种 padding 情形utils.py——这是e5-mistral-7b-instruct这类解码器架构模型采用的池化方式。机制三指令化提示instruction prompt对于-instruct系列模型评测脚本不再使用固定前缀而是为每个任务动态生成指令。指令来源是 utils.py 中get_task_def_by_task_name_and_type()维护的任务描述表覆盖 STS、Summarization、BitextMining、Classification、Clustering、Reranking/PairClassification、Retrieval 七大类其中还包含 C-MTEB 的中文任务指令如TNews、T2Retrieval、CmedqaRetrieval等。任务描述随后通过get_detailed_instruct()包装成标准格式utils.pydef get_detailed_instruct(task_description: str) - str: if not task_description: return return Instruct: {}\nQuery: .format(task_description)例如 BEIR 的 FiQA2018 任务会生成Instruct: Given a financial question, retrieve user replies that best answer the question\nQuery: 用户查询。这条指令随后通过model.set_prompt(prompt...)注入编码流程mteb_beir_eval.py。这也解释了为什么multilingual-e5-large-instruct在 README 的 BEIR 表中能取得 52.5 的高分——指令提供了任务语义先验。配置映射表一键对齐模型规范e5/model_config.py 维护了两张关键映射表确保不同模型使用官方规定的池化与前缀策略避免用户手动配置出错MODEL_NAME_TO_POOL_TYPE全部 14 个模型均映射为avg唯独e5-mistral-7b-instruct映射为lastMODEL_NAME_TO_PREFIX_TYPE前 12 个模型映射为query_or_passage两个-instruct模型映射为instruction。两张表的匹配逻辑基于模型名最后一段args.model_name_or_path.split(/)[-1]见 mteb_beir_eval.py因此即使传入完整 HuggingFace ID也能正确命中配置。常见问题与排查e5/README.md 的 Troubleshooting 部分给出了一条核心建议如果遇到OOM显存溢出错误请尝试减小 batch size。结合源码可以进一步定位编码批大小在 mteb_beir_eval.py 与 mteb_except_retrieval_eval.py 中硬编码为64 * gpu_count即每张卡 64 条文本。若在长文本或大模型尤其e5-mistral-7b-instruct场景下 OOM可在本地复制脚本并调小该批大小或减少并行 GPU 数量同时编码在torch.cuda.amp.autocast()混合精度下进行本身已对显存占用做了优化。评测结果默认写入tmp-outputs/可通过--output-dir调整。其他资源、引用与许可个性化 passkey 检索personalized passkey retrievalREADME 提到为研究长文本嵌入与个性化检索提出的合成任务数据已开源数据集intfloat/personalized_passkey_retrieval。该任务是论文《Improving Text Embeddings with Large Language Models》中用于验证模型长上下文能力的合成基准可配合长上下文评测使用引用Citation若 E5 论文或模型对你有帮助README 建议按以下 BibTeX 引用完整条目见 e5/README.mdarticle{wang2024multilingual, title{Multilingual E5 Text Embeddings: A Technical Report}, author{Wang, Liang and Yang, Nan and Huang, Xiaolong and Yang, Linjun and Majumder, Rangan and Wei, Furu}, journal{arXiv preprint arXiv:2402.05672}, year{2024} } article{wang2023improving, title{Improving Text Embeddings with Large Language Models}, author{Wang, Liang and Yang, Nan and Huang, Xiaolong and Yang, Linjun and Majumder, Rangan and Wei, Furu}, journal{arXiv preprint arXiv:2401.00368}, year{2023} } article{wang2022text, title{Text Embeddings by Weakly-Supervised Contrastive Pre-training}, author{Wang, Liang and Yang, Nan and Huang, Xiaolong and Jiao, Binxing and Yang, Linjun and Jiang, Daxin and Majumder, Rangan and Wei, Furu}, journal{arXiv preprint arXiv:2212.03533}, year{2022} }许可本目录以及整个仓库采用根目录 LICENSE 文件中声明的许可协议使用模型与代码前请查阅该文件确认合规。总结围绕 e5/README.md 这一核心文档本文完整覆盖了 E5 的模型矩阵LLM 模型、英文模型、多语言模型及其 BEIR 分数与结构参数、依赖安装、BEIR 与 MTEB 两大基准的评测命令与全部可调参数并结合 mteb_beir_eval.py、mteb_except_retrieval_eval.py、utils.py 与 model_config.py 源码讲清了 query/passage 前缀、四种池化、指令化提示、L2 归一化取舍、分类任务特例处理等底层机制。无论是复现官方 BEIR 分数、跑通 MTEB 全流程还是将这些 E5 推理协议迁移到自己的检索管线中本文给出的命令、参数与代码定位都能直接作为操作依据。【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表