文本嵌入模型:把语义变成向量
本文基于模型知识整理(生成时未联网核对),关键结论建议对照经典文献复核。
一句话定义
嵌入模型把文本映射为固定维度向量,使"语义相近的文本在向量空间中相近"——它由 Transformer 编码器加对比学习训练而来,是语义检索(区别于字面匹配的关键词检索)的表示基础。
为什么重要
检索质量的第一决定因素就是嵌入模型:它决定了"意思相近但用词不同"的查询能否命中(向量检索的核心价值),也决定了领域术语、多语言、长文本这些场景会不会翻车。选型与微调的收益贯穿整个 RAG 生命周期。
前置知识
kp-004(分块决定嵌入的对象)、Transformer 编码器概念。
核心概念
- 双塔结构(bi-encoder):查询与文档各自独立编码为向量,在线只算向量相似度——可离线建索引、检索快,是检索主力的形态。
- 对比学习(contrastive learning):训练时拉近"正对"(查询-相关文档)、推远"负对"(无关文档),InfoNCE 类损失;负样本质量决定模型判别力。
- 指令式嵌入:现代模型(如 E5/BGE 系列)给查询与文档加不同前缀("query:"/"passage:"),区分非对称任务两侧。
- MTEB:大规模文本嵌入基准,横向比较模型在检索/聚类/分类等任务的成绩,是选型第一站。
- 维度与归一化:常见 384–3072 维;检索用通常做 L2 归一化,使内积等价余弦(kp-008)。
原理与机制
从词向量到上下文向量:Word2Vec 时代一词一向量无法处理多义;BERT 类编码器按上下文动态编码,但原生 [CLS] 向量不适合直接做相似度。于是用对比学习微调(SimCSE → 检索强模型谱系):批次内构造正负对,学习"查询-文档"对齐空间。知识截止同理存在:嵌入模型的知识也停在训练时刻,但检索场景主要依赖语义匹配能力而非事实记忆,所以过期问题远小于生成模型。
域内表现为什么重要:通用模型对法律、医疗、代码等领域的术语分布适配差,同义改写识别弱。对策按成本递增:① 换用领域预训练模型(如代码/多语言/中文特化模型);② 对比学习微调(用真实查询-命中对,正对可从点击日志构造,负对需难负例挖掘 hard negatives);③ 领域词表与缩写预处理。
块大小与模型上限的耦合:模型有最大输入 token(常见 512/8k),超长块会被截断——截断尾部语义直接丢失。分块(kp-004)必须配合所选模型的窗口与"语义单块纯度"要求。
图示
查询"如何申请年假" ──► Encoder_Q ──► q ∈ R^768
文档块"年假需提前3天在OA提交" ──► Encoder_D ──► d ∈ R^768
相似度 = cos(q, d) (归一化后内积)
训练: 拉近 (q, d+) 推远 (q, d-) ← InfoNCE 损失
实例或案例
- 选型流程:MTEB 检索榜单初筛 → 用自有数据(100–500 条真实问答对)跑召回率对比 → 看维度/成本/私有化约束定型号。
- 中文企业知识库常选 BGE/E5 中文系列;代码库检索选代码特化模型;多语言站选多语言模型并统一归一化。
- 微调案例:用客服点击日志构造正对、BM25 高位但向量低位的样本做难负例,微调后 MRR 提升可观——负例质量是关键。
常见误区
- 误区一:"榜单第一名就是最优选"。MTEB 与你的语料分布、语言、长度分布可能不一致;必须用自有评测集复筛(kp-016 的思想提前到选型)。
- 误区二:"嵌入模型不会有幻觉问题所以随便用"。它有领域盲区与语言盲区,错配时"相关内容在库里却检索不到",症状与幻觉混在一起更难排查。
- 误区三:"换了嵌入模型只重建向量就行"。嵌入空间整体变化,相似度阈值、去重规则、评测基线全部要重设。
与其他知识点的关系
自测题
- 双塔结构为什么适合检索而不是精确匹配?
答:查询与文档独立编码、向量可离线预计算与索引,在线只需向量运算,代价是两侧无交互、细粒度判别弱于交叉编码器。
- 对比学习里"难负例"为什么重要?
答:随机负例太容易区分,模型学不到细粒度边界;用"BM25 认为相关但语义不符"等难负例才能训练出可用的判别力。
- 换嵌入模型时哪些东西要一起动?
答:全量重嵌入重建索引、相似度阈值与归一化约定、评测基线重跑、(若维度变化)存储与索引参数重配。
延伸阅读
- Karpukhin 等, "Dense Passage Retrieval for Open-Domain Question Answering"(EMNLP 2020)。
- Muennighoff 等, "MTEB: Massive Text Embedding Benchmark"(EACL 2023)。
- BGE / E5 / GTE 系列模型卡与论文。