先这样答
Embedding 是把文本变成一个高维向量的技术:一段话经过一个模型,输出成一串数字,常见的是几百到几千维。关键性质是语义相近的文本,向量在空间里也靠近:「怎么退货」和「退款流程是什么」用词不同,向量距离却很近。这个性质是训练出来的,不是天然有的。
向量检索直接建立在这个性质上。做法是:把文档切成块,逐块算 embedding,存进向量数据库;查询时把问题也变成向量,和库里所有向量算距离(常用余弦相似度),取最近的若干条。检索按「意思」匹配,不依赖关键词完全一致。RAG(检索增强生成)的第一步就是它:先向量检索召回相关内容,再交给大模型阅读作答。
补一层区分:大模型内部的 embedding 层和检索用的 embedding 模型不是一回事。前者是模型输入的第一层,把 token 编号变成向量供后续计算;后者是独立训练的模型,专门把整段文本压成语义向量。能说清这两层,理解就算到位了。
面试官会怎么追问
- 「为什么切块检索,不整篇存?」 整篇文档的向量会被多个主题摊薄,哪个主题都不突出。切块让每块语义集中,召回更准,也顺便控制了喂给模型的上下文长度。块的大小和重叠是检索质量的关键参数。
- 「余弦相似度在算什么?」 两个向量夹角的余弦:接近 1 说明方向一致,接近 0 说明几乎无关。它只看方向不看长度,正好符合「比语义、不比数值大小」的需求。
- 「有了向量检索,还要关键词检索吗?」 常要。关键词检索抓不住同义改写,向量检索对编号、型号、专有名词这类精确匹配反而不可靠。生产系统常见做法是两路都查再合并排序,混合检索比单路稳。
回答的坑
- 把 embedding 说成「关键词的向量化」。它编码的是整段文本的语义,同义不同词的两句话向量很近,这正是它和传统倒排索引的本质区别。
- 把向量检索当精确查找。它通常是近似最近邻搜索,为了速度牺牲一点精度;返回的是「最相似」不是「一定相关」,下游仍需要过滤和重排。
同系列的题
—— 本题完 ——