嵌入与向量检索
嵌入(embedding)把一段文本转化为一串数字(一个向量),用以捕捉它的含义。含义相近的文本会得到彼此靠近的向量——即使它们没有任何相同的词。这正是 语义检索 和 RAG 背后的诀窍。
直觉
想象每个句子都被放置为一个巨大多维空间中的一个点,其排布方式使得含义相近的点彼此靠近。"我怎么重置密码?"会落在"我忘了登录信息"附近,离"罗马最好的披萨"很远。
语义检索 vs 关键词检索
- 关键词检索匹配字面上的词("password" 找到 "password")。
- 语义检索匹配含义——"我登录不了"能找到密码重置文档,即使其中没有 "password" 这个词。
最佳效果往往来自结合两者(混合检索)。
向量检索如何运作
- 嵌入你的文档(通常先切分成块)并把向量存入向量数据库。
- 查询时,嵌入查询。
- 找出最近的那些向量(按余弦相似度 / 距离)。
- 返回这些块——通常用于喂给 RAG。
实用提示
- 切分很关键。 太大 = 匹配噪声多;太小 = 丢失上下文。要调优。
- 始终使用同一个嵌入模型——来自不同模型的向量不可比较。
- 元数据 + 过滤器(日期、来源、类型)能让检索精确得多。
- 并非总需要向量数据库——对小语料库,简单的内存检索就够了。