多模态 RAG 的 Chunking 难题:图文混排怎么处理?
做多模态 RAG 最头疼的不是模型不够强,而是数据清洗阶段的“断层”。上下文丢失: 检索出来的图片往往是一张孤零零的图,完全不知道它是在解释哪段逻辑;反过来,纯文本分块也拿不到图片里的关键信息。
索引对齐: 文本 Splitter 根本不认识图片占位符,它只会机械地切分字符,完全无法感知“这里原本有一张图”。
存储成本: 如果把图片和文字捆绑成一个 Unit 存入向量数据库,Chunk 的体积会变得非常不可控;如果分开存,关联逻辑怎么写才能保证 Retrieval 的准确率? 占位符方案: 在提取文本时,手动在图片位置插入特定的 Markdown 标记(比如
层级化分块(Hierarchical Chunking): 尝试构建一个父子索引结构,把图片作为子节点挂在对应的文本块下面。
多模态融合嵌入: 既然用了多模态模型,是不是应该在分块阶段就强制把“图+描述”封装成一个整体进行 Embedding?
下一篇
本地跑不起来,上线就是演戏:聊聊开发环境的“幻觉” →
我最近在处理一批带大量架构图和流程图的 PDF 文档,直接用 LangChain 的常规 Text Splitter 跑一遍,结果全废了。现在的逻辑是把图片单独提取出来,文本走语义分块(Semantic Chunking),最后想用 Google 的多模态 Embedding 把它们投射到同一个向量空间。
问题在于,一旦进入检索阶段,这种“分而治之”的策略就会出问题:
目前我正在尝试几种路径,但感觉还没到生产环境那种稳健的状态:
[IMAGE_ID: 001]),并在 Metadata 里记录这张图的坐标和上下文。对于这种 PDF 解析后“图文分离”导致的语义断裂,大家在实际部署时是怎么解决关联性的?是靠 Metadata 强行挂钩,还是有一套更硬核的解析流?
# 现在的处理逻辑大概是这样,但总觉得逻辑链条在检索时会断
from langchain.text_splitter import SemanticChunker这里的尴尬在于,SemanticChunker 根本感知不到图片的存在
text_splitter = SemanticChunker(embeddings)
docs = text_splitter.create_documents([pdf_extracted_text])提取出的图片和 docs 之间完全是弱关联
images = extract_images_from_pdf(pdf_path)