后期分块:颠覆传统的新思路
先用一个长上下文嵌入模型(比如 jina-embeddings-v2-small-en,具有 8K 上下文长度)"读懂"整个文档 然后再把这个"理解"切成小块
而“后期分块”方法首先将嵌入模型的转换层应用于整个文本或尽可能多的文本。这为文本中的每个标记生成了一个包含整个文本信息的向量表示序列。随后,对这个标记向量序列的每一部分应用平均池化,产生考虑整个文本上下文的每个部分的嵌入。与生成独立同分布(i.i.d.)分块嵌入的简单编码方法不同,后期分块创建了一组分块嵌入,其中每个嵌入都“依赖于”之前的嵌入,从而为每个分块编码了更多的上下文信息。
这就好比你先通读了一本书,理解了整体内容,然后再给每一章写摘要,而不是仅仅看了每章的标题就开始总结。
传统方法和后期分块的对比:
方法 | 步骤 | 优点 | 缺点 |
---|---|---|---|
传统方法 | 1.分块 2.理解 | 计算效率高 | 可能丢失上下文信息 |
后期分块 | 1.理解 2.分块 | 理解更全面 | 需要更强大的AI模型 |
以此为例:爱丽丝有一天在树林里散步,途中她发现了一样东西。她看到一棵大树底部有一个兔子洞。她掉进了洞里,发现自己来到了一个陌生的新世界。如果我们将这个段落分句,我们会得到:
1.爱丽丝有一天在树林里散步,她在散步中发现了一些东西。
2.她在一棵大树的底部看到了一个兔子洞。
3.她掉进了洞里,发现自己在一个陌生的新世界里。
现在想象一下,用户已经将多个文档、书籍的段落甚至多本书填充到他们的向量数据库中。如果他们问“爱丽丝在哪里掉下去的”,作为人类,我们能直观地理解句子 3 中的“她”指的是句子 1 中的爱丽丝。然而,由于这些嵌入是独立创建的,模型对句子 3 的表示无法考虑到与名字爱丽丝的关系。
后期分块的过人之处
保留上下文:就像你读完整本书再总结,而不是只看目录就下结论,后期分块能更好地理解文章的整体意思[1]。
存储更高效:比起其他高级方法,后期分块既能保留文章的整体意思,又不会占用太多存储空间[1]。
方法 | 每个文档的嵌入数量 | 总嵌入数量 | 存储空间 |
---|---|---|---|
后期交互 | 8,000 | 8亿 | 约2.46 TB |
传统方法(在推理之前进行切片) | 16 ( 8,000 / 512 ) | 160万 | 约4.9 GB |
后期分块 | 16 ( 8,000 / 512 ) | 160万 | 约4.9 GB |
可以看出,传统方法只需要与延迟交互相比存储资源的 1/500。后期交互,虽然更加精确,但需要显著更多的存储容量。后期分块可以与传统方法一样减少存储需求,同时保留后期交互所提供的上下文信息,既能保留文章的精髓,又不会占用太多空间,简直是鱼与熊掌兼得!
简单易用:只需稍微调整一下现有的AI系统,就能用上这个新技术,不需要大动干戈,这里是项目地址[2]和colab例子[3]。
实际效果如何?
Weaviate 的原生、多租户架构为需要在保持快速检索和准确性的同时优先考虑数据隐私的客户提供优势。
如下:
分块 | 内容 |
---|---|
chunk1 | ...技术堆栈的演变。这种灵活性,结合易于使用,帮助团队更快地将 AI 原型部署到生产环境中。在架构方面,灵活性也至关重要。不同的应用场景有不同的需求。例如,我们与许多软件公司以及在受监管行业中运营的公司合作。他们通常需要多租户功能来隔离数据并保持合规性。在构建检索增强生成(RAG)应用程序时,使用特定于帐户或用户的数据显示结果的上下文,数据必须保留在为其用户组专用的租户内。Weaviate 的原生、多租户架构对于需要优先考虑此类需求的客户来说表现卓越。 |
chunk2 | ..在保持数据隐私的同时,实现快速检索和准确性。另一方面,我们支持一些非常大规模的单租户使用案例,侧重于实时数据访问。这些案例中的许多都涉及电子商务和以速度和客户体验为竞争点的行业。 |
假设有人问:"客户最关心什么?"
方法 | AI的回答 |
---|---|
传统方法 | 1. "产品更新,参加我们的网络研讨会。" (得分: 75.6) 2. "在保证速度和准确性的同时注重数据隐私。我们支持一些大规模单租户用例,主要在电子商务和那些速度和客户体验至关重要的行业。" (得分: 70.1) |
后期分块 | 1. "客户需求多样,我们引入了不同的存储层。看到客户的产品越来越受欢迎真是令人惊叹。但随着用户增长,成本可能会急剧上升..." (得分: 74.8) 2. "技术选择至关重要。灵活性和易用性有助于团队更快地实施AI。不同的用例有不同的需求。例如,软件公司和受监管行业通常需要多租户来隔离数据并确保合规。在构建AI应用时,使用特定用户数据来个性化结果很重要。Weaviate的多租户架构在这方面表现出色。" (得分: 68.9) |
显然,后期分块方法给出的答案更加全面和贴切,更能抓住问题的核心。
对开发者的启发
不用再为如何巧妙地切分文本而绞尽脑汁了。 用更少的钱就能处理更长的文本,性价比杠杠的! 实现起来超级简单,几十行代码就搞定,不用大改现有系统。 能给AI提供更精准的信息,让AI回答问题时更加准确高效。
总结
后期分块技术为处理长文本提供了一个既聪明又实惠的新方案。它不仅能更好地理解文章的整体意思,还能大大节省存储和计算成本。对于那些想要构建大规模AI应用的开发者来说,这绝对是一个值得尝试的新方向。随着技术的不断进步,我们有理由相信,后期分块将在未来的AI应用中发挥越来越重要的作用。
参考资料
后期分块(Late Chunking): https://jina.ai/news/late-chunking-in-long-context-embedding-models/
[2]项目地址: https://github.com/jina-ai/late-chunking
[3]colab例子: https://colab.research.google.com/drive/15vNZb6AsU7byjYoaEtXuNu567JWNzXOz?usp=sharing&ref=jina-ai-gmbh.ghost.io
[4]测试: https://weaviate.io/blog/late-chunking
[5]文章: https://weaviate.io/blog/launching-into-production
后台回复“进群”入群讨论