语义搜索是一种检索方法,它根据查询的潜在含义对结果进行排序和返回,而不是要求查询的字面词语出现在匹配的内容中。传统的关键词搜索,以倒排索引系统以及TF-IDF和BM25排序公式为代表,匹配包含与查询相同词元的文档,而语义搜索则提出了一个不同的问题:哪些存储的项目在概念上与用户意图最接近。搜索“海滩附近经济实惠的住宿地点”应该能浮现出描述为“预算友好的海景房”的列表,即使这两个短语几乎不共享任何词语
工作原理
主导技术将查询和语料库中的每个项目都表示为嵌入,这是一种由训练模型生成的稠密数值向量,使得语义相似的文本产生相近的向量。在查询时,系统嵌入传入的查询,并通过余弦相似度等距离度量检索向量最接近的项目,这一操作由向量数据库使用近似最近邻索引在大规模下执行。这种通用方法,通常称为稠密检索,与之前占主导的稀疏词项匹配方法形成对比
语义搜索的根源早于当前基于嵌入的方法。20世纪80年代末和90年代初的潜在语义分析使用词-文档共现统计的矩阵分解来捕捉某种主题相似性,而基于知识图谱构建的搜索引擎试图对实体和关系进行推理,而非字符串。基于嵌入的版本直到Word2vec以及后来Transformer时代,在更广泛的自然语言处理领域内开发的上下文嵌入模型,使高质量稠密向量能够大规模廉价生产后才成为主导
应用
语义搜索是检索增强生成系统背后的检索机制,其中相关段落从文档存储中拉出并插入到LLM的提示中,以将其输出锚定在特定源材料中并减少幻觉。它也直接用于消费者和企业搜索产品、电子商务产品发现、客户支持分流、法律和医学文档审查以及代码搜索中,只要用户的措辞不太可能精确匹配目标内容的词汇
混合方法与局限性
纯语义搜索在依赖精确字符串的查询上可能表现不佳,例如产品代码、专有名词或罕见技术术语,其中关键词匹配是明确的,而稠密检索可能漂移到仅主题相关但错误的结果上。因此,大多数生产系统使用混合搜索,将基于稀疏关键词的信号(如BM25)与基于稠密嵌入的信号相结合,然后合并或重新排序两个结果集。第二阶段的重排序器,通常是专门训练用于评分查询-文档相关性的较小Transformer模型,通常应用于初始检索传递的顶级候选,以提高精确度
语义搜索的质量在很大程度上取决于嵌入模型的训练数据和领域匹配:一个主要在通用网络文本上训练的模型可能在专业语料库(如判例法或化学文献)中检索不佳,除非通过微调进行适应,或使用领域特定模型嵌入语料库。与任何基于相似性的系统一样,当索引中不存在真正相关的项目时,语义搜索也可能浮现出自信的错误结果,因为它总是返回最接近的匹配,即使该匹配是一个糟糕的拟合