嵌入模型选型

嵌入模型选型2026:向量化的艺术与科学

引言 嵌入模型是RAG系统、语义搜索和推荐系统的基石。虽然不如生成模型那样引人注目,但嵌入模型的质量直接决定了上游应用的效果上限。2026年,嵌入模型在多语言、长文本和领域特化方面取得了显著进步。本文将为你提供全面的选型指南。 为什么嵌入模型很重要 嵌入模型将文本转化为高维向量,使得语义相似的文本在向量空间中距离更近。这个看似简单的操作是以下应用的核心: RAG系统:通过向量检索找到相关文档 语义搜索:理解用户查询的真实意图 推荐系统:基于内容相似度推荐 聚类分析:发现文本集合中的主题结构 去重与匹配:识别语义重复内容 嵌入模型的质量提升10%,可能带来RAG系统端到端效果提升20-30%。 主流嵌入模型 商业API OpenAI text-embedding-4-large — 3072维,综合最强 Voyage AI voyage-3 — 2048维,检索特化 Cohere Embed v4 — 1536维,多语言强 Google text-gecko-3 — 768维,速度快 开源模型 BGE-large-zh-v2 (智源) — 1024维,中文最强 E5-mistral-7b (微软) — 4096维,英文最强 GTE-large-zh (阿里) — 1024维,中文优秀 Jina embeddings v3 (Jina AI) — 1024维,长文本强 Nomic embed v2 (Nomic) — 768维,开源可复现 BGE-M3 (智源) — 1024维,多语言+多功能 核心基准对比 MTEB 2026 MTEB(Massive Text Embedding Benchmark)是最权威的嵌入模型评估基准: 英文检索 模型 维度 得分 特点 voyage-3 2048 72.8 检索之王 text-embedding-4-large 3072 71.5 综合最佳 E5-mistral-7b 4096 70.3 开源英文最佳 Cohere Embed v4 1536 69.7 多语言均衡 Jina embeddings v3 1024 68.5 长文本强 Nomic embed v2 768 66.2 轻量高效 中文检索 模型 维度 得分 特点 BGE-large-zh-v2 1024 74.5 中文之王 GTE-large-zh 1024 72.8 中文优秀 BGE-M3 1024 71.3 多语言兼中文 text-embedding-4-large 3072 70.2 商业中文最佳 Cohere Embed v4 1536 68.7 长文本检索 在处理长文档(>8K tokens)的检索任务上: ...

2026-07-02 · 2 min · 285 words · 硅基 AGI 探索者
RAG分块策略对比

RAG分块策略对比:找到知识切分的最优解

引言 RAG系统的第一步是将文档分块(Chunking)。这个看似简单的步骤,实际上对RAG质量有巨大影响——分块太大,检索不精确;分块太小,丢失上下文。 2026年,分块策略已经从简单的"按字数切分"发展出多种智能策略。本文将系统对比这些策略。 一、为什么分块很重要 1.1 检索精度 文档: "Python是一种解释型语言。它由Guido van Rossum于1991年创建。Python强调代码可读性..." 分块A(太大大): 整个文档作为一个块 → 检索时可能返回很多不相关的内容 分块B(太小): "Python是一种解释型语言。" → 缺少上下文,不知道在说什么 分块C(合适): "Python是一种解释型语言。它由Guido van Rossum于1991年创建。" → 信息完整且精确 1.2 上下文完整性 好的分块应该保持语义完整性——一个块应该表达一个完整的意思。 1.3 检索效率 块的大小直接影响向量索引的大小和检索速度。 二、分块策略分类 2.1 固定大小分块 class FixedSizeChunker: def __init__(self, chunk_size=500, overlap=50): self.chunk_size = chunk_size # 字符数或token数 self.overlap = overlap def chunk(self, text): chunks = [] start = 0 while start < len(text): end = start + self.chunk_size chunk = text[start:end] chunks.append(chunk) start = end - self.overlap # 重叠部分 return chunks 优势:简单、快速、可预测。 劣势:可能在句子中间截断,破坏语义。 最佳实践:设置50-100 token的重叠,减少截断影响。 2.2 句子分块 class SentenceChunker: def __init__(self, max_sentences=5, max_tokens=500): self.max_sentences = max_sentences self.max_tokens = max_tokens def chunk(self, text): sentences = self.split_sentences(text) chunks = [] current_chunk = [] current_tokens = 0 for sentence in sentences: sent_tokens = self.count_tokens(sentence) if current_tokens + sent_tokens > self.max_tokens or \ len(current_chunk) >= self.max_sentences: if current_chunk: chunks.append(" ".join(current_chunk)) current_chunk = [sentence] current_tokens = sent_tokens else: current_chunk.append(sentence) current_tokens += sent_tokens if current_chunk: chunks.append(" ".join(current_chunk)) return chunks 优势:保持句子完整,语义更好。 劣势:块大小不均匀。 ...

2026-07-02 · 4 min · 767 words · 硅基 AGI 探索者
混合RAG图加向量检索

混合RAG:图+向量检索的协同威力

引言 向量检索擅长语义匹配——“这段文字和我的问题有多相似”。但它不擅长关系推理——“A的上级的上级是谁”。知识图谱检索擅长关系推理,但不擅长模糊语义匹配。 2026年,混合RAG——将图检索和向量检索结合——已经成为处理复杂知识问答的最佳方案。本文将深入探讨这种混合架构。 一、为什么需要混合检索 1.1 向量检索的局限 问题: "爱因斯坦的博士导师是谁?" 向量检索: 搜索"爱因斯坦 博士 导师" → 可能找到: "爱因斯坦在苏黎世联邦理工学院学习" (语义相关但缺关键信息) 可能找不到: "Alfred Kleiner是爱因斯坦的博士论文导师" (语义距离较远) 1.2 图检索的局限 问题: "量子力学的哲学意义是什么?" 图检索: 需要遍历"量子力学"→"哲学意义"的边 → 但"哲学意义"是一个抽象概念,知识图谱中可能没有对应的节点 1.3 混合的优势 问题: "爱因斯坦的博士导师的研究领域是什么?" 混合检索: 1. 向量检索: "爱因斯坦 博士 导师" → 找到相关文档 2. 实体识别: 识别出"Alfred Kleiner" 3. 图检索: 查询"Alfred Kleiner" → "研究领域" → "实验物理学" 4. 向量检索: "Alfred Kleiner 实验物理学" → 找到详细描述 5. 综合答案: "爱因斯坦的博士导师Alfred Kleiner的研究领域是实验物理学..." 二、混合RAG架构 2.1 整体架构 用户问题 ↓ ┌─────────────────┐ │ 查询分析器 │ → 识别实体、关系、意图 └────────┬────────┘ ↓ ┌─────────────────────────────────────┐ │ 混合检索引擎 │ ├──────────┬──────────┬───────────────┤ │ 向量检索 │ 图谱检索 │ 关键词检索 │ └──────────┴──────────┴───────────────┘ ↓ ┌─────────────────┐ │ 结果融合器 │ → 排序、去重、互补 └────────┬────────┘ ↓ ┌─────────────────┐ │ 推理生成器 │ → 基于融合结果生成答案 └─────────────────┘ 2.2 查询分析器 class QueryAnalyzer: async def analyze(self, question): """分析查询,提取检索线索""" # 1. 实体识别 entities = await self.ner.extract(question) # 2. 关系识别 relations = await self.relation_extractor.extract(question, entities) # 3. 意图识别 intent = await self.intent_classifier.classify(question) # 4. 生成不同检索策略的查询 return { "entities": entities, "relations": relations, "intent": intent, "vector_query": await self.generate_vector_query(question, entities), "graph_query": self.generate_graph_query(entities, relations), "keyword_query": await self.generate_keyword_query(question) } 2.3 图谱构建 class KnowledgeGraphBuilder: async def build_from_documents(self, documents): """从文档构建知识图谱""" for doc in documents: # 1. 实体抽取 entities = await self.entity_extractor.extract(doc.text) # 2. 关系抽取 relations = await self.relation_extractor.extract(doc.text, entities) # 3. 添加到图谱 for entity in entities: await self.graph.add_node( id=entity.id, label=entity.text, type=entity.type, properties={"source": doc.id, "embedding": entity.embedding} ) for relation in relations: await self.graph.add_edge( source=relation.subject, target=relation.object, label=relation.predicate, properties={"confidence": relation.confidence} ) # 4. 同时添加到向量库 await self.vector_store.add( id=doc.id, text=doc.text, embedding=doc.embedding, metadata={"entities": [e.id for e in entities]} ) 2.4 混合检索引擎 class HybridRetrievalEngine: def __init__(self, vector_store, graph_store, keyword_index): self.vector_store = vector_store self.graph_store = graph_store self.keyword_index = keyword_index async def retrieve(self, query_analysis, top_k=10): # 1. 并行执行三种检索 vector_task = self.vector_search(query_analysis["vector_query"], top_k*2) graph_task = self.graph_search(query_analysis) keyword_task = self.keyword_search(query_analysis["keyword_query"], top_k*2) vector_results, graph_results, keyword_results = await asyncio.gather( vector_task, graph_task, keyword_task ) # 2. 融合结果 fused = self.fuse_results(vector_results, graph_results, keyword_results) # 3. 重排 reranked = await self.rerank(fused, query_analysis) return reranked[:top_k] async def graph_search(self, query_analysis): """图谱检索""" results = [] # 1. 实体匹配:在图谱中找到查询实体的对应节点 for entity in query_analysis["entities"]: matched_nodes = await self.graph_store.find_nodes( label=entity.text, fuzzy=True ) # 2. 关系遍历:沿着关系边扩展 for node in matched_nodes: for relation in query_analysis["relations"]: neighbors = await self.graph_store.traverse( start=node, edge_label=relation.predicate, max_depth=2 ) results.extend(neighbors) # 3. 获取关联文档 for result in results: if result.has_property("source"): doc = await self.document_store.get(result.source) result.content = doc.text return results def fuse_results(self, vector_results, graph_results, keyword_results): """融合三种检索结果""" fused = {} # 为每种检索结果分配权重 weights = {"vector": 0.4, "graph": 0.4, "keyword": 0.2} for result_type, results, weight in [ ("vector", vector_results, weights["vector"]), ("graph", graph_results, weights["graph"]), ("keyword", keyword_results, weights["keyword"]) ]: for rank, result in enumerate(results): doc_id = result.id if doc_id not in fused: fused[doc_id] = { "result": result, "score": 0, "sources": [] } # 倒数排名融合,加上权重 fused[doc_id]["score"] += weight * (1 / (60 + rank)) fused[doc_id]["sources"].append(result_type) # 按融合分数排序 sorted_results = sorted(fused.values(), key=lambda x: -x["score"]) # 标记同时被多种检索命中的文档(置信度更高) for item in sorted_results: item["multi_source"] = len(item["sources"]) > 1 return [item["result"] for item in sorted_results] 三、GraphRAG模式 3.1 社区检测 将知识图谱划分为社区,每个社区是一组紧密相关的实体: ...

2026-07-02 · 4 min · 794 words · 硅基 AGI 探索者
Embedding模型2026排行:中文检索场景实测

Embedding模型2026排行:中文检索场景实测

为什么Embedding模型决定RAG上限? RAG系统的检索质量 = Embedding模型质量 × 向量库能力 × 检索策略。后两者已经相对成熟,Embedding模型成为拉开差距的关键变量。 一个差的Embedding模型,即使后面Reranker再强也无力回天——因为你根本检索不到相关文档。 测评模型清单 我们选取了2026年主流的10款Embedding模型进行测评: 模型 提供方 维度 参数量 最大长度 部署方式 text-embedding-3-large OpenAI 3072 - 8192 API text-embedding-3-small OpenAI 1536 - 8192 API BGE-large-zh-v1.5 BAAI 1024 326M 512 本地 BGE-M3 BAAI 1024 568M 8192 本地 GTE-large-zh 阿里 1024 326M 512 本地 GTE-Qwen2-7B-Instruct 阿里 3584 7B 32K 本地 Jina-embeddings-v3 Jina AI 1024 570M 8192 本地/API Cohere-embed-v4 Cohere 1024 - 512 API E5-large-v2 Microsoft 1024 335M 512 本地 UAE-large-v1 WhereIsAI 1024 335M 512 本地 测评设置 数据集 数据集 文档数 查询数 特点 C-Pack 100万 5000 中文通用检索基准 MTEB-ZH 10万 1000 中文检索评估集 行业知识库(自建) 5万 500 金融、法律、医疗领域 多跳QA(自建) 1万 200 需要多文档关联 评估指标 # 主指标:NDCG@10 (归一化折损累积增益) # 辅助指标:Recall@5, Recall@10, MRR@10 def evaluate_retrieval(qrels, results, k=10): """计算检索评估指标""" ndcg_scores = [] recall_scores = [] mrr_scores = [] for query_id, retrieved_docs in results.items(): relevant_docs = qrels.get(query_id, {}) # NDCG@k ndcg = compute_ndcg(retrieved_docs[:k], relevant_docs) ndcg_scores.append(ndcg) # Recall@k recall = len(set(retrieved_docs[:k]) & set(relevant_docs)) / len(relevant_docs) recall_scores.append(recall) # MRR@k mrr = compute_mrr(retrieved_docs[:k], relevant_docs) mrr_scores.append(mrr) return { "ndcg@10": np.mean(ndcg_scores), "recall@5": np.mean([compute_recall(r, q, 5) for r, q in zip(results, qrels)]), "recall@10": np.mean(recall_scores), "mrr@10": np.mean(mrr_scores), } 测评结果 总体排名(NDCG@10) 排名 模型 C-Pack MTEB-ZH 行业库 多跳QA 平均分 1 GTE-Qwen2-7B 0.823 0.801 0.782 0.698 0.801 2 text-embedding-3-large 0.815 0.792 0.768 0.671 0.787 3 BGE-M3 0.808 0.785 0.771 0.662 0.782 4 Jina-embeddings-v3 0.801 0.778 0.759 0.658 0.774 5 BGE-large-zh-v1.5 0.792 0.771 0.752 0.641 0.764 6 GTE-large-zh 0.788 0.768 0.748 0.635 0.760 7 Cohere-embed-v4 0.781 0.762 0.741 0.628 0.753 8 E5-large-v2 0.772 0.754 0.732 0.615 0.743 9 text-embedding-3-small 0.761 0.748 0.725 0.608 0.736 10 UAE-large-v1 0.752 0.738 0.718 0.601 0.727 关键发现 1. GTE-Qwen2-7B一骑绝尘 GTE-Qwen2-7B作为首款基于大语言模型(7B参数)的Embedding模型,在长文本理解上优势明显: ...

2026-06-30 · 3 min · 610 words · 硅基 AGI 探索者
embedding model 2026 chinese retrieval benchmark

Embedding 模型 2026 排行:中文检索场景实测

Embedding 模型是 RAG 系统的基石——检索质量的上限由 Embedding 模型决定。2026 年,中文 Embedding 模型迎来了新一轮洗牌。BGE、Qwen Embedding、Cohere 等新老玩家竞争激烈。本文将在 5 个中文检索场景中实测 12 款主流 Embedding 模型,给出最权威的排行。 一、评测设计 参评模型 模型 维度 最大长度 类型 许可证 BGE-M3 1024 8192 开源 MIT BGE-large-zh-v2 1024 512 开源 MIT Qwen3-Embedding-8B 4096 32768 开源 Apache 2.0 Qwen3-Embedding-0.6B 1024 32768 开源 Apache 2.0 GLM-5-Embedding 1024 8192 开源 Apache 2.0 text-embedding-3-large 3072 8191 闭源 OpenAI API Cohere Embed v4 1024 512 闭源 Cohere API Jina Embeddings v3 1024 8192 开源 CC-BY-NC Voyage-3 1024 32000 闭源 Voyage API GTE-Qwen2-7B 3584 32768 开源 Apache 2.0 Stella-1.5B 1536 131072 开源 MIT E5-Mistral-7B 4096 32768 开源 MIT 评测数据集 数据集 说明 样本数 MTEB-zh 中文通用检索 50,000 DuReader 百度真实问答 100,000 CMRC2018 中文阅读理解 20,000 法律检索 中国法律条文 15,000 医学问答 中文医学QA 12,000 评测指标 NDCG@10:归一化折损累积增益(主指标) Recall@5:Top-5 召回率 MRR:平均倒数排名 二、综合排行 排名 模型 综合 NDCG@10 MTEB-zh DuReader CMRC 法律 医学 1 Qwen3-Embedding-8B 85.3 88.2 86.5 83.7 82.1 85.8 2 Voyage-3 83.7 85.3 84.8 82.1 80.5 85.5 3 text-embedding-3-large 82.8 84.5 83.7 81.3 78.8 85.3 4 BGE-M3 81.5 83.2 82.5 80.1 78.3 83.2 5 GTE-Qwen2-7B 81.2 82.8 81.7 79.5 77.8 83.8 6 GLM-5-Embedding 80.3 82.5 81.2 78.8 79.5 79.2 7 Jina Embeddings v3 79.8 81.3 80.5 77.8 76.2 82.8 8 Stella-1.5B 78.5 80.7 79.3 76.5 75.8 79.8 9 E5-Mistral-7B 78.2 80.2 78.8 76.1 75.2 80.3 10 Qwen3-Embedding-0.6B 77.8 79.8 78.5 75.8 74.8 79.8 11 BGE-large-zh-v2 75.3 77.5 76.2 73.5 72.1 76.8 12 Cohere Embed v4 74.8 76.2 75.5 72.8 70.5 78.5 关键发现: ...

2026-06-28 · 3 min · 635 words · 硅基 AGI 探索者
鲁ICP备2026018361号