长文本分块的新策略——后期分块(Late Chunking),让RAG应用“又准又高效“

你是否曾经为了在海量文档中找到关键信息而苦恼不已?在AI时代,这个问题似乎已经不再是难题。但是,当我们面对特别长的文本时,检索系统往往会陷入两难:要么牺牲精确度,要么付出高昂的成本。最近,JinaAI提出了一个叫后期分块(Late Chunking)[1]的新方法,声称可以解决这个难题。

今天,我们就来一探究竟,看看这个新技术到底有什么神奇之处。

后期分块:颠覆传统的新思路

想象一下,你在整理一大堆文件。传统的方法是先把文件分成小堆,然后再逐一处理。而后期分块却反其道而行之:先对整个文件进行全面处理,然后再进行分类整理。这听起来可能有点反直觉,但在AI的世界里,这种方法却显示出了惊人的效果。

具体来说,后期分块是这样工作的:

  1. 先用一个长上下文嵌入模型(比如 jina-embeddings-v2-small-en,具有 8K 上下文长度)"读懂"整个文档

  2. 然后再把这个"理解"切成小块

传统方法涉及使用句子、段落或最大长度限制来预先分割文本。之后,会反复应用嵌入模型到这些结果块中。为了为每个块生成一个嵌入,许多嵌入模型会在这些词级别嵌入上使用均值池化,以输出一个单一的嵌入向量。

而"后期分块"方法首先将嵌入模型的转换层应用于整个文本或尽可能多的文本。这为文本中的每个标记生成了一个包含整个文本信息的向量表示序列。随后,对这个标记向量序列的每一部分应用平均池化,产生考虑整个文本上下文的每个部分的嵌入。与生成独立同分布(i.i.d.)分块嵌入的简单编码方法不同,后期分块创建了一组分块嵌入,其中每个嵌入都"依赖于"之前的嵌入,从而为每个分块编码了更多的上下文信息。

这就好比你先通读了一本书,理解了整体内容,然后再给每一章写摘要,而不是仅仅看了每章的标题就开始总结。

传统方法和后期分块的对比:

方法 步骤 优点 缺点
传统方法 1.分块 2.理解 计算效率高 可能丢失上下文信息
后期分块 1.理解 2.分块 理解更全面 需要更强大的AI模型

以此为例:爱丽丝有一天在树林里散步,途中她发现了一样东西。她看到一棵大树底部有一个兔子洞。她掉进了洞里,发现自己来到了一个陌生的新世界。如果我们将这个段落分句,我们会得到:

1.爱丽丝有一天在树林里散步,她在散步中发现了一些东西。

2.她在一棵大树的底部看到了一个兔子洞。

3.她掉进了洞里,发现自己在一个陌生的新世界里。

现在想象一下,用户已经将多个文档、书籍的段落甚至多本书填充到他们的向量数据库中。如果他们问"爱丽丝在哪里掉下去的",作为人类,我们能直观地理解句子 3 中的"她"指的是句子 1 中的爱丽丝。然而,由于这些嵌入是独立创建的,模型对句子 3 的表示无法考虑到与名字爱丽丝的关系。

后期分块的过人之处

  1. 保留上下文:就像你读完整本书再总结,而不是只看目录就下结论,后期分块能更好地理解文章的整体意思[1]。

  2. 存储更高效:比起其他高级方法,后期分块既能保留文章的整体意思,又不会占用太多存储空间[1]。

打个比方:

假设我们用一个超级AI处理10万份长文档(传统方法文本采用固定分块策略为 512 个token,被分成 512 个token的分块,单独嵌入。存储需求的计算基于 32 位浮点精度,向量维度大小为 768):

方法 每个文档的嵌入数量 总嵌入数量 存储空间
后期交互 8,000 8亿 约2.46 TB
传统方法(在推理之前进行切片) 16 ( 8,000 / 512 ) 160万 约4.9 GB
后期分块 16 ( 8,000 / 512 ) 160万 约4.9 GB

可以看出,传统方法只需要与延迟交互相比存储资源的 1/500。后期交互,虽然更加精确,但需要显著更多的存储容量。后期分块可以与传统方法一样减少存储需求,同时保留后期交互所提供的上下文信息,既能保留文章的精髓,又不会占用太多空间,简直是鱼与熊掌兼得!

  1. 简单易用:只需稍微调整一下现有的AI系统,就能用上这个新技术,不需要大动干戈,这里是项目地址[2]和colab例子[3]。

实际效果如何?

Weaviate研究人员做了一系列测试[4],结果相当惊人。我们以weaviate博客文章[5]的一段内容来测试后期分块与朴素分块。

使用固定大小分块策略(token数=128)导致以下句子被分成了两个不同的分块:

Weaviate 的原生、多租户架构为需要在保持快速检索和准确性的同时优先考虑数据隐私的客户提供优势。

如下:

分块 内容
chunk1 ...技术堆栈的演变。这种灵活性,结合易于使用,帮助团队更快地将 AI 原型部署到生产环境中。在架构方面,灵活性也至关重要。不同的应用场景有不同的需求。例如,我们与许多软件公司以及在受监管行业中运营的公司合作。他们通常需要多租户功能来隔离数据并保持合规性。在构建检索增强生成(RAG)应用程序时,使用特定于帐户或用户的数据显示结果的上下文,数据必须保留在为其用户组专用的租户内。Weaviate 的原生、多租户架构对于需要优先考虑此类需求的客户来说表现卓越。
chunk2 ...在保持数据隐私的同时,实现快速检索和准确性。另一方面,我们支持一些非常大规模的单租户使用案例,侧重于实时数据访问。这些案例中的许多都涉及电子商务和以速度和客户体验为竞争点的行业。

假设有人问:"客户最关心什么?"

方法 AI的回答
传统方法 1. "产品更新,参加我们的网络研讨会。" (得分: 75.6)
2. "在保证速度和准确性的同时注重数据隐私。我们支持一些大规模单租户用例,主要在电子商务和那些速度和客户体验至关重要的行业。" (得分: 70.1)
后期分块 1. "客户需求多样,我们引入了不同的存储层。看到客户的产品越来越受欢迎真是令人惊叹。但随着用户增长,成本可能会急剧上升..." (得分: 74.8)
2. "技术选择至关重要。灵活性和易用性有助于团队更快地实施AI。不同的用例有不同的需求。例如,软件公司和受监管行业通常需要多租户来隔离数据并确保合规。在构建AI应用时,使用特定用户数据来个性化结果很重要。Weaviate的多租户架构在这方面表现出色。" (得分: 68.9)

显然,后期分块方法给出的答案更加全面和贴切,更能抓住问题的核心。

对开发者的启发

  1. 不用再为如何巧妙地切分文本而绞尽脑汁了。

  2. 用更少的钱就能处理更长的文本,性价比杠杠的!

  3. 实现起来超级简单,几十行代码就搞定,不用大改现有系统。

  4. 能给AI提供更精准的信息,让AI回答问题时更加准确高效。

总结

后期分块技术为处理长文本提供了一个既聪明又实惠的新方案。它不仅能更好地理解文章的整体意思,还能大大节省存储和计算成本。对于那些想要构建大规模AI应用的开发者来说,这绝对是一个值得尝试的新方向。随着技术的不断进步,我们有理由相信,后期分块将在未来的AI应用中发挥越来越重要的作用。

如何学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 "AI会取代那些行业?""谁的饭碗又将不保了?"等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码 领取🆓**↓↓↓**

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

学习路线

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

相关推荐
嵌入式杂谈4 分钟前
深入理解AI大模型:参数、Token、上下文窗口、上下文长度和温度
人工智能
范范082517 分钟前
自然语言处理入门:从基础概念到实战项目
人工智能·自然语言处理
_feivirus_20 分钟前
神经网络_使用TensorFlow预测气温
人工智能·神经网络·算法·tensorflow·预测气温
deflag27 分钟前
第T1周:Tensorflow实现mnist手写数字识别
人工智能·python·机器学习·分类·tensorflow
大柏怎么被偷了30 分钟前
【C++算法】位运算
开发语言·c++·算法
程序猿方梓燚31 分钟前
C/C++实现植物大战僵尸(PVZ)(打地鼠版)
c语言·开发语言·c++·算法·游戏
CPP_ZhouXuyang31 分钟前
C语言——模拟实现strcpy
c语言·开发语言·数据结构·算法·程序员创富
闻缺陷则喜何志丹32 分钟前
【C++前后缀分解 动态规划】2100. 适合野炊的日子|1702
c++·算法·动态规划·力扣·前后缀分解·日子·适合
aimmon35 分钟前
深度学习之微积分预备知识点
人工智能·深度学习·线性代数·微积分
逝去的秋风1 小时前
【代码随想录训练营第42期 Day57打卡 - 图论Part7 - Prim算法与Kruskal算法
算法·图论·prim算法