图文检索和语义库如何构建?
未标记
考查重点:跨模态表示与图文关联。解析图像与文本并保留关联,可用跨模态共享向量空间做相似检索,或分别检索再融合;用图找文与文找图样例检查匹配
本题目录
参考答案
核心回答
图文检索需要同时解决内容怎样表示和命中后怎样找回原始图文。建库时解析正文、图片和表格,保留文档、页码、图片与周围段落的关联;再选择图片描述加文本检索,或图文共享向量空间两类路线,建立语义索引。查询时在可访问范围内召回、融合和重排,最后通过关联标识取回原文、原图与引用位置。
这里的语义库不只是向量集合,还包括可检索内容、原始素材、来源关系与元数据。图片描述适合帮助检索,但可能遗漏画面细节;因此需要保留原图,而不能只存模型生成的一段话。
怎样选择图文表示
- 图片转文本:用视觉语言模型生成图片描述,用
OCR提取图中文字,再用文本Embedding建索引。适合产品手册、截图、流程图等以自然语言问答为主的场景;描述负责主要内容和关系,OCR补充型号、数字、标签等文字。以图找文时,也可以先把查询图片转换为文字再检索,但这会受描述遗漏影响。 - 图文共享向量空间:使用经过图文对齐训练的模型,例如
CLIP,分别编码图片与文字,再比较向量相似度,可支持文找图、图找文和图找图。图片向量与文本向量需要来自兼容的表示空间,不能仅因维度相同就把任意两种模型的输出直接比较。CLIP 论文说明了图像编码器、文本编码器与对比学习的关系。
也可以同时保留文字描述索引和图片向量索引,分别召回后融合排名。不同通道的原始分数未必可比,应校准分数或采用排名融合,再用与输入类型匹配的重排方式处理候选。是否增加图片向量通道,要用实际图片和问题评测;密集文字与精确数值仍需核对识别结果。
语义库怎样落地
- 解析并保留关联。 将正文、标题、图片、表格分开处理;记录文档标识、页码或其他可用定位、图片地址及关联段落。扫描件需要文字识别,多栏和表格还要恢复阅读顺序、行列与单位,单纯拼接识别出的字会破坏含义。
- 生成检索单元。 正文按语义切块;图片描述、图片文字可以各建一个检索单元,共同关联同一图片和来源段落。原图放对象存储,结构与关系保存在数据库,向量索引保留回查标识。这样可以用较短描述匹配问题,命中后取回完整证据。LangChain 多向量检索说明将检索用表示与回答用原始材料分开组织。
- 建立并维护索引。 文本向量负责语义相近表达,关键词索引补充型号、编号等精确匹配;元数据用于知识库、版本和权限过滤。文档更新、删除或停用时,同步处理其正文块、图片派生块与索引,避免检索到旧图或已删除素材。
- 还原图文上下文。 查询命中描述或图片文字后,沿关联标识取回原文及原图,去重并保留来源。如果回答依赖图中未被描述的细节,应让支持视觉输入的模型读取原图;仅使用文本模型时,回答范围取决于已经提取出的文字与描述。
怎样验证效果
用真实问题分别检查:该找的图片能否进入前几条、命中图片是否对应正确段落、图中文字和表格数字是否准确、引用能否回到原图。覆盖同义问法、型号精确匹配、同文档多张相似图片,以及更新或删除后的检索。支持图片查询时,再单独测试以图找文和以图找图;不能用“文找图成功”代替这些能力的验证。
对应教程
- 《从零开始学 AI 智能体》第 19 章:RAG 检索增强生成:参考离线加载、切分、向量化与存储的职责;本文补充图片表示和图文关联。
- 第 18 章:向量数据库与 Embedding 实战:参考元数据过滤、混合检索与重排序的分工。
参考资料
- 国内:JavaGuide:RAG 文档处理与切分策略:参考图片向量与图片描述两类路线,以及原始素材回查、关键字段和引用验证。
- 国内:WeKnora:文档处理流水线:参考图片转存、独立图片任务与派生检索块;具体调度和关联方式见下方源码说明。
- 国内:阿里云:文档理解:参考文本、版面、层级、表格和位置等结构化输出的区别;定位能力取决于实际解析方式。
- 国内:PaddleOCR:PP-StructureV3 产线介绍:参考文字识别与版面、表格、阅读顺序恢复的不同职责。
- 国外:CLIP:Learning Transferable Visual Models From Natural Language Supervision:参考图像与文本编码器通过对比学习形成可比较表示的机制。
- 国外:LangChain:Multi-Vector Retriever for RAG on tables, text, and images:参考检索表示与原始材料分离,以及图片描述检索和多模态向量检索的区别。
WeKnoraGo
核心回答
WeKnora 可以把文档图片转成可检索的文字,再关联回原图和来源段落。以图片描述与文字识别这条路线为例,图片处理结果分别写入 image_caption、image_ocr 子块,使用文本内容建立索引;子块通过 ParentChunkID 关联包含图片的文本块,并携带原图信息。命中子块后,系统补齐周围正文,组装带图片引用、识别文字与描述的上下文。
图片处理可以按开关执行,也可以选用 smartocr:先观察图片属性并生成描述,再按属性策略决定是否调用 OCR。因此,这条路线的关键是把图片变成可检索的语义文字,并保住图文关联,不依赖所有图片都进入共享图文向量空间。
从图片到检索块
文档解析后,ImageResolver.ResolveAndStore() 将图片写入存储并替换正文中的图片地址。多模态阶段按图片创建后台任务;ImageMultimodalService 读取原图,选择本次任务指定的处理流水线。图片提取与任务编排、单图处理。
默认流水线按各自开关执行描述和 OCR;smartocr 则通过一次观察调用取得属性和描述,再由 DecideOCR() 决定是否继续识别文字。观察失败时,默认采用保守策略继续 OCR,这项回退也可配置。默认流水线、按需 OCR。
有非空描述或识别文字时,处理器分别创建子块,将文字存入 Content,将图片地址等信息存入 ImageInfo,并保留来源定位和 ParentChunkID。在启用相应索引能力的知识库中,indexChunks() 把这些文字内容交给 Embedding 模型和检索引擎,提供描述匹配与文字匹配入口。子块构建、文字索引。
命中后怎样找回正确图文
合并阶段识别图片子块,先找到对应文本块;启用父子分块时,再补齐更大的 parent_text 内容。同时保留命中的识别文字,并按命中文本范围和图片地址收窄图片信息,避免把同一大段中的其他图片内容混进来。图片子块的父块解析。
例如检索产品手册中的“故障灯闪三次如何处理”:图片描述可提供故障灯与操作流程的语义,OCR 可提供图中的错误码和步骤文字;召回后需要保留这张图及其对应说明。验证时同时检查错误码是否识别正确、是否关联到正确图片、前提条件是否来自同一段说明。
与直接图片向量的区别
该版本也支持单独开启图片向量:知识库启用 ImageVectorEnabled,且向量模型与调用协议支持图片输入时,才会创建 image_vector 子块并写入原图向量。这项能力默认关闭,是与图片描述索引并存的另一条检索通道。能力开关、原图向量索引。
在普通问答流水线中,模型支持视觉输入时,系统会为图片向量命中的结果附加原图;仅命中描述不自动触发这项处理。对描述遗漏、数字读错等问题,应回查原图与图片处理结果,分别定位内容提取、召回和上下文关联的问题。原图附加条件。

