LLM--RAG中的文本切分策略及长上下文窗口是否会取代RAG?

news2024/11/20 20:39:10

1. 文本切割

在使用基于检索的生成模型(RAG)处理长文本数据时,合理的文本切割策略是提高模型性能和效率的关键。

1.1.文本切割策略核心参数

文本切割策略主要依赖于两个参数:chunksize(块大小)和overlap(重叠)。正确配置这些参数可以显著影响模型的输出质量和处理速度。

  • chunk_size 基于模型的限制(embedding , LLM )
  • 不同Text splitter 的优劣,如何选取
  • 可视化文本切分的效果,供大家切分文本初步参考

基于模型选取chunk_size

  • 首先是embedding model, 向量嵌入模型有Max Tokens 的限制,设置的chunk size不可以超过模型支持的最大长度,否则将丢失语义。
    Alt text
    不同的embedding model 支持的 Max Tokens都有不同,具体可参考model 排行
  • 其次是LLM model , 大语言模型有Max sequence length的限制,处理知识增强的时候,prompt中召回的文本不可以超出最大长度。
    Alt text
    需要根据不同的LLM支持的最大token长度,选取合适的参数

如何查看Max Tokens

打开model 排行,查看所选模型的Max Tokens参数
在这里插入图片描述

1.2. 不同的文本切分策略

  • CharacterTextSplitter 这是最简单的方法。它默认基于字符(默认为"")来分割,并且通过字符的数量来衡量块的长度。

    • 文本的拆分方式:按单个字符
    • 区块大小的测量方式:按字符数
    • chunk_size:块中的字符数
    • chunk_overlap:在顺序块中重叠的字符数。跨块保留重复数据
    • 分隔符:用于分割文本的字符(默认为“”)
  • RecursiveCharacterTextSplitter 基于字符列表拆分文本。文本分割工具的设计目的是为了在处理文本时,能够在不损失语义关联性的前提下,将文本有效分割成更小的单元。通过先尝试分割段落,如果段落仍然过大,再尝试分割成句子,依此类推,直至分割成单词。这种分割方法尽量保留文本的原有结构和意义,使得处理后的文本单元在语义上保持连贯性。

    • “\n\n” - 段落
    • “\n” - 换行
    • " " - 空格
    • “” - 字符
  • Document Specific Splitting

    • python - RecursiveCharacterTextSplitter.get_separators_for_language(Language.PYTHON)
    • json - RecursiveJsonSplitter
    • Markdown - MarkdownTextSplitter
    • Html - HTMLHeaderTextSplitter
  • Semantic Chunking: Embedding将文本转化为高维空间中的向量的技术,这些向量能够反映出文本的语义内容。通过文本嵌入技术,可以捕捉到文本的深层次语义信息。当比较两段文本的嵌入向量时,可以根据它们在高维空间中的距离或者角度,来推断这两段文本在语义上的相似度或者差异。利用相似度,将语义上相似的文本自动分组在一起,形成聚类,这有助于更好地理解和组织大量的文本数据。

    • LlamaIndex具有SemanticSplitterNodeParser类,该类允许使用块之间的上下文关系将文档拆分为块,使用嵌入相似性自适应地选择句子之间的断点。SemanticSplitterNodeParser超参数介绍:
      • buffer_size:配置块的初始窗口大小;
      • breakpoint_percentile_threshold:决定在何处分割块的阈值;
      • embed_model:使用的嵌入模型。
  • 代理分块: 这种分块策略探索了使用LLM来根据上下文确定块中应包含多少文本以及哪些文本的可能性。

    • 为了生成初始块,参考论文《Dense X Retrieval: What Retrieval Granularity Should We Use?》,从原始文本中提取独立语句。Langchain提供了propositional-retrieval模板(https://templates.langchain.com/new?integration_name=propositional-retrieval)来实现这一点。
    • 在生成命题之后,这些命题输入到基于LLM的代理。该代理确定命题是否应包括在现有块中,或者是否应创建新块。

2. 推荐的Embedding模型

请根据实际需要,选择model 排行中的模型

以下是推荐使用的支持中文的Embedding模型

模型名称原因Max TokensEmbedding DimemtionsHuggingface 地址
gte-large-zh由阿里巴巴达摩院开发,针对中文场景进行了优化,具有较高的性能。5121024链接
bge-large-zh-v1.5北京智源人工智能研究院开发的模型,专为中文设计,在多个中文NLP任务上表现优异。5121024链接
m3e-baseM3E模型作为最新的开源中文Embedding模型,在多模态、多粒度的中文文本理解方面具有优势。512768链接
tao8k由Huggingface开发者amu研发并开源的模型,在特定任务上表现出色,适合用于中文领域的RAG系统。5121024链接
Massive通过大规模的中文句对数据集进行训练,支持中英双语的同质文本相似度计算,异质文本检索等功能。2200000768链接

3. 长上下文是否替代了RAG?

  • 目前主流大模型支持的上下文长度越来越长
  • Kimi支持200万字的上下文,其它的详见下图
    在这里插入图片描述
    在这里插入图片描述

3.1.长上下文窗口的好处

提高理解和连贯性:长上下文窗口允许模型在生成回答时,参考更多的背景信息,这使得模型能够更好地理解复杂的查询上下文,从而生成更加相关和连贯的回答

复杂任务处理能力:有些任务,如撰写文章、编程、数据分析等,需要对大量信息进行处理和引用。长上下文窗口使模型能够处理这类复杂任务提供更加深入和准确的输出

提升用户体验:用户在与模型交互时,往往希望模型能够记住并利用整个对话历史中的信息。长上下文窗口可以使模型在整个会话过程中保持信息的连续性,提供更加个性化和满意的用户体验。

3.2. 长上下文窗口与RAG的对比

维度长上下文窗口RAG系统
数据需求需要大量数据来训练模型,以便模型能够理解和生成与长上下文相关的文本。RAG系统依赖于高质量的索引数据和有效的数据预处理,以提高检索的准确性和相关性。
应用场景适用于长对话、长文档总结、长期计划执行等场景,能够一次性处理较长的文本序列。适用于需要结合检索外部知识的场景,如问答系统、内容推荐、自动摘要等。
成本消耗长上下文窗口模型通常需要更高的算力和显存资源,导致成本较高。RAG系统可能需要额外的后端支持,如矢量数据库和索引库,以及优化检索策略的成本。
性能长上下文窗口模型在处理长文本时性能较好,但可能存在“Lost in the Middle”的问题,即模型难以利用中间信息。RAG系统通过结合检索和生成,提高了模型的准确性和相关性,但性能也受到索引质量和检索策略的影响

GPT在大海捞针测试中的表现

在这里插入图片描述

3.3. 适用场景

  • 长上下文窗口:适用于一次性的单一提示场景,其中在一个提示中提交长内容,并基于这段长内容提出多个问题【一个会话中仅处理一次长内容,而非反复使用或更新】
  • RAG:提供一种更灵活的方法,可以在多种数据源中检索和生成信息

3.4. 小结

长上下文窗口对RAG的影响 及未来进化方向

  • 增加了RAG系统的精确度限制: 虽然很多模型能处理更长的上下文窗口,但它们无法取代RAG,因为处理复杂RAG任务仍然需要更好的系统才能投入生产。长上下文窗口允许RAG系统在检索精度较低的情况下仍然进行有意义的处理,从而促进了RAG生产的简化,提升了RAG应用的效能。
  • 未来进化方向: 如果所有模型拥有真正可靠的长上下文窗口,这些模型怎么竞争?则它们会寻求降低成本和减少延迟。降低成本和减少延迟的方式之一就是尝试最小化发送到上下文窗口的信息量,这本质上是RAG的过程

总之,RAG作为一种处理信息和优化LLM性能的方法,在未来发展中有积极前景,特别是在处理大量上下文信息和提升精确度方面,此外在企业级产品中的潜力是无穷的。

参考

LLM之RAG实战(二十)| RAG分块策略的五个level

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

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

相关文章

《由浅入深学习SAP财务》:第2章 总账模块 - 2.6 定期处理 - 2.6.6 年初操作:科目余额结转

2.6.6 年初操作:科目余额结转 在使用事务代码 FAGLB03 查询科目余额时,可以看到按期间的发生额清单。其中,第一行称为“余额结转”,该行的累计余额代表上年度遗留下来的余额,也就是年初余额。对于资产负债表科目而言&a…

可视化大屏C位图:​地理信息—地球焦点图

Hello,我是大千UI工场,本期可视化大屏的焦点图(C位)分享将地球作为焦点图的情形,欢迎友友们关注、评论,如果有订单可私信。 将地球作为可视化大屏焦点图可以有以下几个作用: 全球数据展示&…

64B/66B GT Transceiver 配置

一、前言 前一篇文章已经讲述了64B/66B的编码原理,此篇文章来配置一下7系列GT的64B/66B编码。并讲述所对应的例子工程的架构,以及部分代码的含义。 二、IP核配置 1、打开7 Series FPGAs Transceiver Wizards,选择将共享逻辑放置在example …

7.Hexo主题安装和自定义

一个Hexo主题,基本上只是一组HTML、CSS和JavaScript文件来定义布局的外观和感觉 在默认情况下,Hexo会附带一个主题,landscape主题 这个主题就比较可靠,确实有效 如果想要使用不同的主题,可以下载并安装一个主题&…

OpenHarmony开源三方库的cmake在IDE上直接引用的问题

前言 DevEco Studio的native工程的C/C部分当前只支持cmake脚本的编译,工程的目录结构如下图所示 在工程中引用第三方库有如下三种方式, 一、find_package模式 通过find_package,可以在指定目录下去搜索已安装的库(三方库构建完后…

从零实现诗词GPT大模型:专栏内容规划

一、前情介绍 本系列文章将从头编写一个类GPT的深度学习模型,并在诗词数据集上进行训练,从而可以进行诗词创作。 本次实现的类GPT模型,可以在kaggle上使用免费GPU进行训练,并可以在自己的电脑上进行推理,整个学习过程…

申请OV SSL证书

OV证书,即Organization Validation证书,是一种SSL/TLS证书类型,主要用于企业级应用,例如教育、政府、互联网等行业的大型企业和政府机关部门。与基础的域名验证(DV)证书相比,OV证书的验证过程更…

入门:多层感知器Multiple-Layer Perceiver, MLP

本文将简单介绍多层感知器(MLP)的基本概念、原理和应用。MLP是一种前馈人工神经网络,由多层节点组成,每层节点通过权重和偏置与下一层节点相连。MLP在许多领域都有广泛的应用,如分类、回归、自然语言处理等。 本文将分…

Android Studio引入framework.jar包

一. 前言 Android Studio 引入framework.jar 步骤,记录笔记 Android源码编译产生的framework.jar 在不同的版本上生成路径是不同的 Android N/O: 7 和 8 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar Android P/Q: 9 和 10 out/s…

格式化D盘后C盘内的文件会受影响吗?深度解析

在计算机的日常使用中,磁盘格式化是一个常见的操作,它能帮助我们清除磁盘上的数据,为新的数据腾出空间。然而,当涉及到系统盘和其他存储盘时,许多用户会担心一个问题:如果我格式化了非系统盘,比…

SRIO学习(3)使用SRIO IP核进行设计

文章目录 前言一、设计框图二、模块介绍三、上板验证总结 前言 本文将通过使用SRIO IP核实现数据通信,重点在于打通数据链路,具体的协议内容设计并非重点,打通了链路大家自己根据设计需求来即可。 一、设计框图 看了前面高速接口的一些设计…

Linux 秋招必知必会(六、Socket 网络编程)

二、Socket 编程 13. 什么是 Socket? Socket 本身有 “插座” 的意思,在 Linux 环境下,用于表示进程间网络通信的特殊文件类型 本质为内核借助缓冲区形成的伪文件 既然是文件,那么可以使用文件描述符引用套接字 与管道类似&…

机器人路径规划:基于Q-learning算法的移动机器人路径规划(可以更改地图,起点,终点),MATLAB代码

一、Q-learning算法 Q-learning算法是强化学习算法中的一种,该算法主要包含:Agent、状态、动作、环境、回报和惩罚。Q-learning算法通过机器人与环境不断地交换信息,来实现自我学习。Q-learning算法中的Q表是机器人与环境交互后的结果&#…

AIGC 探究:人工智能生成内容的技术原理、广泛应用、创新应用、版权问题与未来挑战

AIGC(Artificial Intelligence Generated Content)即人工智能生成内容,其核心在于利用深度学习技术,尤其是基于神经网络的模型,来模拟人类创作过程,自主生成高质量的文本、图像、音频、视频等各类内容。神经…

MySQL8.0的下载、安装配置教程、连接数据可视图形化界面和卸载及MySQL基本使用教程

文章目录 MySQL8.0下载安装MySQL卸载常见问题解决方式MySQL基本使用教程(使用MySQLworkbench) 1、创建数据库2、创建表、删除表3、修改表的名字4、为数据表增加、修改、删除字段5、关于修改数据库名字6、拓展:pycharm操作MySQL 首先&#…

Diagrams:Show Me​

大家好,今天给大家介绍的 GPTs 叫 Diagrams:Show Me。 首先,让Diagrams:Show Me介绍一下自己,了解一下他的基本功能 然后,让他告诉我们,我们要怎么与他进行交互。 按照他给出的例子来体验一下他的功能。先来第一个例子…

cog predict docker unknown flag: --file

如图: 使用cog predict -i image“link-to-image” 出现docker unknown flag: --file的问题。 解决方法(对我可行):切换cog版本。 这个是我一开始的cog安装命令(大概是下的最新版?)&#xff1…

StarUML笔记之从UML图生成C++代码

StarUML笔记之从UML图生成C代码 —— 2024-04-14 文章目录 StarUML笔记之从UML图生成C代码1.Add Diagram2.在TOOLBOX中左键点击Class,松开,然后在中间画面再左键点击,即可出现UML3.修改类图,并添加接口,方法,属性,我…

12-LINUX--进程间的通信

进程间通信:采用IPC机制(进程间的用户空间相互独立,内核空间共享),有管道,信号量,共享内存,消息队列,套接字。 一.管道 管道可以用来在两个进程之间传递数据&#xff0c…

C语言入门(第三天:函数、指针)

一、函数 1.1 函数概述 作用:提高代码的编写效率,实现对代码的重用 函数使用步骤 定义函数 理解为制作工具,工具只需要制作1次即可 调用函数 理解为使用工具 1.2 无参无返回值 1.3 有参无返回值(重点) 函数参数的作用:增加…