RAG核心算法

news2024/11/15 8:39:36

一、分块与向量化

首先,我们的目标是创建一个向量索引,用以代表我们文档的内容,然后在运行时寻找所有这些向量与查询向量之间的最小余弦距离,以匹配最接近的语义含义。

1、分块

由于 Transformer 模型具有固定的输入序列长度,即便输入上下文窗口很大,一个句子或几个句子的向量通常能比几页文本的平均向量更好地表达其语义含义(这也取决于模型,但一般情况下是这样)。
因此,我们需要对数据进行分块 —— 将原始文档分割成某个大小的块,同时保留它们的含义(如将文本分割成句子或段落,而不是将单个句子切分成两部分)。目前有许多能够实现这一任务的文本分割器。
**块的大小是一个需要考虑的重要参数。**它取决于你使用的嵌入模型及其在 Token 上的处理能力。例如,标准的基于 BERT 的 Transformer 编码器模型(如 Sentence Transformers)最多处理 512 个 Token,而 OpenAI 的 ada-002 能够处理更长的序列,如 8191 个 Token。这里的权衡在于为 LLM 提供足够的上下文以进行推理,同时确保文本嵌入足够具体,以便有效执行搜索。
关于块大小选择的考虑因素,你可以参考下面链接里的研究。在 LlamaIndex 中,这些问题由 NodeParser 类以及一些高级选项(如自定义文本分割器、元数据、节点 / 块关系等)来处理。
https://www.pinecone.io/learn/chunking-strategies/

2、向量化

下一步是选择一个模型来嵌入这些块。市面上有不少选择,我倾向于使用像 bge-large 或 E5 嵌入系列这样的搜索优化模型。可以查看 MTEB 排行榜以获取最新的更新信息。
排行榜:https://huggingface.co/spaces/mteb/leaderboard
要了解分块和向量化步骤的端到端实现,可以参考 LlamaIndex 中完整数据摄入流程的示例:
https://docs.llamaindex.ai/en/latest/module_guides/loading/ingestion_pipeline/root.html

二、搜索索引

1、向量存储索引


在这个架构及后续内容中,为了简化描述,我们不考虑编码器部分,直接把查询内容送入索引。显然,查询内容会首先被向量化。类似地,尽管索引是根据向量而不是具体的块来进行检索的,但最终我们还是以块的形式展现结果,因为获取这些块相对简单。
搜索索引是 RAG 流程中的核心部分,它存储了我们在前一步骤中生成的向量化内容。最基本的实现方法是使用平面索引,即对查询向量和所有文本块的向量进行直接的距离计算。
一个高效的搜索索引,专为超过 10000+ 元素的高效检索优化,会采用像 faiss、nmslib 或 annoy 这样的向量索引,它们利用了近似最近邻算法,如聚类、树结构或 HNSW 算法。
还有像 OpenSearch 或 ElasticSearch 这样的托管解决方案,以及像 Pinecone、Weaviate 或 Chroma 这样的向量数据库,它们在底层

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【全网最有效,保姆级教程】KEPServerEX 6下载安装解决时长问题

1、下载KEPServer KEPServerEX 6下载链接(为了防止版本不兼容,一定要使用下面链接里面的版本!): https://pan.baidu.com/s/19pAXzhWa5nxduU3mi1V4Nw?pwd1234 提取码:1234 2、安装KEPServer 基本上都是默认下一步,选择中文&…

python中用列表实现栈

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 python中用列表实现栈 选择题 以下代码最后一次输出的结果是? stack [] stack.append(1) stack.append(2) stack.append(3) print(【显示】stack ,stack) print(【显示】stack.…

SpringCloud 前端-网关-微服务-微服务间实现信息共享传递

目录 1 网关获取用户校验信息并保存至请求头(前端-网关) 2 微服务获取网关中的用户校验信息(网关-微服务) 2.1 一般的做法是在公共的module中添加,此处示例为common 公共配置module中添加 2.2 定义拦截器 2.3 定义…

C++|哈希结构封装unordered_set和unordered_map

上一篇章,学习了unordered系列容器的使用,以及哈希结构,那么这一篇章将通过哈希结构来封装unordered系列容器,来进一步的学习他们的使用以及理解为何是如此使用。其实,哈希表的封装方式和红黑树的封装方式形式上是差不…

鸿蒙低代码开发的局限性

在版本是DevEco Studio 3.1.1 Release,SDK是3.1.0(API9) 的基础上。 1、低代码插件没有WebView组件。 2、低代码插件没有空白的自定义组件,当前提供的所谓自定义组件,只能用列表中提供的组件来拼接新的组件。 3、使用ets代码自定义的组件&…

JVM 常量池汇总

Tips JVM常量池分为静态常量池和运行时常量池,因为Jdk1.7后字符串常量池从运行时常量池存储位置剥离,故很多博客也是区分开来,存储位置和内容注意区别! 字符串常量池底层是由C实现,是一个类似于HashTable的数据结构&am…

Spring 中使用MyBatis

一、Mybatis 的作用 1、MyBatis(前身为iBatis)是一个开源的Java持久层框架,它主要用于与数据库交互,帮助开发者更轻松地进行数据库操作。 持久层:指的是就是数据访问层(dao),是用来操作数据库的。 2、MyB…

Filament 【表单操作】修改密码

场景描述: 新增管理员信息时需要填写密码,修改管理员信息时密码可以为空(不修改密码),此时表单中密码输入有冲突,需要对表单中密码字段进项条件性的判断,使字段在 create 操作时为必需填写&…

深度学习-注意力机制和分数

深度学习-注意力机制 注意力机制定义与起源原理与特点分类应用领域实现方式优点注意力机制的变体总结注意力分数定义计算方式注意力分数的作用注意力分数的设计总结 注意力机制(Attention Mechanism)是一个源自对人类视觉研究的概念,现已广泛…

实测 WordPress 最佳优化方案:WP Super Cache+Memcached+CDN

说起 WordPress 优化加速来可以说是个经久不衰的话题了,包括明月自己都撰写发表了不少相关的文章。基本上到现在为止明月的 WordPress 优化方案已经固定成型了,那就是 WP Super CacheMemcachedCDN 的方案,因为这个方案可以做到免费、稳定、安…

如何用R语言ggplot2画高水平期刊散点图

文章目录 前言一、数据集二、ggplot2画图1、全部代码2、细节拆分1)导包2)创建图形对象3)主题设置4)轴设置5)图例设置6)散点颜色7)保存图片 前言 一、数据集 数据下载链接见文章顶部 处理前的数据…

基于FreeRTOS+STM32CubeMX+LCD1602+MCP6S26(SPI接口)的6通道模拟可编程增益放大器Proteus仿真

一、简介: MCP6S26是模拟可 编程增益放大器(Programmable Gain Amplifiers, PGA)。它们可配置为输出 +1 V/V 到 +32 V/V 之间的增 益,输入复用器可通过 SPI 端口选择最多 6 个通道中的 一个。串行接口也可以将 PGA 置为关断模式,以降低 功耗。这些 PGA 针对高速度、低失调…

Python编程基础5

邮件编程 SMTP(Simple Mail Transfer Protocol)简单邮件传输协议,使用TCP协议25端口,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。python的smtplib提供了一种很方便的途径发送电子邮件。…

【python】tkinter GUI开发: Button和Entry的应用实战探索

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

MySQL----排序ORDER BY

在对数据进行处理的时候,我们通常需要对读取的数据进行排序。而 MySQL 的也提供了 ORDER BY 语句来满足我们的排序要求。 ORDER BY 可以按照一个或多个列的值进行升序(ASC)或降序(DESC)排序。 语法 SELECT column1…

航班进出港管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,用户管理,航班信息管理,航飞降落请求管理,公告信息管理 前台账户功能包括:系统首页,个人中心,公告信息&a…

中国新兴的数字证书品牌——JoySSL

JoySSL是一个基于全球可信顶级根创新推出的新一代https数字证书,也是中国为数不多的自主品牌SSL证书。以下是关于JoySSL的详细介绍: 1 品牌背景: JoySSL是网盾安全旗下的产品,专注于网络安全技术服务、安全防护系统集成、数据安…

计算机网络知识CIDR(无类别域区间路由)

目录 介绍 基本信息 优点与关联 如何计算判定范围(你应该是来看这个的,前面是水字数的) 省流版 介绍 无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配IP地址以及在互联网上有效地路由…

【SkiaSharp绘图】01使用SkiaSharp绘制Hello World

文章目录 SkiaSharp简介主要特点适用场景 SkiaSharp的Hello World!1、创建一个.NET Framework项目2、拖入SKGLControl控件GLControl、SKControl、SKGLControl对比GLControlSKControlSKGLControl选择和使用场景高性能的选择 SKGLControl 3、绘制Hello World 为何选择SkiaSharpIm…

绘唐科技官网

绘唐科技AI工具是一系列经过训练的人工智能工具,旨在提供各种智能化的解决方案。这些工具可以应用于多个领域,包括自然语言处理、图像识别、语音识别、机器学习等。 其中,自然语言处理工具可以帮助用户处理和理解文本数据。它可以实现文本分类…