Appearance
用于文字、表格、图片RAG的多向量检索器
如需转载,请联系微信群主
摘要
跨不同数据类型(图片
、文本
、表格
)进行无缝问答是 RAG
的圣杯之一。我们发布了三本新的实用指南,展示了在包含多种内容类型的文档上使用RAG
的多向量检索器。这些实用指南提供了一些将多模态LLM
与多向量检索器配对以实现图片上的RAG
的想法。
实用指南:
上下文
LLM
至少可以通过两种方式获取新信息:
(1) 权重更新(例如,微调)
(2) RAG
(检索增强生成),它通过提示词将相关上下文传递给LLM
。RAG
对事实召回有着很好的前景,因为它将LLM
的推理能力与外部数据源的内容结合在一起,这对于企业数据来说特别强大。
改进RAG
的方法
已经开发了许多改进 RAG
的技术:
想法 | 示例 | 来源 |
---|---|---|
基本RAG | 对嵌入的文档块进行 Top K 检索,将检索出的文档传递给 LLM 上下文窗口。 | LangChain 向量存储,嵌入模型 |
摘要嵌入 | 对嵌入的文档摘要进行 Top K 检索,将检索出的文档摘要对应的全文传递给 LLM 上下文窗口。 | LangChain 多向量检索器 |
窗口化 | 对嵌入的块或句子进行 Top K 检索,将检索出的扩展文本(例如检索出的文本和前后文本)或完整文档传递给LLM 上下文窗口。 | LangChain 父文档检索器 |
元数据过滤 | 多文档N选1,多路召回,将用户意图和文档元数据(文档描述)进行匹配,再在匹配出的文档中进行Top K 召回。 | 自查询检索器 |
微调 RAG 嵌入 | 在您的数据上微调嵌入模型。 | LangChain 微调指南 |
两阶段RAG | 第一阶段关键词搜索,然后是第二阶段语义 Top K 检索。 | Cohere 重排序 |
将 RAG
应用于各种数据类型
现在,对于包含半结构化数据(带有非结构化文本的结构化表格)和多种模态(图片)的文档的 RAG
仍然是一个挑战。随着多个多模态模型的出现,现在值得考虑统一的策略来实现夸多种模态(图片)和半结构化数据的RAG
。
多向量检索器
在今年八月,我们发布了多向量检索器。它运用了一个简单而强大的 RAG
(检索增强生成)概念:将用于答案生成的文档,与用于检索的参考文档分离开来。举个简单的例子:我们可以为一篇冗长的文档创建一个优化后的摘要,摘要用于基于向量的相似性搜索,但仍然将摘要对应的完整的文档传递给 LLM
(大语言模型),以确保在答案生成过程中不会丢失上下文信息。这里我们展示了这种方法不仅对纯文本有效,还可以广泛应用于表格或图片,以支持 RAG
。
深刻理解上图:
- 将文档中的图片、表格和文本分割开来。
- 分别对图片、表格和文本进行摘要总结。对于图片,我们可以使用多模态模型进行解读,形成摘要。
- 在向量数据库中存储图片、表格和文本的摘要向量化数据,用于检索。同时在文档存储中存储原始图片、表格和文本数据。
- 根据用户的问题在向量化数据库中进行向量化匹配召回对应的摘要,再返回摘要对应的原始数据(图片、表格和文本)。
文档加载
当然,要实现这种方法,首先需要能够将文档划分为不同的类型。Unstructured
是一种出色的 ELT
(提取-加载-转换)工具,非常适合这个任务,因为它能够从多种文件类型中提取不同元素(如表格、图片、文本)。
例如,Unstructured
将通过先移除所有嵌入的图片块来划分 PDF
文件。然后,它会使用布局模型(YOLOX
)来获取边界框(如表格)和标题,这些标题是文档的候选子部分(例如,Introduction
等)。接下来,它将进行后处理,将属于每个标题的文本聚合,并根据用户指定的标记(如最小块大小等)进一步将文本分块,以便于下游处理。
半结构化数据
Unstructured
文件解析和多向量检索器的结合可以支持半结构化数据上的 RAG
(检索增强生成),这对于表格的简单分块策略来说是一个挑战。也就是说直接将表格本身进行向量化是个挑战(表格本身含有一些边框等),我们会首先生成表格元素的摘要,更适合自然语言检索。通过语义相似度检索表格摘要匹配用户的问题,摘要对应的原始表格则会传递给 LLM
以用于答案生成,如上所述。请参见下方使用指南:
深刻理解上图:
- 将文档中的表格和文本分割开来。
- 分别对表格和文本进行摘要总结。
- 在向量数据库中存储表格和文本的摘要向量化数据,用于检索。同时在文档存储中存储原始表格和文本数据。
- 根据用户的问题在向量化数据库中进行向量化匹配召回对应的摘要,再返回摘要对应的原始数据(表格和文本)传递给
LLM
上下文,形成回答。
多模态数据
我们可以更进一步,将图片考虑在内,这种功能随着多模态模型 LLM
(如 GPT4-V
)和开源模型(如 LLaVA
和 Fuyu-8b
)的推出而逐渐变得可行。至少有三种方法可以处理这个问题,这些方法都利用了上述的多向量检索框架:
选项 1:使用多模态嵌入(和文本嵌入模型
text_embedding
,不一样,它可以嵌入图片和文本)(例如 CLIP)将原始图片和文本一起嵌入到向量数据库中。同时在文档存储中存储对应的原始图片和文本。使用相似度搜索进行检索,获取文档存储中对应的图片。将原始图片和文本块传递给多模态LLM
生成回答。选项 2:使用多模态
LLM
(如GPT4-V
、LLaVA
或Fuyu-8b
)对图片生成文本摘要。使用文本嵌入模型对文本摘要进行嵌入和检索。同样,可以从文档存储中引用原始文本块或表格供LLM
用于生成答案;在这种情况下,我们排除文档存储中的图片(例如,无法实际使用多模态LLM
进行合成)。理解:选项2,使用多模态模型解读图片,生成图片的摘要文本。在文档存储中只会存储原始文本(包括文本和图片摘要)和表格,并不会在文档存储中存储图片本身。
选项 3:使用多模态
LLM
(如GPT4-V
、LLaVA
或Fuyu-8b
)对图片生成文本摘要。嵌入并检索带有原始图片引用的图片摘要,类似于选项 1 中的操作。再次将原始图片和文本块传递给多模态LLM
进行答案生成。如果不想使用多模态嵌入,这个选项是合理的选择。
选项3和1的区别在于,选项3不直接嵌入图片本身,而是嵌入图片摘要。
我们使用70亿参数的 LLaVA
模型测试了 选项2 以生成图片摘要。LLaVA
最近已添加到llama.cpp
中,这使得它可以在消费类笔记本电脑(Mac M2 max
,32gb
,约 45
个 token/秒
)上运行,并生成合理的图片摘要。例如,对于下面的图片,它捕捉到了有趣的信息:图片显示了一个装满各种炸鸡块的托盘的特写镜头。鸡块的排列方式类似于世界地图,一些鸡块放置成大陆的形状,另一些则作为国家。鸡块的排列方式创造了一种视觉上吸引人且俏皮的世界表现形式。
我们将图片摘要以及表格和文本摘要存储在多向量检索器中。
如果你想保护数据隐私,私有化部署,可以在消费者笔记本电脑上使用开源组件本地运行这个RAG
管道,使用LLaVA 7b
进行图片摘要,Chroma
向量存储,开源嵌入(Nomic
的GPT4All
),多向量检索器,以及通过Ollama.ai
的LLaMA2-13b-chat
进行答案生成。
结论
我们展示了多向量检索器可用于支持半结构化 RAG
以及包含多模态数据的半结构化 RAG
。我们还展示了可以使用开源组件在消费类笔记本电脑上本地运行此完整管道。最后,我们提出了三种用于多模态 RAG
的通用方法,这些方法利用多向量检索器概念,运用于未来的实用指南中。
如需转载,请联系微信群主
加群:
扫描下方二维码加好友,添加申请填写“ai加群”,成功添加后,回复“ai加群”或耐心等待管理员邀请你入群