‘更像这个’的演变
在许多搜索场景中,用户并不是从一个空的查询框开始,而是从一个已有的结果开始。用户打开一篇文章并希望找到相关材料。买家查看产品卡片并寻找近似的替代品。支持工程师调查一个事件并希望查看具有相同症状的早期案例。在所有这些情况下,用户已经有一个相关的文档作为起点。这个场景传统上被称为“更像这样”(MLT):一个寻找与选定文档相似文档的功能。在本文中,MLT 指的是从已知文档开始的搜索,而不是从新输入的查询开始。经典的 MLT 方法或类似文档搜索是基于比较文本匹配。现代实现越来越多地使用嵌入:文档的数值表示。搜索索引将嵌入存储为向量,搜索系统可以找到相似的向量表示的文档。简短词汇表 为了避免在整个文章中重复定义,这里是主要术语:术语 文章中的含义 ‘更像这样’(MLT) 搜索与已选择文档相似的文档 嵌入 文本、产品、图像或其他对象的数值表示 嵌入向量 存储在索引中的对象(如文本或产品)的数值表示,通过向量近似查找相似对象 KNN,最近邻搜索 查找最近邻,意味着具有相似向量的对象 ANN,近似最近邻 近似最近邻搜索;它在大型数据集上加速 KNN,而无须扫描每一个向量 RAG,检索增强生成 一种方法,其中搜索系统为生成模型检索上下文 混合搜索 在一个场景中结合全文搜索和向量搜索 重新排名 对于已经检索到的候选项使用更精确的模型或规则进行额外的排序步骤 经典的‘更像这样’做了什么 经典 MLT 是词汇的。它回答了一个简单的问题:哪些文档使用了相似的重要词?这个过程通常是这样的:搜索系统获取源文档。它分析其文本。它选择信息性词条。它以这些词条构建查询。它搜索具有相似词汇的文档。它返回相似文档的列表。在内部,这使用了熟悉的全文搜索机制:TF-IDF 或 BM25、词频、停用词、字段增益和文档频率限制。这就是为什么较旧的 MLT 实现暴露了诸如 min_term_freq、min_doc_freq、max_doc_freq 和 max_query_terms 等参数。这不仅仅是一个界面元素,而是一个完整的搜索机制。MLT 被用于相关文章和产品、重复检测、支持票匹配、法律搜索、专利研究和内部知识库。 词汇方法仍然强大的地方 词汇 MLT 在特定单词、标识符和稳定表达式重要时工作良好。例如:错误代码;产品 SKU;零件编号;功能名称;堆栈跟踪;法律措辞;几乎相同的产品或票据描述。原因在于,确切匹配在这里至关重要。如果两个事件报告包含相同的错误代码或相同的堆栈跟踪,全文搜索会看到直接匹配。例如,当搜索具有代码 ERR_404 的票据时,词汇 MLT 可以迅速找到每一处提及该代码的内容,而向量搜索可能返回描述相似但不完全相同问题的票据。词汇 MLT 还有另一个优点:运行成本低。倒排索引已经在搜索引擎中。分析器已经配置好。排序已经生效。无需单独部署搜索基础设施来支持“查找相似”功能。局限性也很明确。如果两个文档以不同的词描述相同的事物,词汇 MLT 可能会无法连接它们。同义词效果不均匀。改述更难。跨语言相似性通常不可用。例如,内存泄漏和无限堆增长可能描述同一问题,但标准分析器会看到不同的标记。词汇 MLT 有效地找到用匹配或相似措辞撰写的文档。语义搜索在意义匹配而非单词匹配时起作用。 嵌入所改变的内容 使用嵌入——文档的数值表示——改变了比较原理:系统不再比较单词,而是比较向量表示。文档不再仅需作为一组加权词表示。它可以存储为一个密集向量。临近的向量通常对应于在意义上相似的文档,即使它们用不同的词写成。词汇方法通过单词和术语寻找匹配,而嵌入搜索关注文档向量表示的邻近性。第一种方法对于确切匹配(如错误代码和 SKU)是最优的。第二种方法则在语义上找到相近的文档,即使它们措辞不同。这扩大了这种搜索的范围。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡