第18回:AI 搜索基础 – 从关键词搜索到语义搜索的演进

前言

在之前的文章中,我们主要围绕基于关键词的全文搜索进行了介绍。 当用户能够输入合适的关键词时,全文搜索非常有效。 然而,对于”不知道该用什么关键词搜索”或”希望回答概念性问题”这类需求,仅靠关键词搜索有时难以满足。

本文将梳理搜索技术的谱系,并介绍从关键词搜索到语义搜索的演进过程。

目标读者

  • 对 AI 搜索感兴趣,但希望梳理相关概念的用户

  • 正在考虑引入语义搜索的用户

  • 希望了解 Fess AI 相关功能的用户

搜索技术的谱系

搜索技术从简单到高级,形成了如下谱系。

搜索技术的谱系
技术 机制 特点
关键词搜索 将输入词与文档中的词进行匹配 快速且可靠。需要词语匹配
模糊搜索 也匹配拼写相似的词 应对拼写错误
同义词搜索 扩展同义词进行匹配 应对表述差异(手动配置)
语义搜索 基于语义相似度进行匹配 即使词语不匹配也能发现相关文档
混合搜索 关键词 + 语义搜索的组合 兼具两者的优势

关键词搜索的局限性

关键词搜索在很多场景下是有效的,但在以下场景中会暴露出局限性。

词汇不匹配

用户使用的词语与文档中使用的词语不同的情况。

例如:即使用户搜索”想更改工资转账目的地”,但如果公司内部文档中使用的是”工资账户变更手续”这一表述,关键词就可能无法匹配。

可以通过同义词(参见第8回)部分地解决这一问题,但要预先注册所有词汇组合并不现实。

概念性搜索

如”关于远程办公的公司内部规定”这类情况,用户希望按概念而非特定关键词进行搜索。 此时,”在家办公”、”远程工作”、”出勤规则”、”考勤管理”等各种相关文档都可能成为搜索目标。

语义搜索的工作原理

向量表示(Embedding)

语义搜索的基础是将文本转换为”向量(数字数组)”。 该向量是文本”含义”的数学表示。

含义相近的文本在向量空间中会被放置在相近的位置。 例如,”狗”和”宠物”的向量距离较近,而”狗”和”汽车”的向量距离较远。

搜索时的运作方式

  1. 用户输入搜索查询

  2. 将查询转换为向量

  3. 计算与索引中文档向量的相似度

  4. 按相似度从高到低返回文档

由此,即使关键词不完全匹配,也能找到语义上相关的文档。

Fess 中的语义搜索

Fess 可以通过语义搜索插件实现基于向量的搜索。

启用语义搜索

  1. 安装语义搜索插件

  2. 配置 Embedding 模型

  3. 重建索引(对现有文档进行向量化)

Embedding 模型的选择

选择用于将文本转换为向量的模型(Embedding 模型)。

选择时需考虑以下方面:

  • 语言支持:是否能够妥善处理目标语言

  • 精度:向量的质量(语义捕捉的准确性)

  • 速度:转换所需的时间

  • 成本:API 使用费、硬件要求

混合搜索:Rank Fusion

语义搜索虽然强大,但并非万能。 在搜索专有名词或需要精确匹配的场景下,关键词搜索更为合适。

混合搜索的理念

混合搜索同时执行关键词搜索和语义搜索,然后整合结果。

Fess 使用 Rank Fusion(排名融合)来合并不同搜索方法的结果。 具体而言,通过 RRF(Reciprocal Rank Fusion)算法,在两种搜索结果中均排名靠前的文档最终会被排在最前面。

混合搜索的优势

  • 兼顾关键词搜索的”确定性”与语义搜索的”灵活性”

  • 专有名词由关键词搜索覆盖

  • 概念性搜索由语义搜索覆盖

  • 相比仅使用其中一种方法,综合搜索质量得到提升

引入判断标准

语义搜索并不一定需要在所有环境中引入。

应考虑引入的情况

  • 搜索日志中有大量”零命中查询”

  • 用户反馈”不知道该用什么关键词”

  • 希望支持自然语言提问(第19回 RAG 的前提)

  • 希望加强多语言文档的跨语言搜索

暂时不需要的情况

  • 关键词搜索 + 同义词已能获得足够的搜索质量

  • 文档数量较少,且用户了解合适的关键词

  • 计算资源(GPU 或云 API 费用)有限

分阶段引入

  1. 首先通过关键词搜索 + 同义词(第8回)改善质量

  2. 如果零命中仍然较多,则考虑引入语义搜索

  3. 通过混合搜索获得两种方法的优势

总结

本文梳理了从关键词搜索到语义搜索的演进路径。

  • 搜索技术的谱系(关键词 -> 模糊 -> 同义词 -> 语义 -> 混合)

  • 语义搜索的工作原理(向量表示与相似度计算)

  • Fess 中的语义搜索与混合搜索(Rank Fusion)

  • 引入判断标准与分阶段方法

下一篇将在语义搜索的基础上进一步扩展,构建基于 RAG 的 AI 助手。

参考资料