Embedding 模型深度解析文本嵌入技术原理与 MTEB 评估体系摘要本文深入解析文本 Embedding 模型的技术原理从基础概念到主流模型架构全面探讨 MTEB 评估体系的设计与应用。读者将理解 Embedding 如何将文本转换为向量表示掌握模型选型策略与评估方法。引言背景介绍文本 Embedding嵌入是自然语言处理的核心技术它将离散的文本转换为连续的向量表示使得文本之间的语义关系可以在向量空间中计算。从早期的 Word2Vec 到现代的 BGE、Cohere 等模型Embedding 技术已成为 RAG、搜索、推荐等应用的基础设施。问题陈述Embedding 模型的核心原理是什么如何评估不同模型的性能表现如何在实际应用中选择合适的 Embedding 模型文章结构预览本文将从以下方面展开Embedding 的基础概念与数学原理主流 Embedding 模型架构解析MTEB 评估体系详解模型选型与实践应用Embedding 基础概念与数学原理什么是文本 Embedding文本 Embedding 是将文本映射到高维向量空间的过程输入: 人工智能正在改变世界 输出: [0.23, -0.45, 0.67, ..., 0.12] (768维向量)核心思想语义相近的文本向量距离接近语义无关的文本向量距离较远数学基础向量空间模型相似度计算Embedding 的核心应用是计算文本相似度defcosine_similarity(vec_a:np.ndarray,vec_b:np.ndarray)-float: 余弦相似度 - 最常用的 Embedding 相似度度量 公式: cos(A, B) (A · B) / (||A|| * ||B||) 范围: [-1, 1] - 1: 完全相似 - 0: 无关 - -1: 完全相反 dot_productnp.dot(vec_a,vec_b)norm_anp.linalg.norm(vec_a)norm_bnp.linalg.norm(vec_b)returndot_product/(norm_a*norm_b)# 示例embedding1model.encode(人工智能)embedding2model.encode(机器学习)embedding3model.encode(天气预报)sim1cosine_similarity(embedding1,embedding2)# 0.85 (语义相近)sim2cosine_similarity(embedding1,embedding3)# 0.15 (语义无关)距离度量对比度量方式公式特点适用场景余弦相似度cos(A,B)不受向量长度影响文本语义相似欧氏距离A-B曼哈顿距离ΣAi-Bi点积A·B计算最快已归一化向量Embedding 的维度选择# 不同模型的典型维度dimensions{Word2Vec:300,# 传统词向量BERT-base:768,# Transformer 基础维度BERT-large:1024,# 大模型维度BGE-large:1024,# 中文优化模型Cohere-v3:1024,# 商业 API 模型OpenAI-3-large:3072,# 大维度高精度}维度权衡高维度表达能力更强但计算成本高低维度效率高但可能损失语义细节实际选择根据任务需求和计算资源平衡关键要点Embedding 将文本映射为向量语义关系转化为空间距离余弦相似度是最常用的度量方式维度选择需要在表达能力和计算效率间平衡主流 Embedding 模型架构解析模型演进历程时代代表模型核心技术主要突破2013Word2VecSkip-gram/CBOW静态词向量2018BERTTransformer上下文动态表示2021Sentence-BERTSiamese Network句子级 Embedding2023BGEContrastive Learning中文优化2024Cohere-v4多任务训练商业 APIBERT 系列 Embedding架构原理BERT 作为 Embedding 模型的基本原理classBertEmbedding: BERT Embedding 提取方式 三种常见策略 1. CLS Token: 使用第一个 token 的输出 2. Mean Pooling: 所有 token 输出的平均 3. Max Pooling: 所有 token 输出的最大值 def__init__(self,model_namebert-base-chinese):self.modelBertModel.from_pretrained(model_name)defencode_cls(self,text:str)-np.ndarray:CLS Token 方式inputsself.tokenize(text)outputsself.model(**inputs)cls_embeddingoutputs.last_hidden_state[0,0,:]# 第一个 tokenreturncls_embedding.numpy()defencode_mean_pooling(self,text:str)-np.ndarray:Mean Pooling 方式推荐inputsself.tokenize(text)outputsself.model(**inputs)# 考虑 attention mask忽略 paddingtoken_embeddingsoutputs.last_hidden_state attention_maskinputs[attention_mask]mean_embeddingtorch.sum(token_embeddings*attention_mask.unsqueeze(-1),dim1)/torch.sum(attention_mask,dim1,keepdimTrue)returnmean_embedding.numpy()[0]Sentence-BERT 改进SBERT 通过 Siamese 结构改进 Embedding 质量classSentenceBERT: Sentence-BERT 架构 核心改进 - 使用孪生网络结构 - 对比学习训练目标 - 直接输出句子级表示 def__init__(self,model_namesentence-transformers/paraphrase-multilingual):self.modelSentenceTransformer(model_name)defencode_batch(self,sentences:list)-np.ndarray:批量编码高效处理embeddingsself.model.encode(sentences)returnembeddingsdefsimilarity_matrix(self,sentences:list)-np.ndarray:计算句子间的相似度矩阵embeddingsself.encode_batch(sentences)similaritycosine_similarity(embeddings,embeddings)returnsimilarityBGE 模型系列BGEBAAI General Embedding是中文领域表现最优的 Embedding 模型BGE 模型家族模型维度特点MTEB 排名BGE-small-zh512轻量高效中文任务优秀BGE-base-zh768平衡性能开源首选BGE-large-zh1024高精度中文最优BGE-M31024多语言全球领先BGE 核心技术 BGE 的核心技术 1. 对比学习训练Contrastive Learning - 正样本语义相似的文本对 - 负样本语义不同的文本对 2. 批内负采样In-batch Negatives - 利用 batch 内其他样本作为负样本 - 提高训练效率 3. 多任务联合训练 - 检索、分类、聚类等任务统一优化 defcontrastive_loss(pos_embeddings,neg_embeddings,temperature0.05): InfoNCE 对比学习损失函数 核心拉近正样本推远负样本 pos_simtorch.matmul(pos_embeddings,pos_embeddings.T)/temperature neg_simtorch.matmul(pos_embeddings,neg_embeddings.T)/temperature logitstorch.cat([pos_sim,neg_sim],dim-1)labelstorch.arange(len(pos_embeddings))losstorch.nn.functional.cross_entropy(logits,labels)returnlossBGE 使用实践fromsentence_transformersimportSentenceTransformer# 加载模型modelSentenceTransformer(BAAI/bge-large-zh-v1.5)# 编码中文文本texts[人工智能技术的快速发展,机器学习算法的应用研究,天气预报预测模型]embeddingsmodel.encode(texts)# 计算相似度fromsklearn.metrics.pairwiseimportcosine_similarity sim_matrixcosine_similarity(embeddings)print(sim_matrix)# 输出[[1.00, 0.82, 0.15],# [0.82, 1.00, 0.18],# [0.15, 0.18, 1.00]]商业 API EmbeddingCohere Embeddingimportcohere cocohere.Client(your-api-key)# Cohere embed-v4 特点# - 多语言支持# - 高质量向量表示# - 支持 truncate 参数控制维度responseco.embed(texts[人工智能技术,机器学习算法],modelembed-v4,input_typesearch_document,# 文档索引场景truncateEND# 截断方式)embeddingsresponse.embeddingsOpenAI EmbeddingfromopenaiimportOpenAI clientOpenAI()# OpenAI text-embedding-3 特点# - 支持 dimensions 参数降维# - 高 MTEB 排名# - 中文支持较弱responseclient.embeddings.create(input[人工智能技术,机器学习算法],modeltext-embedding-3-large,dimensions1024# 可选降维)embeddings[item.embeddingforiteminresponse.data]关键要点BERT 系列基于 Transformer支持上下文动态表示BGE中文最优选择对比学习训练商业 API高质量但成本高选型需考虑语言支持MTEB 评估体系详解什么是 MTEBMTEBMassive Text Embedding Benchmark是目前最权威的 Embedding 模型评估体系覆盖范围8 大任务类别56 数据集多语言支持 112 语言开源评估可本地运行评估流程MTEB 任务类别任务类别评估内容典型数据集Retrieval信息检索能力MSMARCO, BEIRClassification文本分类AmazonReviews, BankClustering文本聚类ArxivClusteringReranking重排序AskUbuntuDuplicatesSTS (Semantic Textual Similarity)语义相似度STS BenchmarkPair Classification对分类QuoraDuplicatesSummarization摘要聚类SummEvalInstruction Retrieval指令检索Retrieval-20QMTEB 评估流程importmtebfromsentence_transformersimportSentenceTransformer# 创建评估任务tasksmteb.get_tasks(tasks[Retrieval,Classification,STS])# 加载模型modelSentenceTransformer(BAAI/bge-large-zh-v1.5)# 运行评估evaluationmteb.MTEB(taskstasks)resultsevaluation.run(model)# 查看结果fortask_resultinresults:print(fTask:{task_result.task_name})print(fScore:{task_result.get_score()})MTEB Leaderboard 排名截至 2025 年的 Top Embedding 模型排名模型Overall ScoreRetrievalClassification特点Cohere embed-v465.265.070.5商业 API多语言OpenAI text-3-large64.664.269.8API可降维BGE-M363.062.868.5开源多语言Gemini Embedding 266.165.571.2Google APIQwen3-Embedding62.561.867.5开源中文优中文 MTEBC-MTEB C-MTEB 是针对中文文本的评估基准 包含 - 中文检索任务 - 中文分类任务 - 中文相似度任务 # 运行中文评估tasksmteb.get_tasks(tasks[CMTEBRetrieval,CMTEBClassification])resultsevaluation.run(model)评估指标详解Retrieval 任务指标 检索任务的核心指标 - NDCGk (Normalized Discounted Cumulative Gain) 考虑排序位置的加权评分 - Recallk 前 k 个结果中正确文档的召回率 - MRR (Mean Reciprocal Rank) 第一个正确结果的位置倒数均值 defcompute_ndcg_at_k(retrieved_ids,relevant_ids,k10):计算 NDCGkdcg0fori,doc_idinenumerate(retrieved_ids[:k]):ifdoc_idinrelevant_ids:dcg1/np.log2(i2)# 理想 DCGideal_dcgsum(1/np.log2(i2)foriinrange(min(k,len(relevant_ids))))returndcg/ideal_dcgifideal_dcg0else0Classification 任务指标 分类任务的评估 - Accuracy 准确率 - F1 Score 精确率和召回率的调和平均 - 使用 Embedding Logistic Regression/KNN 进行分类 fromsklearn.linear_modelimportLogisticRegressionfromsklearn.metricsimportaccuracy_score,f1_scoredefevaluate_classification(train_embeddings,train_labels,test_embeddings,test_labels):评估 Embedding 的分类能力clfLogisticRegression()clf.fit(train_embeddings,train_labels)predictionsclf.predict(test_embeddings)accuracyaccuracy_score(test_labels,predictions)f1f1_score(test_labels,predictions,averageweighted)return{accuracy:accuracy,f1:f1}关键要点MTEB 是 Embedding 模型的权威评估基准不同任务类型反映 Embedding 的不同能力维度中文场景推荐使用 C-MTEB 进行评估模型选型与实践应用选型决策框架选型考虑因素 ├── 语言支持 │ ├── 中文为主 → BGE-large-zh, Qwen-Embedding │ ├── 英文为主 → OpenAI-3-large, Cohere │ └── 多语言 → BGE-M3, Cohere-v4 │ ├── 使用方式 │ ├── 本地部署 → BGE, Sentence-BERT │ ├── API 调用 → OpenAI, Cohere │ └── 离线处理 → 本地模型 │ ├── 性能需求 │ ├── 高精度 → 大维度模型 (1024) │ ├── 高效率 → 小维度模型 (512) │ ├── 平衡 → 中等维度 (768) │ └── 成本考量 ├── 免费 → 开源模型 ├── 低成本 → 轻量模型 └── 高预算 → 商业 APIRAG 应用最佳实践classRAGEmbeddingPipeline: RAG 系统中的 Embedding 应用 关键步骤 1. 文档 Embedding 生成 2. 向量数据库存储 3. Query Embedding 与检索 4. 重排序优化 def__init__(self,model_nameBAAI/bge-large-zh-v1.5):self.embed_modelSentenceTransformer(model_name)self.vector_dbVectorDB()# 如 FAISS, Milvusdefindex_documents(self,documents:list):索引文档# 批量编码embeddingsself.embed_model.encode(documents,batch_size32,show_progress_barTrue)# 存入向量数据库self.vector_db.add(documents,embeddings)defretrieve(self,query:str,top_k:int10)-list:检索相关文档# 编码查询query_embeddingself.embed_model.encode(query)# 向量检索resultsself.vector_db.search(query_embedding,top_k)# 可选重排序rerankedself._rerank(query,results)returnrerankeddef_rerank(self,query:str,candidates:list)-list:使用重排序模型优化结果# Cross-Encoder 重排序精度更高rerankerSentenceTransformer(cross-encoder/ms-marco-MiniLM-L-6-v2)pairs[(query,doc)fordocincandidates]scoresreranker.predict(pairs)# 按分数排序rankedsorted(zip(candidates,scores),keylambdax:-x[1])return[docfordoc,scoreinranked]搜索应用实践classSemanticSearch: 语义搜索引擎实现 区别于关键词搜索 - 支持语义匹配而非字面匹配 - 可处理同义词、近义表达 def__init__(self,model_nameBAAI/bge-large-zh-v1.5):self.modelSentenceTransformer(model_name)self.indexNoneself.documents[]defbuild_index(self,documents:list):构建搜索索引self.documentsdocuments embeddingsself.model.encode(documents)# 使用 FAISS 构建索引importfaiss dimensionembeddings.shape[1]self.indexfaiss.IndexFlatIP(dimension)# 内积索引self.index.add(embeddings.astype(float32))defsearch(self,query:str,top_k:int5)-list:语义搜索query_embeddingself.model.encode(query)# FAISS 搜索distances,indicesself.index.search(query_embedding.reshape(1,-1).astype(float32),top_k)results[(self.documents[idx],distances[0][i])fori,idxinenumerate(indices[0])]returnresults效果评估在不同应用场景下的模型效果对比应用场景推荐模型效果指标中文 RAGBGE-large-zhRetrieval NDCG10: 68.5%英文搜索OpenAI-3-largeRetrieval NDCG10: 64.2%多语言检索BGE-M3Cross-lingual: 62.8%文本分类Sentence-BERTAccuracy: 85%总结核心要点回顾向量表示原理Embedding 将文本转换为向量语义关系转化为空间距离余弦相似度是核心度量主流模型选择BERT 系列支持上下文表示BGE 是中文最优商业 API 提供高质量服务MTEB 评估体系8 大任务类别全面评估 Embedding 能力C-MTEB 针对中文场景选型决策框架根据语言、使用方式、性能需求、成本综合考量最佳实践建议中文应用首选 BGE开源、高质量、持续优化商业场景考虑 APIOpenAI、Cohere 提供稳定服务RAG 系统结合重排序Embedding Cross-Encoder 提升精度本地评估模型性能使用 MTEB 验证选型决策扩展阅读MTEB Benchmark 官方文档BGE 模型技术报告Sentence Transformers 文档参考资料MTEB — BGE documentationMTEB: Massive Text Embedding Benchmark - HuggingFaceRecent advances in text embedding: A Comprehensive ReviewBest Embedding Models 2025: MTEB Scores Leaderboard
Embedding 模型深度解析:文本嵌入技术原理与 MTEB 评估体系
发布时间:2026/5/28 0:22:54
Embedding 模型深度解析文本嵌入技术原理与 MTEB 评估体系摘要本文深入解析文本 Embedding 模型的技术原理从基础概念到主流模型架构全面探讨 MTEB 评估体系的设计与应用。读者将理解 Embedding 如何将文本转换为向量表示掌握模型选型策略与评估方法。引言背景介绍文本 Embedding嵌入是自然语言处理的核心技术它将离散的文本转换为连续的向量表示使得文本之间的语义关系可以在向量空间中计算。从早期的 Word2Vec 到现代的 BGE、Cohere 等模型Embedding 技术已成为 RAG、搜索、推荐等应用的基础设施。问题陈述Embedding 模型的核心原理是什么如何评估不同模型的性能表现如何在实际应用中选择合适的 Embedding 模型文章结构预览本文将从以下方面展开Embedding 的基础概念与数学原理主流 Embedding 模型架构解析MTEB 评估体系详解模型选型与实践应用Embedding 基础概念与数学原理什么是文本 Embedding文本 Embedding 是将文本映射到高维向量空间的过程输入: 人工智能正在改变世界 输出: [0.23, -0.45, 0.67, ..., 0.12] (768维向量)核心思想语义相近的文本向量距离接近语义无关的文本向量距离较远数学基础向量空间模型相似度计算Embedding 的核心应用是计算文本相似度defcosine_similarity(vec_a:np.ndarray,vec_b:np.ndarray)-float: 余弦相似度 - 最常用的 Embedding 相似度度量 公式: cos(A, B) (A · B) / (||A|| * ||B||) 范围: [-1, 1] - 1: 完全相似 - 0: 无关 - -1: 完全相反 dot_productnp.dot(vec_a,vec_b)norm_anp.linalg.norm(vec_a)norm_bnp.linalg.norm(vec_b)returndot_product/(norm_a*norm_b)# 示例embedding1model.encode(人工智能)embedding2model.encode(机器学习)embedding3model.encode(天气预报)sim1cosine_similarity(embedding1,embedding2)# 0.85 (语义相近)sim2cosine_similarity(embedding1,embedding3)# 0.15 (语义无关)距离度量对比度量方式公式特点适用场景余弦相似度cos(A,B)不受向量长度影响文本语义相似欧氏距离A-B曼哈顿距离ΣAi-Bi点积A·B计算最快已归一化向量Embedding 的维度选择# 不同模型的典型维度dimensions{Word2Vec:300,# 传统词向量BERT-base:768,# Transformer 基础维度BERT-large:1024,# 大模型维度BGE-large:1024,# 中文优化模型Cohere-v3:1024,# 商业 API 模型OpenAI-3-large:3072,# 大维度高精度}维度权衡高维度表达能力更强但计算成本高低维度效率高但可能损失语义细节实际选择根据任务需求和计算资源平衡关键要点Embedding 将文本映射为向量语义关系转化为空间距离余弦相似度是最常用的度量方式维度选择需要在表达能力和计算效率间平衡主流 Embedding 模型架构解析模型演进历程时代代表模型核心技术主要突破2013Word2VecSkip-gram/CBOW静态词向量2018BERTTransformer上下文动态表示2021Sentence-BERTSiamese Network句子级 Embedding2023BGEContrastive Learning中文优化2024Cohere-v4多任务训练商业 APIBERT 系列 Embedding架构原理BERT 作为 Embedding 模型的基本原理classBertEmbedding: BERT Embedding 提取方式 三种常见策略 1. CLS Token: 使用第一个 token 的输出 2. Mean Pooling: 所有 token 输出的平均 3. Max Pooling: 所有 token 输出的最大值 def__init__(self,model_namebert-base-chinese):self.modelBertModel.from_pretrained(model_name)defencode_cls(self,text:str)-np.ndarray:CLS Token 方式inputsself.tokenize(text)outputsself.model(**inputs)cls_embeddingoutputs.last_hidden_state[0,0,:]# 第一个 tokenreturncls_embedding.numpy()defencode_mean_pooling(self,text:str)-np.ndarray:Mean Pooling 方式推荐inputsself.tokenize(text)outputsself.model(**inputs)# 考虑 attention mask忽略 paddingtoken_embeddingsoutputs.last_hidden_state attention_maskinputs[attention_mask]mean_embeddingtorch.sum(token_embeddings*attention_mask.unsqueeze(-1),dim1)/torch.sum(attention_mask,dim1,keepdimTrue)returnmean_embedding.numpy()[0]Sentence-BERT 改进SBERT 通过 Siamese 结构改进 Embedding 质量classSentenceBERT: Sentence-BERT 架构 核心改进 - 使用孪生网络结构 - 对比学习训练目标 - 直接输出句子级表示 def__init__(self,model_namesentence-transformers/paraphrase-multilingual):self.modelSentenceTransformer(model_name)defencode_batch(self,sentences:list)-np.ndarray:批量编码高效处理embeddingsself.model.encode(sentences)returnembeddingsdefsimilarity_matrix(self,sentences:list)-np.ndarray:计算句子间的相似度矩阵embeddingsself.encode_batch(sentences)similaritycosine_similarity(embeddings,embeddings)returnsimilarityBGE 模型系列BGEBAAI General Embedding是中文领域表现最优的 Embedding 模型BGE 模型家族模型维度特点MTEB 排名BGE-small-zh512轻量高效中文任务优秀BGE-base-zh768平衡性能开源首选BGE-large-zh1024高精度中文最优BGE-M31024多语言全球领先BGE 核心技术 BGE 的核心技术 1. 对比学习训练Contrastive Learning - 正样本语义相似的文本对 - 负样本语义不同的文本对 2. 批内负采样In-batch Negatives - 利用 batch 内其他样本作为负样本 - 提高训练效率 3. 多任务联合训练 - 检索、分类、聚类等任务统一优化 defcontrastive_loss(pos_embeddings,neg_embeddings,temperature0.05): InfoNCE 对比学习损失函数 核心拉近正样本推远负样本 pos_simtorch.matmul(pos_embeddings,pos_embeddings.T)/temperature neg_simtorch.matmul(pos_embeddings,neg_embeddings.T)/temperature logitstorch.cat([pos_sim,neg_sim],dim-1)labelstorch.arange(len(pos_embeddings))losstorch.nn.functional.cross_entropy(logits,labels)returnlossBGE 使用实践fromsentence_transformersimportSentenceTransformer# 加载模型modelSentenceTransformer(BAAI/bge-large-zh-v1.5)# 编码中文文本texts[人工智能技术的快速发展,机器学习算法的应用研究,天气预报预测模型]embeddingsmodel.encode(texts)# 计算相似度fromsklearn.metrics.pairwiseimportcosine_similarity sim_matrixcosine_similarity(embeddings)print(sim_matrix)# 输出[[1.00, 0.82, 0.15],# [0.82, 1.00, 0.18],# [0.15, 0.18, 1.00]]商业 API EmbeddingCohere Embeddingimportcohere cocohere.Client(your-api-key)# Cohere embed-v4 特点# - 多语言支持# - 高质量向量表示# - 支持 truncate 参数控制维度responseco.embed(texts[人工智能技术,机器学习算法],modelembed-v4,input_typesearch_document,# 文档索引场景truncateEND# 截断方式)embeddingsresponse.embeddingsOpenAI EmbeddingfromopenaiimportOpenAI clientOpenAI()# OpenAI text-embedding-3 特点# - 支持 dimensions 参数降维# - 高 MTEB 排名# - 中文支持较弱responseclient.embeddings.create(input[人工智能技术,机器学习算法],modeltext-embedding-3-large,dimensions1024# 可选降维)embeddings[item.embeddingforiteminresponse.data]关键要点BERT 系列基于 Transformer支持上下文动态表示BGE中文最优选择对比学习训练商业 API高质量但成本高选型需考虑语言支持MTEB 评估体系详解什么是 MTEBMTEBMassive Text Embedding Benchmark是目前最权威的 Embedding 模型评估体系覆盖范围8 大任务类别56 数据集多语言支持 112 语言开源评估可本地运行评估流程MTEB 任务类别任务类别评估内容典型数据集Retrieval信息检索能力MSMARCO, BEIRClassification文本分类AmazonReviews, BankClustering文本聚类ArxivClusteringReranking重排序AskUbuntuDuplicatesSTS (Semantic Textual Similarity)语义相似度STS BenchmarkPair Classification对分类QuoraDuplicatesSummarization摘要聚类SummEvalInstruction Retrieval指令检索Retrieval-20QMTEB 评估流程importmtebfromsentence_transformersimportSentenceTransformer# 创建评估任务tasksmteb.get_tasks(tasks[Retrieval,Classification,STS])# 加载模型modelSentenceTransformer(BAAI/bge-large-zh-v1.5)# 运行评估evaluationmteb.MTEB(taskstasks)resultsevaluation.run(model)# 查看结果fortask_resultinresults:print(fTask:{task_result.task_name})print(fScore:{task_result.get_score()})MTEB Leaderboard 排名截至 2025 年的 Top Embedding 模型排名模型Overall ScoreRetrievalClassification特点Cohere embed-v465.265.070.5商业 API多语言OpenAI text-3-large64.664.269.8API可降维BGE-M363.062.868.5开源多语言Gemini Embedding 266.165.571.2Google APIQwen3-Embedding62.561.867.5开源中文优中文 MTEBC-MTEB C-MTEB 是针对中文文本的评估基准 包含 - 中文检索任务 - 中文分类任务 - 中文相似度任务 # 运行中文评估tasksmteb.get_tasks(tasks[CMTEBRetrieval,CMTEBClassification])resultsevaluation.run(model)评估指标详解Retrieval 任务指标 检索任务的核心指标 - NDCGk (Normalized Discounted Cumulative Gain) 考虑排序位置的加权评分 - Recallk 前 k 个结果中正确文档的召回率 - MRR (Mean Reciprocal Rank) 第一个正确结果的位置倒数均值 defcompute_ndcg_at_k(retrieved_ids,relevant_ids,k10):计算 NDCGkdcg0fori,doc_idinenumerate(retrieved_ids[:k]):ifdoc_idinrelevant_ids:dcg1/np.log2(i2)# 理想 DCGideal_dcgsum(1/np.log2(i2)foriinrange(min(k,len(relevant_ids))))returndcg/ideal_dcgifideal_dcg0else0Classification 任务指标 分类任务的评估 - Accuracy 准确率 - F1 Score 精确率和召回率的调和平均 - 使用 Embedding Logistic Regression/KNN 进行分类 fromsklearn.linear_modelimportLogisticRegressionfromsklearn.metricsimportaccuracy_score,f1_scoredefevaluate_classification(train_embeddings,train_labels,test_embeddings,test_labels):评估 Embedding 的分类能力clfLogisticRegression()clf.fit(train_embeddings,train_labels)predictionsclf.predict(test_embeddings)accuracyaccuracy_score(test_labels,predictions)f1f1_score(test_labels,predictions,averageweighted)return{accuracy:accuracy,f1:f1}关键要点MTEB 是 Embedding 模型的权威评估基准不同任务类型反映 Embedding 的不同能力维度中文场景推荐使用 C-MTEB 进行评估模型选型与实践应用选型决策框架选型考虑因素 ├── 语言支持 │ ├── 中文为主 → BGE-large-zh, Qwen-Embedding │ ├── 英文为主 → OpenAI-3-large, Cohere │ └── 多语言 → BGE-M3, Cohere-v4 │ ├── 使用方式 │ ├── 本地部署 → BGE, Sentence-BERT │ ├── API 调用 → OpenAI, Cohere │ └── 离线处理 → 本地模型 │ ├── 性能需求 │ ├── 高精度 → 大维度模型 (1024) │ ├── 高效率 → 小维度模型 (512) │ ├── 平衡 → 中等维度 (768) │ └── 成本考量 ├── 免费 → 开源模型 ├── 低成本 → 轻量模型 └── 高预算 → 商业 APIRAG 应用最佳实践classRAGEmbeddingPipeline: RAG 系统中的 Embedding 应用 关键步骤 1. 文档 Embedding 生成 2. 向量数据库存储 3. Query Embedding 与检索 4. 重排序优化 def__init__(self,model_nameBAAI/bge-large-zh-v1.5):self.embed_modelSentenceTransformer(model_name)self.vector_dbVectorDB()# 如 FAISS, Milvusdefindex_documents(self,documents:list):索引文档# 批量编码embeddingsself.embed_model.encode(documents,batch_size32,show_progress_barTrue)# 存入向量数据库self.vector_db.add(documents,embeddings)defretrieve(self,query:str,top_k:int10)-list:检索相关文档# 编码查询query_embeddingself.embed_model.encode(query)# 向量检索resultsself.vector_db.search(query_embedding,top_k)# 可选重排序rerankedself._rerank(query,results)returnrerankeddef_rerank(self,query:str,candidates:list)-list:使用重排序模型优化结果# Cross-Encoder 重排序精度更高rerankerSentenceTransformer(cross-encoder/ms-marco-MiniLM-L-6-v2)pairs[(query,doc)fordocincandidates]scoresreranker.predict(pairs)# 按分数排序rankedsorted(zip(candidates,scores),keylambdax:-x[1])return[docfordoc,scoreinranked]搜索应用实践classSemanticSearch: 语义搜索引擎实现 区别于关键词搜索 - 支持语义匹配而非字面匹配 - 可处理同义词、近义表达 def__init__(self,model_nameBAAI/bge-large-zh-v1.5):self.modelSentenceTransformer(model_name)self.indexNoneself.documents[]defbuild_index(self,documents:list):构建搜索索引self.documentsdocuments embeddingsself.model.encode(documents)# 使用 FAISS 构建索引importfaiss dimensionembeddings.shape[1]self.indexfaiss.IndexFlatIP(dimension)# 内积索引self.index.add(embeddings.astype(float32))defsearch(self,query:str,top_k:int5)-list:语义搜索query_embeddingself.model.encode(query)# FAISS 搜索distances,indicesself.index.search(query_embedding.reshape(1,-1).astype(float32),top_k)results[(self.documents[idx],distances[0][i])fori,idxinenumerate(indices[0])]returnresults效果评估在不同应用场景下的模型效果对比应用场景推荐模型效果指标中文 RAGBGE-large-zhRetrieval NDCG10: 68.5%英文搜索OpenAI-3-largeRetrieval NDCG10: 64.2%多语言检索BGE-M3Cross-lingual: 62.8%文本分类Sentence-BERTAccuracy: 85%总结核心要点回顾向量表示原理Embedding 将文本转换为向量语义关系转化为空间距离余弦相似度是核心度量主流模型选择BERT 系列支持上下文表示BGE 是中文最优商业 API 提供高质量服务MTEB 评估体系8 大任务类别全面评估 Embedding 能力C-MTEB 针对中文场景选型决策框架根据语言、使用方式、性能需求、成本综合考量最佳实践建议中文应用首选 BGE开源、高质量、持续优化商业场景考虑 APIOpenAI、Cohere 提供稳定服务RAG 系统结合重排序Embedding Cross-Encoder 提升精度本地评估模型性能使用 MTEB 验证选型决策扩展阅读MTEB Benchmark 官方文档BGE 模型技术报告Sentence Transformers 文档参考资料MTEB — BGE documentationMTEB: Massive Text Embedding Benchmark - HuggingFaceRecent advances in text embedding: A Comprehensive ReviewBest Embedding Models 2025: MTEB Scores Leaderboard