Embedding 是什么
Embedding 把文本映射为定长实数向量,语义相近的文本在这个空间里距离更近。RAG 中它承担两件事:离线把每个切片编码后写入向量库,在线把用户问题编码后做相似度检索。索引侧与查询侧必须使用同一模型、同一版本,度量与归一化方式也要一致,否则相似度数值失去意义。
基本信息
| 维度 | 由模型决定,常见 768 / 1024 / 1536 |
|---|---|
| 距离度量 | 余弦、内积、欧氏,随模型与数据库而定 |
| 一致性要求 | 同模型同版本、同归一化处理、同度量配置 |
| 输入上限 | 多数中文检索模型在 512 token 量级,需按此控制切片长度 |
最小示例
最小示例
vec = embed("如何配置超时") # list[float],长度 = 模型维度
print(len(vec), vec[:3])需要记住的性质
- 向量不是哈希:模型升级后同一段文本的向量会整体改变,旧索引必须重算
- 维度可压缩但不可混用:缩短维度的向量与全维度向量不能在同一个索引列里共存
- 归一化与否影响度量选择:已归一化的向量用内积与余弦等价,可省一次除法
- 相似度绝对值不可跨语料比较:余弦值常集中在 0.6 至 0.95 的窄区间,阈值要在自有数据上校准
- 输入长度有限:超出上限的部分会被截断,长切片尾部的内容实际没有被编码
常见模型量级
| 类型 | 维度示例 | 典型输入上限 |
|---|---|---|
| 中文检索型(BGE 小/中/大) | 512 / 768 / 1024 | 512 token 量级 |
| 多语言多粒度(BGE-M3) | 1024 | 8192 token(模型卡标注) |
| 托管 API(text-embedding-3 系列) | 1536 / 3072,可缩短 | 按官方文档为准 |
| 轻量本地模型 | 384 至 768 | 通常 512 token 以内 |
召回质量由模型与语料的匹配度决定:榜单分数只是参考,最终要用自有问题集与标准答案测召回率。
升级 embedding 模型时必须全量重建向量,并在新旧索引之间用同一评测集对比;混用两个版本的向量不会报错,只会让检索悄悄变差。