为了账号安全,请及时绑定邮箱和手机立即绑定

揭秘MyScale:混合搜索全面指南

混合搜索是一种强大的技术手段,它结合了多种搜索算法,以提高搜索结果的准确性和相关性。结合全文搜索和向量搜索的优点,混合搜索为用户提供更高效和更全面的搜索体验。

在 MyScaleDB 的 1.6.2 版本中,引入了这个 混合型搜索 功能。让我们来看看它是怎么实现的,以及它为什么会在搜索领域彻底改变游戏规则。

向量搜索和全文搜索技术的结合

在混合搜索系统的向量数据库中,通常会采用两种不同的搜索方式:向量检索全文搜索

  • 基于向量的搜索: 这种方法通过语义相似性来寻找结果,通常利用机器学习模型来理解词语和短语的意义和上下文。它特别适合捕捉文档中细微或概念上相关的查找结果。
  • 全文检索: 这种方法直接匹配文本中的关键词或短语。当查询的措辞至关重要时,这种方法的效果尤其显著。

每种搜索类型都有其特点和适用场合。全文搜索在基本关键词检索和文本匹配方面表现出色,非常适合于需要特定术语的查询。另一方面,基于向量的搜索在跨文档语义匹配和理解深层次含义方面更胜一筹,但在处理短文本查询时可能效果不理想。

混合搜索技术结合了向量搜索和全文搜索的能力,实现了“取长补短”的效果。这使得用户不仅能从精确的关键字匹配中获益,同时也能捕捉更丰富的内容含义,从而获得更全面和有效的搜索体验。

融合算法技术

每种搜索方法——向量搜索和全文搜索——都会产生一组结果,每项结果都附带一个相关性分数。这些分数反映了结果与查询的相关性,根据所用的方法来确定。

一个融合算法有效地结合了这些结果。该算法调整并标准化了向量搜索和全文搜索的得分,使之可以比较,并使无缝结合。这个过程确保向用户展示的结果集成了两种搜索方法的优势,提供既语义相关又文本精准的结果。

在 MyScaleDB 中,混合搜索结合了文本搜索的 BM25 分数(称为词法或“lex”)和向量搜索的距离度量(称为语义或“sem”)。为了实现这种集成目标,MyScaleDB 当前支持两种融合算法:相对得分融合(RSF)和倒序排名融合(RRF)。

相对评分融合(RSF):

相对分数融合(RSF)是一种在混合搜索系统中,有效结合向量搜索和全文搜索结果的方法。该过程包含两个关键步骤:归一化分数并计算加权总和。

得分标准化:

标准化: RSF 首先对向量搜索和全文搜索的原始分数进行标准化处理,即将原始分数转换到同一个尺度上,通常范围为 0 到 1。
最高和最低分数: 每种搜索类型(向量和文本)中的最高分被调整为 1,表示该类型中最相关的结果。相反,最低分被调整为 0,表示该类型中最不相关的结果。
比例调整: 其他所有分数在这个 0 到 1 的范围内进行调整,其比例依据它们在最高分和最低分之间的相对位置。

加权和:

  • 权重分配: 完成归一化后,每个分数会乘以一个特定的权重,该权重体现了该搜索类型(向量或全文)的重要性。
  • 最终分数计算: 每个结果的最终分数是通过将这些加权和归一化的分数相加来确定的,这样就产生了一个平衡且全面的排序结果,整合了这两种搜索方法的优点。

标准化公式如下:

RSF的目标是创建一个统一的排名,该排名结合了向量搜索中的语义相关以及全文搜索中的文本准确。通过调整分数并给予适当的权重,RSF确保最终结果是平衡的,结合了两者的长处,从而为用户提供更全面和精准的结果。

互惠排名融合(RRF)

互反排名融合(RRF)是一种混合搜索系统中结合不同搜索方式(如向量搜索和全文搜索)结果的替代方法。与RSF不同,RRF不需要对分数进行标准化。相反,它使用以下公式,其中k是一个任意常数,用于调整较低排名结果的权重。

RRF的主要优势在于其简洁性。通过省去评分标准化的步骤,RRF可以直接关注排名,从而使不同搜索方法的结果更容易整合,特别是在这些方法的评分标准不一致的情况下。

如何在MyScaleDB中做混合查询

让我们来看看如何在 MyScale 中执行混合搜索。下面显示的 SQL 查询是基于预先导入 MyScale 集群的 Wikipedia 数据集。

首先,在文本列“body”上创建一个全文搜索索引 (FTS),并在向量列“body_vector”上使用余弦距离创建一个 MSTG 向量索引。

    CREATE TABLE wiki_abstract  
    (  
        `id` UInt64,  -- ID 是一个无符号的64位整数
        `body` String,  -- body 是一个字符串
        `title` String,  -- 标题是一个字符串
        `url` String,  -- URL 是一个字符串
        `body_vector` Array(Float32),  -- body_vector 是一个包含浮点数的数组
        VECTOR INDEX body_vec_idx body_vector TYPE MSTG('metric_type=Cosine'),  -- 创建一个向量索引,用于计算余弦距离
        INDEX body_idx body TYPE fts('{"body":{"tokenizer":{"type":"stem", "stop_word_filters":["english"]}}}') GRANULARITY 1,  -- 创建一个索引,用于全文搜索
        CONSTRAINT check_length CHECK length(body_vector) = 1024  -- 确保 body_vector 的长度为1024
    ) ENGINE = MergeTree ORDER BY id;  -- 使用 MergeTree 引擎,并按 ID 排序

在以下 SQL CREATE TABLE 语句中,为 BM25 全文检索定义了一个 FTS 索引,并为高维数据的余弦相似性搜索定义了一个向量索引,将文本列转换成向量索引。

接下来,我们可以这样做,执行一个结合搜索,该搜索同时利用文本列和向量列。具体来说,它是这样工作的:

    SELECT id, body, HybridSearch('fusion_type=RSF', 'fusion_weight=0.4')(body_vector, body,   
        HuggingFaceEmbedText('Who won the Polar Medal'), 'Who won the Polar Medal') AS score  
    FROM wiki_abstract  
    -- 查询维基百科摘要中与'谁赢得了极地奖章'相关的前五个条目,使用了HybridSearch和HuggingFaceEmbedText函数  
    ORDER BY score DESC  
    LIMIT 5;

这个混合搜索查询首先通过 distance() 函数在 body_vector 列上执行向量搜索,以找到与查询向量最接近的对象。同时,使用 TextSearch() 函数在 body 列上执行全文搜索,并根据查询词出现的频率对结果进行排序。接着,使用选定的融合算法(在这种情况下是 RSF),将两个搜索结果结合起来,并返回最优秀的候选对象。

比如,给全文搜索设定了0.4的权重,向量搜索则设为0.6。您可以调整这些权重来实验和找到最适合您数据和搜索需求的最佳平衡。

什么时候该用混合型搜索

混合搜索查询方法对于那些旨在利用语义向量搜索的优势,同时又依赖精准的关键字匹配的全文关键字搜索的搜索系统特别有用。例如,搜索查询“谁赢得了北极奖章”在混合搜索技术中会比标准的关键字全文搜索或纯粹的语义向量搜索提供更准确和相关的搜索结果。

在这种情况下:

  • 向量检索的前5名结果中包含3个正确答案:

  • 全文搜寻的前五名结果中其中包括2个正确答案:

如前文所述,混合搜索方法的前五名结果中有四个是正确的。

结合向量搜索和全文检索,混合搜索显著提升了搜索精度,提供了更高的搜索准确性和更相关的结果,从而增强了搜索效果。

最后

混合搜索之所以重要,是因为它通过结合关键词搜索的直接性和语义搜索的上下文关联性,来提高搜索结果的准确性和相关性。这种双重方法确保用户不仅能获得精准匹配的结果,还能获得即使使用不同表达方式也相关的语境信息。混合搜索还擅长处理各种查询,提供全面且适应性强的结果,更贴合用户的意图和需求。它不仅优化性能,还能适应各种应用场景,因此成为现代信息检索中的关键技术。

本文介绍了混合搜索的概念及其在MyScale中的应用。如果您在MyScale中使用混合搜索时有任何疑问,可以查看MyScale的文档或者看看MyScale的文档,并且加入我们的Discord社区。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消