关于对向量检索研究的一些学习资料整理

官方学习资料

        主要是的学习资料是, 官方文档 和官方博客。相关文章还是挺多 挺不错的 他们更新也比较及时。有最新的东西 都会更新出来。
es scdn官方博客

这里简单列一些,还有一些其他的,大家自己感兴趣去看。

什么是向量数据库

Elasticsearch:向量数据库的真相-CSDN博客

什么是向量嵌入

什么是大语言模型(LLM)

什么是语义搜索

向量搜索的优势

什么是机器学习

关于多模态


        这个是多模态检索。目前es只能做文本类转向量的模型导入。不支持图片转向量的模型导入。(clip是双塔模型,一个负责文本转向量,一个负责图片转向量。我测过了,图片转向量模型不支持导入)如果用es做多模态。还是要在外边部署模型。 整体体验不好。而且模型导入es,是收费的白金版。 最佳实践(不付费玩法)应该是完全在外边做转向量。 考虑付费,可以用es

学术界前沿的研究对比


        这个是学术稍微前沿一点的研究。里边包含的论文,感兴趣可以看看。里边探讨对比了关于BM25和向量检索的效果。还包含稀疏向量相关的知识。

关于稀疏向量

        稠密向量有一个致命问题。 检索速度,以及做嵌入的速度。太慢,现在最先进的方向是稀疏向量

这里边有对比 语义检索 和 BM25的效果对比。(最佳实践是两者结合,做内容召回。两者可以互补)根据官方提供的稀疏向量的模型测试结果如下图所示,据说20个场景有19个都优遇BM25.

这是稀疏向量模型的转换效果,应该不会多花费空间。它的维度相对低。 

这里有我的一篇文章,国内生产实践经验帖。ES-ELSER 如何在内网中离线导入ES官方的稀疏向量模型(国内网络环境下操作方法)-CSDN博客

如何做向量嵌入

        模型转向量,简单来讲,是利用机器学习模型把一块文本(数据),映射到网络空间内,同样问题(query)也是用同一个模型,映射到网络空间内。然后计算cosin值,也就是夹角越小,就越相近。

        我在生产实践中,是选择使用es来的机器学习模块倒入hugging face上的NLP模型,来做文本嵌入。

        这里有一篇我自己写的国内环境下。如何在es中导入NLP模型。elasticsearch 内网下如何以离线的方式上传任意的huggingFace上的NLP模型(国内避坑指南)-CSDN博客

        这里还有一个例子,是在es中使用 E5 嵌入模型进行多语言向量搜索

向量检索简单举个例子

        data 是一篇文章的内容。这个内容最终可能是切分成N个片段。 然后通过模型把每个片段都转成向量,然后再把向量存到向量库。

例如,第一个段落 片段转完是 [1.0000009,0.11111111,0.899998]

然后问题,也转成向量可能是 [1.0044449,0.55551111,0.449998]

然后通过计算这两个数组,的cosin值,然后再比较 其它片段和问题的cosin值(当然还可以用其它计算方式),然后做个排序,然后把topN小的返回。这就是KNN最邻近搜索。

关于相关性或者说相似性

        相似不相似,其实更多是依赖模型效果好不好。向量库都只是起计算作用。关于向量库的选择,只需要看该向量数据库的稳定性,数据承载能力(也就是能存多少数据,是否满足业务需求。)已经向量数据库实现的向量检索算法都有哪些(实际上目前学术界也就那么多)。还有就是该库的检索性能如何,稳定性如何,能够满足业务需求。但是不要想着在向量数据库上去提升搜索相关性的事情,因为相关性和库没有太大关系。如何要研究提升召回效果。应该去考虑选择什么样的机器学习模型效果更好,还要考虑模型的语言能力,是否支持多语种。例如你在英文模型下做中文数据的embedding,效果肯定会很差。此外不同的业务应该选择自己的模型,加上微调。而不是一个大一统的模型。另外一个提升相关性的方向是探索数据切割的规则,针对不同类型的数据做不同的切分。

        实际上利用向量检索的相关性效果,还确实是比BM25好的。但是它不是绝对的,在关键词精准匹配场景下,BM25算法更好一些。

如何选择模型

语义检索系统如何选择合适的embedding模型-CSDN博客

使用模型做文本陷入,如何做数据切分,不丢失语义

        目前这一块探索还比较少。根据看过的一些案例,基本上推荐在500个token,300-400个字。再多了就会丢失语义。这里还需要摸索和测试一下。

ES支持混合检索吗? 向量检索+倒排索引 

es ANN搜索

这样可以先筛选数据。然后剩下的在做 knn搜索。这个逻辑会先走倒排搜索。

提供一个向量检索的案例

腾讯es云,最近写的最佳实践
 

关于请求改写经验


美团的查询改写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/233570.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算两个结构的乘积

1 * 1 1 1 1 2a1 3a1 计算2a1*3a1,结果应该有6个点,并且33分解为3a13a1,222分解为2a12a12a1. 在6个点的90个结构中,可以被分解为3a13a1的有17个 9 - - - - 1 1 42 - - - 1 1 - 1 - - - 1 - - - …

机器人与3D视觉 Robotics Toolbox Python 二 空间位姿描述

空间位姿描述 二维空间位姿描述 二维空间位姿表示方法 from spatialmath.base import * from spatialmath import * T1 SE2(x3,y3,theta30,unit"deg") trplot2(T1.A,frame"T1",dims[0, 5, 0, 5]) T2transl2(3, 4) trplot2(T2,frame"T2",dims…

龙迅LT9721 MIPIDSI/CSI/HDMI桥接到TYPE-C/DP 支持高达4K30HZ的分辨率

Lontium LT9721 LT9721描述: Lontium LT9721是MIPI/HDMI到DP转换器,内部有C型替代模式开关和PD控制器。 对于MIPI DSI输入,LT9721具有一个单端口MIPI DSI接收器,具有1个时钟通道和4个数据通道,每个数据通道的最大运行频…

Mybatis中的查询操作

单表查询 单表查询在《初始Mybatis》中已经介绍过&#xff0c;这里就不在介绍了。咱们这里只说单表查询中的“like查询”。like查询单独使用#{}报错 <select id"selectByKeyword" resultType"com.example.demo.entity.Userinfo">select * from use…

[完美解决]Accelerate设置单卡训练报错,成功设置单卡训练

报错内容 ValueError: Less than two GPU ids were configured and tried to run on on multiple GPUs. Please ensure at least two are specified for --gpu_ids, or use --gpu_idsall. ValueError:配置了少于两个GPU id&#xff0c;并试图在多个GPU上运行。请确保为——gpu…

ubuntu22.04 显卡驱动最简单的安装方法

1.拉取可选择安装的显卡驱动版本 sudo apt-get purge nvidia* #apt 的 update 和 upgrade 的区别 #apt update 命令只会获得系统上所有包的最新信息&#xff0c;并不会下载或者安装任何一个包。 #apt upgrade 命令来把这些包下载和升级到最新版本。 2.sudo apt update 3.安装…

多线程(进阶二:CAS)

目录 一、CAS的简单介绍 CAS逻辑&#xff08;用伪代码来描述&#xff09; 二、CAS在多线程中简单的使用 三、原子类自增的代码分析 都看到这了&#xff0c;点个赞再走吧&#xff0c;谢谢谢谢谢 一、CAS的简单介绍 CAS的全称&#xff1a;“Compare And Swap”&#xff0c;字…

《PySpark大数据分析实战》图书上线啦

《PySpark大数据分析实战》图书上线啦 《PySpark大数据分析实战》图书上线啦特殊的日子关于创作关于数据关于Spark关于PySpark关于图书/专栏 《PySpark大数据分析实战》图书上线啦 特殊的日子 不知不觉一转眼入驻CSDN已经满一年了&#xff0c;这真是一个充满意义的特殊的日子&…

《python每天一小段》--12 数据可视化《1》

欢迎阅读《Python每天一小段》系列&#xff01;在本篇中&#xff0c;将使用Python Matplotlib实现数据可视化的简单图形。 文章目录 一、概念&#xff08;1&#xff09;安装matplotlib&#xff08;2&#xff09;数据可视化实现步骤 二、绘制简单的折线图&#xff08;1&#xff…

在无网络的VMware CentOS7上传并运行Swing Jar文件的方案

文章目录 前言1、配置VNC环境1.1、下载tigervnc-server1.2、下载xorg-x11-xauth1.4、安装1.4.1、安装tigerVNC1.4.2、安装xorg-x11-xauth 1.5、测试vncserver1.6、关闭防火墙 2、安装UltraVNC3、连接UltraVNC4、执行jar文件4.1、生成jar包4.2、运行jar包4.3、解决无法连接错误 …

Java线程概念详解

线程 概念 1.程序:未解决某种问题,使用计算机语言编写的一些列指令(代码)的集合 2.进程:正在运行的程序(被加载到内存中),是操作系统进行资源分配的最小单位 3.线程:进程可以进一步细化为线程(比进程更小)且线程是隶属于进程的,是操作系统执行的最小的执行单元 也是cpu进行任…

通过Nginx的log日志对站点进行数据统计

文章目录 前言统计独立ip访问数量查看访问最频繁的前100个IP查看访问100次以上的IP查询某个IP的详细访问情况,按访问频率排序统计所有的PV数统计当天的PV数查看访问最频的页面(TOP100)每分钟请求量统计每小时请求量统计可视化报表工具 前言 请自行确认nginx的日志是否开始且知…

HarmonyOS--ArkTS(0)--目录

官方API文档&#xff1a; HarmonyOS应用开发官网 - 华为HarmonyOS打造全场景新服务 华为开发者官方网站_创新从这里开始

deque容器

deque容器 文章目录 deque容器一、头文件二、deque容器基本概念三、deque构造函数四、deque赋值操作五、deque大小操作六、deque插入和删除七、deque数据存取八、deque排序 一、头文件 #include <deque>二、deque容器基本概念 功能: ●双端数组&#xff0c;可以对头端进…

【Python】简单的翻译软件

用translate包和tkinter写一个简单的桌面翻译软件。 1、窗口设置&引入包&#xff1a; from tkinter import * from tkinter.ttk import * from tkinter.messagebox import * import translatewinTk() win.title(翻译) win.geometry("600x400")win.mainloop() …

【PWN】学习笔记(一)【二进制基础】

目录 课程教学一次简单的Hack程序的编译与链接Linux下的可执行文件格式ELF进程虚拟地址空间程序的编译与链接程序的装载与进程的执行x86&amd64汇编简述 课程教学 课程链接&#xff1a;https://www.bilibili.com/video/BV1854y1y7Ro/?vd_source7b06bd7a9dd90c45c5c9c44d12…

C++ queue 和priority_queue

目录 1.什么是queue 2.模拟实现 3.仿函数 模板参数Compare 仿函数 4.什么是priority_queue 模拟实现 1.什么是queue 1.队列是一种容器适配器&#xff0c;专门用于在FIFO上下文(先进先出)中操作&#xff0c;其中从容器一端插入元素&#xff0c;另一端提取元素。 2.队列作为…

APP备案,最新获取安卓签名文件中MD5等信息方法

1.通过签名文件获取SHA1和SHA256 直接通过cmd执行命令 keytool -list -v -keystore xxxxx/xxx/xx/xxx.keystore输入后回车会提示输入密码库口令&#xff0c;直接输入Keystore密码&#xff08;输入过程中终端上不会显示&#xff0c;输完回车就行&#xff09; 2.获取md5 由于…

从线性回归到神经网络

一、线性回归关键思想 1、线性模型 2、基础优化算法 二、线性回归的从零开始实现 在了解线性回归的关键思想之后&#xff0c;我们可以开始通过代码来动手实现线性回归了。在这一节中&#xff0c;我们将从零开始实现整个方法&#xff0c;包括数据流水线、模型、损失函数和小批量…

js判断是否对象自身为空

文章目录 一、前言二、JSON.stringify三、for in 配合 hasOwnProperty四、Object.keys五、Object.getOwnPropertyNames六、Object.getOwnPropertyNames 结合 Object.getOwnPropertySymbols七、Reflect.ownKeys八、最后 一、前言 如何判断一个对象为空&#xff1f; 先上结论&a…