暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

全文检索与向量检索选哪个?

alitrack 2024-04-23
1645

原文:Full-text search vs vector search[1]

作者:Laurent Cazanove

翻译:AI

校对:Alitrack

孩子才做选择题,成年人当然是全都要

一句话介绍Meilisearch[2]

闪电般快速的搜索API,可轻松融入您的应用程序、网站和工作流程

信息海洋中的寻找之旅

在今天的信息海洋中,搜索可以是奇迹,也可以是迷宫。全文检索和向量检索使我们能够构建启发用户找到相关产品、内容等的搜索体验。随着我们对搜索的精度和背景知识的追求,出现了一个问题:是否可以平衡全文检索的词汇灵活性与向量检索的语义深度?

让我们一起探索每种解决方案的优缺点,发现现代搜索体验的融合之处。

全文检索

全文检索[3]是指将一些或所有文本查询与数据库中存储的文档进行匹配。相比传统的数据库查询,全文检索提供结果,即使在部分匹配情况下也可以。它允许构建更灵活的搜索界面,用户可以快速找到准确的结果。

实际上,一款高效的全文检索解决方案需要容忍拼写错误、同义词、前缀搜索和模糊匹配等特性。这些特性使得用户可以在有限信息情况下找到他们需要的内容,提高了发现速度。

虽然现代 SQL 和 NoSQL 数据库具有某些全文检索能力,但是它们通常无法与专门设计的搜索数据库相比。对于更深入的探讨,可以阅读关于 Postgres 对全文检索的限制[4] 的文章。

向量检索

向量检索[5]是利用人工智能的搜索方法。它不是寻找与文本查询匹配的文档,而是允许找到具有相似语义含义的文档。这是通过利用大型语言模型(LLMs)提供的文本语义理解来实现的。

LLMs
 可以处理数据库记录并生成向量嵌入—文档语义含义的数值表示。然后将这些嵌入存储在向量数据库中。如其名称所示,向量搜索通过比较相似的向量来工作。

通过执行向量比较,向量搜索有效地实现了语义搜索[6]。尽管它依赖于不同的底层技术,但它也解决了与全文搜索类似的目的:通过改进搜索中的发现方面,增强用户的能力。它特别支持多模态搜索—使用非文本输入进行搜索,如谷歌图片。

比较分析:全文检索 VS 向量检索

全文搜索的工作原理是通过在文档中查找单词。这使得它擅长理解用户查询背后的词汇意图。但是,当它必须处理模糊查询时,就显得力不从心了。文档缺乏对语义的理解,导致它无法理解上下文并做出一般性推断。

总之,全文检索有如下特点:

✅纠正拼写错误 — 例如 reutrn of the jedi

✅处理精准查询 — 例如 an exact product name

✅处理不完整查询 — 例如 return of the j

❌不能处理模糊查询 — 例如 folks fighting with lightsabers

❌不能理解背景 — 例如 winter clothes

相比之下,向量检索通过查找具有相似语义意味的文档来工作。这使得它适合理解用户查询的语义意图。它能够理解同义词和文档描述,并且能够建议相似文档。

总之,向量检索有如下特点

✅处理模糊查询 — 例如 first released star wars movie

✅理解背景 — 例如 winter clothes

✅可以建议相似文档

❌不能处理精准查询

❎需要更多资源

正如我们看到的,无论是哪种解决方案都不是完美的。它们每个都有其优缺,各自适合不同的应用场景。它们相互补充,构建高级搜索体验需要结合两者。

那么,两者可以兼得吗?

混合搜索

混合搜索结合了全文搜索和向量搜索的优势。它建立在全文搜索提供的即时、边输入边搜索的体验之上,同时融入了人工智能搜索提升的发现能力。

像Meilisearch的混合搜索解决方案,它结合了两者的优势,无需妥协。这使得开发者能够使用统一的API处理各种类型的搜索。下面的代码示例展示了如何使用这样的API。

// Hybrid 搜索 with Meilisearch
const results = 
  await client.multiSearch({
    queries: [
      {
        indexUid: 'movies',
        q: 'batman',
        hybrid: {
          embedder: 'default',
          semanticRatio: 0.5
        }
      }
    ]
  });

 

这段代码使用 Meilisearch 客户端在“movies”索引中搜索 `batman` 查询。它使用混合搜索,该设置通过 `hybrid` 参数进行配置。让我们回顾一下 `hybrid` 对象中的字段,并看看它们能实现什么。

Embedder 参数允许选择哪个 embedder 将处理查询(Meilisearch 允许配置多个 embedder[7] for a given index)。

embedder
 字段允许选择哪个嵌入器将处理查询(Meilisearch 允许为给定索引配置多个嵌入器[8])。

semanticRatio
 字段使我们能够平衡来自语义搜索的结果的重要性。更高的值将允许在语义空间[9]中距离更远的文档出现在最终搜索结果中。

sematicRatio
 值含义如下:

✅ Semantic ratio = 0 — 是一个全文检索

✅ Semantic ratio = 1 — 是一个向量检索

✅ 0 < semantic ratio < 1 — 是一个 hybrid 搜索 ✨

随着语义搜索始终会返回一些文档,因此保持良好的平衡以确保整体搜索结果的相关性非常重要。下面的演示允许您搜索电影,并与语义比率一起玩,看看它如何影响结果。

搜索 “green ogre in fairy tale parody(童话恶龙讽刺剧)” (Live demo[10])

结论

作为工程师们将告诉你,问题“What is the best tool for X?”总是:它取决于。每种解决方案都有其优缺,hybrid 搜索合并了全文检索和向量检索的优势。

Hybrid 搜索 是现代搜索方法的融合,它统一了高级搜索能力在一个 API 中。这是一个 modern、灵活的解决方案,适用于今天的搜索应用场景。

引用链接

[1]
 Full-text search vs vector search: https://blog.meilisearch.com/full-text-search-vs-vector-search/
[2]
 Meilisearch: https://github.com/meilisearch/meilisearch
[3]
 全文检索: https://www.meilisearch.com/docs/learn/what_is_meilisearch/overview?utm_campaign=vector-search&utm_source=blog&utm_medium=full-text-vs-vector#features
[4]
 Postgres 对全文检索的限制https://blog.meilisearch.com/postgres-full-text-search-limitations/?utm_campaign=vector-search&utm_source=blog&utm_medium=full-text-vs-vector
[5]
 向量检索: https://www.meilisearch.com/solutions/vector-search?utm_campaign=vector-search&utm_source=blog&utm_medium=full-text-vs-vector
[6]
 语义搜索https://blog.meilisearch.com/what-is-a-vector-database/?utm_campaign=vector-search&utm_source=blog&utm_medium=full-text-vs-vector#what-is-similarity-search
[7]
 配置多个 embedder: https://www.meilisearch.com/docs/learn/experimental/vector_search?utm_campaign=vector-search&utm_source=blog&utm_medium=full-text-vs-vector#generate-vector-embeddings
[8]
 配置多个嵌入器: https://www.meilisearch.com/docs/learn/experimental/vector_search?utm_campaign=vector-search&utm_source=blog&utm_medium=full-text-vs-vector#generate-vector-embeddings
[9]
 语义空间: https://blog.meilisearch.com/what-are-vector-embeddings/?utm_campaign=vector-search&utm_source=blog&utm_medium=full-text-vs-vector#what-is-the-semantic-space
[10]
 Live demo: https://where2watch.meilisearch.com/?utm_campaign=vector-search&utm_source=blog&utm_medium=full-text-vs-vector


文章转载自alitrack,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论