本文用问答的形式,把向量嵌入语义搜索从概念到实操讲一遍。

Q1:语义搜索到底是什么?

语义搜索是用向量嵌入(Embedding)把文本转换成能表示含义的数值向量,再按含义的相似程度查找内容。与关键词搜索不同,它能找到表达方式不同但意思相近的内容,比如用“请假”找到“休假申请”。

Q2:为什么它有效?和关键词搜索有什么不同?

嵌入模型把语义相近的文本映射到相近的向量位置,计算向量之间的相似度就能找到意思相关的内容,这是很多知识库和推荐功能的基础。关键词搜索精确、可解释,但找不到换了说法的内容;语义搜索按意思查找,召回更广,两者结合效果最好。

Q3:哪些场景最值得用?

最典型的是两类:一是用户用各种不同说法提问,关键词搜索找不到;二是对大量文本做聚类或去重。以财务为例,处理“审核报销单约 120 张”这类工作时就很适合尝试。

Q4:具体怎么开始?

建议按这三步起步:

  1. 选择嵌入模型和向量存储方案,了解其语言支持和使用条款。
  2. 整理并切分文档,为每个片段生成向量。
  3. 把向量和原文、元信息一起存储。

熟练之后再养成一个习惯:用测试集评估检索效果,持续调整切分和检索参数。

Q5:有没有现成的模板?

有,下面这个可以直接复制,按需替换方括号内容:

检索效果评估:
测试集:[N] 个问题,每个问题标注应该检索到的片段
指标:
- 前 K 命中率:正确片段出现在前 K 个结果中的比例
- 首位命中率:正确片段排在第一的比例
对比实验:
1. 仅语义搜索
2. 仅关键词搜索
3. 混合搜索(两者结合)
4. 混合搜索 + 重新排序
记录每种方案的指标,选择效果最好且成本可接受的方案。

Q6:什么是向量嵌入?

是把文本转换成一串数字的方法,意思相近的文本对应的数字向量也比较接近。

Q7:需要很大的服务器吗?

小规模资料在普通服务器甚至个人电脑上就可以运行,大规模数据需要专门的向量存储方案。

Q8:嵌入模型可以本地运行吗?

有可以本地部署的开源嵌入模型,适合对数据安全有要求的场景。

举个例子

举个虚构的例子:一位客服主管发现,客服在知识库里搜索“退不了款”时总是找不到“退款失败处理流程”。技术同事为知识库加上了语义搜索,并保留关键词搜索作为补充。之后客服用各种口语化的说法搜索,都能找到对应的流程文档。

补充:最容易踩的坑和用好的诀窍

  • 不评估检索效果。改进:准备测试集,用命中率等指标衡量。
  • 更换嵌入模型后不重建向量。改进:不同模型的向量不能混用,更换模型需要重新生成。
  • 保存每次检索的日志,分析找不到答案的问题。
  • 对中文资料选择中文能力较好的嵌入模型。

下一步学什么

掌握语义搜索之后,可以继续了解个人知识库 RAG 和文档切分整理,它们经常和语义搜索一起使用,组合起来能处理更复杂的任务。

相关阅读