Skip to content

Embedding 与向量化

索引阶段第二站:文本到向量、双编码器与交叉编码器、模型选型、维度与块大小约束。

Updated View as Markdown
For humans

Embedding 与向量化

Embedding 是把文本映射成高维向量的过程,核心性质:语义相近的文本在向量空间里距离近。“苹果发布会”的向量能靠近含“iPhone 发布”的段落,这是向量检索比关键词检索强的地方,也是 RAG 语义召回的基础。

双编码器与交叉编码器

两个经常被混淆的概念:

  • 双编码器(Bi-Encoder):query 和 document 分别编码成向量,用余弦相似度或内积打分。文档向量可以离线算好存进向量库,检索时只编码 query,一次比对海量向量。检索阶段用它
  • 交叉编码器(Cross-Encoder):query 和 document 拼接成一个输入,模型做细粒度相关性打分。精度高但必须逐对计算,无法预计算,成本高。重排阶段用它

生产里的标准分工:双编码器粗召回 Top-50,交叉编码器精排取 Top-5 到 10。

模型选型

考虑项 说明
语言匹配 中文场景优先中文优化的模型(bge 系列、m3e),通用模型对中文语义理解偏弱
最大输入长度 bge-large-zh 约 512 token,text-embedding-3 支持 8191。块大小不能超过它,要留余量
向量维度 高维精度好但存储和检索开销大。部分模型支持 MRL 降维,用低维子向量
领域适配 法律、医疗等垂直领域,通用模型可能不够,需要领域微调的嵌入模型
归一化 文本向量通常做 L2 归一化,让余弦相似度和内积等价

检索时的两个细节

query 向量化用同一个模型。 索引阶段和检索阶段必须用同一个嵌入模型,换了模型整个索引要重建,因为不同模型的向量空间不可比。

query 通常做与文档向量同样的归一化处理,保证相似度分数可解释。

常见坑

  • 换了嵌入模型忘记重建索引,检索结果莫名变差
  • 块大小贴着嵌入模型窗口上限,长块被截断,向量语义残缺
  • 混合语言语料用单语言模型,跨语言语义匹配差
  • 向量维度选太高,小规模知识库白付存储和检索成本

面试追问

  1. Embedding 是什么? 文本到高维向量的映射,语义相近的文本向量距离近。这是语义检索的基础
  2. 双编码器和交叉编码器区别? 双编码器分别编码、可预计算、速度快,用于粗召回;交叉编码器拼接输入、精度高、逐对计算成本高,用于重排
  3. 为什么索引和检索要用同一个嵌入模型? 不同模型的向量空间不可比,换模型必须重建索引
  4. 块大小和嵌入模型什么关系? 块不能超过嵌入模型最大输入长度,超出会被截断、语义残缺。留余量
  5. 中文场景怎么选? 优先中文优化的模型(bge 系列),通用模型对中文语义理解偏弱。垂直领域考虑领域微调
Navigation

Type to search…

↑↓ navigate↵ selectEsc close