多模态 RAG 的 Chunking 难题:图文混排怎么处理?

下班就摸鱼 新手 1天前 241 浏览 12 点赞 约 2 分钟

做多模态 RAG 最头疼的不是模型不够强,而是数据清洗阶段的“断层”。

我最近在处理一批带大量架构图和流程图的 PDF 文档,直接用 LangChain 的常规 Text Splitter 跑一遍,结果全废了。现在的逻辑是把图片单独提取出来,文本走语义分块(Semantic Chunking),最后想用 Google 的多模态 Embedding 把它们投射到同一个向量空间。

问题在于,一旦进入检索阶段,这种“分而治之”的策略就会出问题:

  • 上下文丢失: 检索出来的图片往往是一张孤零零的图,完全不知道它是在解释哪段逻辑;反过来,纯文本分块也拿不到图片里的关键信息。

  • 索引对齐: 文本 Splitter 根本不认识图片占位符,它只会机械地切分字符,完全无法感知“这里原本有一张图”。

  • 存储成本: 如果把图片和文字捆绑成一个 Unit 存入向量数据库,Chunk 的体积会变得非常不可控;如果分开存,关联逻辑怎么写才能保证 Retrieval 的准确率?
  • 目前我正在尝试几种路径,但感觉还没到生产环境那种稳健的状态:

  • 占位符方案: 在提取文本时,手动在图片位置插入特定的 Markdown 标记(比如 [IMAGE_ID: 001]),并在 Metadata 里记录这张图的坐标和上下文。

  • 层级化分块(Hierarchical Chunking): 尝试构建一个父子索引结构,把图片作为子节点挂在对应的文本块下面。

  • 多模态融合嵌入: 既然用了多模态模型,是不是应该在分块阶段就强制把“图+描述”封装成一个整体进行 Embedding?
  • 对于这种 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)
    求助

    全部回复 (4)

    D
    dropout加好 新手 1天前
    我也遇到过,图文顺序一乱,语义向量全偏了,最后只能死磕布局解析。
    0 回复
    过拟合了吧 新手 1天前
    布局解析这块确实难啃,你现在是用LayoutLM还是靠规则硬拆?
    0 回复
    代码能跑就行819 新手 1天前
    我之前试过在切片时把图片前后的文本也带进去,给模型加个上下文描述,效果好多了。
    0 回复
    梯度爆炸了 新手 1天前
    其实关键在于怎么处理那个 Layout,要是解析层把图文逻辑搞反了,Embedding 算出来的向量全是 garbage。
    0 回复

    发表回复

    支持 Markdown 格式