向量检索
把一段文本/图片/音频 变成一个高维向量(embedding)。
检索时:把你的查询也变成向量,然后在库里找最相似的那些向量。
核心流程就 4 步:
- 切分(把长文切 chunk)
- 向量化(每个 chunk → embedding)
- 建索引(为了快,用 ANN:HNSW/IVF 等)
- 查询(query → embedding → topK → 返回原文 chunk)
相似度
常用三个 距离/相似度 :
- 余弦相似度 cosine:只看方向,不看长度
- 点积 dot:方向 + 长度都会影响(很多 embedding 会做归一化来等价 cosine)
- L2 欧式距离:几何距离
如果向量都做了 L2 normalize,那么 dot ≈ cosine,用起来最方便也最快。
向量检索为啥需要“近似”(ANN)
如果有 100 万条向量、每条 1536 维,暴力算 topK 会很慢。
Top-K 是一种在生成式模型(如 GPT)中用于选择下一个词(token)的采样方法。它通过限制候选词的数量,优化生成文本的质量和多样性。在生成文本时,模型会为每个可能的词生成一个概率分布,表示每个词出现的可能性。Top-K 的核心思想是只考虑概率排名前 K 的词,其余的词被忽略。然后从这 K 个候选词中随机采样,选择一个作为下一个输出词。
所以向量库通常用 ANN(Approximate Nearest Neighbor):
- HNSW:效果好、通用、建索引较慢但查询快(很多库默认)
- IVF / IVF-PQ:大规模省内存,但需要训练和调参
- Flat:不近似,最准但慢(小规模可用)
可以默认:HNSW 是最常见的起点。
可控参数
向量检索调优基本围绕这些旋钮:
A. chunk 切分
B. topK
C. ANN 参数(以 HNSW 为例)
流程
文本 → 切 chunk → 每个 chunk 做 embedding 向量 → 存进向量库索引 → 查询也做向量 → 找最相似 topK → 返回对应 chunk