搜索中关于稀疏检索和稠密向量检索的召回效果比较

2024-02-22 00:04

本文主要是介绍搜索中关于稀疏检索和稠密向量检索的召回效果比较,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

不同检索方式说明

最近在做搜索召回提升相关的研究工作。对比了稀疏检索和稠密向量检索的效果。其中使用的搜索引擎为elasticsearch8.x版本。稀疏检索包括BM25的检索方式,以及es官方在8.8之后版本提供的稀疏向量模型的方式。稠密向量检索,是指借助机器学习的模型做文本嵌入,然后用es8.x以后版本提供的向量检索。

测试数据说明

测试数据包括了中文和英文,涉及了法律和新闻数据。

 一、先说结论

相比较BM25检索,借助机器学习模型做文本嵌入的向量检索方式,有不错的效果。

同时,ES的稀疏向量模型,在英文场景下,相比较BM25和向量检索,仍然取得了更好的召回率提升效果。

BM25和向量检索以及稀疏向量检索之间的关系?

从测试数据来看,三者之间是互补的。

二、三种不同召回方式成功召回率对比效果

声明:这里取top50,如果命中标准答案则认为召回。

以一个测试集为例(法律数据),该测试集是有人工整理的198个问题,包含了问题和答案,相对质量较高。

在下图中,可以看到BM25成功召回177(89%)。

向量检索成功召回156个(79%)

稀疏向量成功召回187个( 94%)

结论一:稀疏向量召回率 >BM25 > 稠密向量

只看每一种召回方式,召回效果。

稀疏向量成功召回187( 94%)   >  BM25 成功召回177(89%)>  稠密向量成功召回156 (79%)

请注意这个结论!!! 其中向量检索的效果,会和向量模型有着非常密切的关系,会和测试数据集有非常密切的关系。关于BM25的召回效果好于向量检索,我自己也是不认可的。请看结论四。

结论二:三者是可以互补的

再看三路混合检索整体的召回效果,成功召回189,召回率95%,整体大于任何一个单个检索方式。

结论三:BM25 和 稠密向量可以互补。

稀疏向量是收费才能使用的功能,且只针对英文效果出色。所以这里只看Bm25和稠密向量的方式。

统计1:其中BM25召回成功的,向量检索召回失败的有27个。13%

统计2:其中向量召回成功,但是BM25召回失败的有6个。3%

结论四:BM25是否真的好于向量检索?

其中向量检索,严重依赖外部的文本嵌入的模型,假如模型没有训练过某个领域的知识,则在向量embedding过程中,一定会都是语义,所以效果表现不佳,甚至是低于Bm25的召回效果。

于是又对比了不同的测试数据集: 这次是中文的新闻数据。共1704个case。向量召回率98% >bm

25召回率 95%

即使这样,我依然无法下一个结论说向量检索效果比BM25好,或者说差。还是取决于文本嵌入模型的能力,以及测试集样本。但是总是可以得出,而知没有绝对的谁领先,而是互补,1+1 >2的效果!

其中BM25 成功召回 1619,召回率95%。

其中向量 成功召回 1675,召回率98.2%。

 

整体召回率,98.8%。两者可以互补的结论依然成立。

 

三、稀疏向量的提升效果

这是一个全新的测试数据集。也是法律数据和法律问题。与上边的测试集不同的是,这是人工整理的,没有杂质数据的干扰。

在英文场景下,稀疏向量的召回率相比较BM25,提升明显!提升到了100%提升了14%

topK召回率有很大提升,top1提升了31%,top5提升了28.5%,top10提升了22%

四、应该如何选用召回方式

其中Bm25 是花费资源最少得检索方式。向量检索是花费资源最多的方式,因为要使用模型,其并发能力会受到资源限制。稀疏向量需要依赖官方提供的模型,是收费的功能,并且价格昂贵,且只支持英文场景,无法做多语言的混合场景,亲测中英混合的情况下,效果下降明显。

这篇关于搜索中关于稀疏检索和稠密向量检索的召回效果比较的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/733519

相关文章

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

防近视护眼台灯什么牌子好?五款防近视效果好的护眼台灯推荐

在家里,灯具是属于离不开的家具,每个大大小小的地方都需要的照亮,所以一盏好灯是必不可少的,每个发挥着作用。而护眼台灯就起了一个保护眼睛,预防近视的作用。可以保护我们在学习,阅读的时候提供一个合适的光线环境,保护我们的眼睛。防近视护眼台灯什么牌子好?那我们怎么选择一个优秀的护眼台灯也是很重要,才能起到最大的护眼效果。下面五款防近视效果好的护眼台灯推荐: 一:六个推荐防近视效果好的护眼台灯的

hdu 4517 floyd+记忆化搜索

题意: 有n(100)个景点,m(1000)条路,时间限制为t(300),起点s,终点e。 访问每个景点需要时间cost_i,每个景点的访问价值为value_i。 点与点之间行走需要花费的时间为g[ i ] [ j ] 。注意点间可能有多条边。 走到一个点时可以选择访问或者不访问,并且当前点的访问价值应该严格大于前一个访问的点。 现在求,从起点出发,到达终点,在时间限制内,能得到的最大

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

hdu4277搜索

给你n个有长度的线段,问如果用上所有的线段来拼1个三角形,最多能拼出多少种不同的? import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;

关键字synchronized、volatile的比较

关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且volatile只能修饰于变量,而synchronized可以修饰方法,以及代码块。随着JDK新版本的发布,synchronized关键字的执行效率上得到很大提升,在开发中使用synchronized关键字的比率还是比较大的。多线程访问volatile不会发生阻塞,而synchronize

Vector3 三维向量

Vector3 三维向量 Struct Representation of 3D vectors and points. 表示3D的向量和点。 This structure is used throughout Unity to pass 3D positions and directions around. It also contains functions for doin