RAG文档解析版面还原与表格抽取质量治理落地

日期:2026-08-08

一、项目背景

客户是一家做工程建设的集团公司,去年建了内部知识库,把历年的技术规范、施工方案、质量验收标准、招投标文件全塞进去做检索问答,文档总量三万八千多份,绝大部分是 PDF。

上线之后用的人很少。我们去调研,工程部一位技术主管直接打开电脑给我演示:问"高强螺栓的扭矩系数检验批次怎么定",系统答了一段看着挺像回事的话,但数字是错的。他翻出原始规范给我看,正确答案在一张跨了两页的表格里,而系统检索到的内容是把表格拆得七零八落的一堆字符。

我们抽了两百份文档做人工体检,问题集中在几类:扫描件走 OCR 之后段落顺序全乱;双栏排版被按整行读取,左右两栏的句子交替混在一起;跨页表格被切成两段,表头丢失;带公式的段落解析出一堆乱码;图注和正文混在一起。这些问题在检索阶段看不出来,在回答阶段集中爆发。

说白了,知识库的地基是解析质量,地基塌了,上层的向量模型和重排模型再好也救不回来。

二、落地场景

我们在客户已有的 AI 私有化底座上重做了文档解析这一层,检索和问答部分基本没动。

解析流水线拆成几段。先做文档分类,判断是原生 PDF 还是扫描件,走不同路径。原生 PDF 直接提取文本层和坐标,扫描件走 OCR。

接着是版面分析,用视觉模型识别页面上的区域类型:标题、正文段落、表格、图片、图注、页眉页脚、公式。识别出区域后按阅读顺序重排,双栏排版在这一步被正确处理。

表格是单独一条支线。检测到表格区域后做单元格结构识别,还原行列关系和合并单元格,输出结构化格式。跨页表格做了专门的合并判断:下一页首个表格如果列数和列宽与上一页末尾表格一致,且上一页表格没有明确的表尾标识,就判定为续表,合并时补上表头。

解析完成后进质量打分环节,给每份文档打一个解析质量分。分数低的进人工校正队列,校正结果回流用于优化规则和模型。

最后才是切片、向量化、入库。切片策略也做了调整,表格作为整体不切分,段落按语义边界切而不是按固定字数切。

三、关键技术挑战与解决思路

版面还原里最难缠的是阅读顺序。视觉模型能框出区域,但区域之间的先后关系要靠规则推断。单栏文档很简单,从上到下。双栏就复杂了,得先判断是几栏、栏的边界在哪、有没有跨栏的标题或图表。我们的做法是先用区域坐标做投影分析,统计水平方向上的空白间隙,找到栏分隔线,再按栏分组、组内从上到下、组间从左到右排序。跨栏元素单独识别,插入到它纵向位置对应的地方。

这套规则在标准双栏文档上效果很好,在混合排版上会翻车。有一类文档上半页单栏、下半页双栏,投影分析会把整页误判成双栏。后来加了分区检测,按水平方向的完整分隔线把页面先切成若干带,每个带独立做栏分析。这个补丁是被一份施工方案逼出来的,那份文档前三页正常,第四页开始变成混合排版,解析结果完全错乱。

跨页表格的合并判断我们改过三版。第一版只看列数一致就合并,误合并了很多相邻但无关的表格。第二版加了列宽相似度,好一些但仍有误判。第三版引入了上下文:看上一页表格末尾行是否完整、下一页表格首行是否像表头、两页之间有没有插入新的标题。三个信号加权判定,误合并率从百分之十二降到百分之二点三。这个数字是拿一千份含跨页表格的文档人工核对出来的。

解析质量评估是我觉得这个项目里最有价值的一块。没有质量分,就不知道哪些文档需要人工介入,只能全量抽检,成本太高。我们设计的质量分是几个可自动计算的信号加权:文本连续性(相邻段落之间是否有语义断裂)、表格结构完整性(是否有空行空列、单元格数是否匹配)、字符异常率(乱码字符和非常规符号的占比)、版面覆盖率(识别出的区域面积占页面比例)。这几个信号跟人工判断的相关性做过验证,相关系数在零点八以上,够用了。

公式处理我们最后没做完美。数学公式转 LaTeX 的准确率只有百分之六十多,索性改成保留公式图片并生成一段文字描述,检索时靠描述命中,用户点开看原图。这算是个妥协方案,但比输出乱码强。

案例片段(已脱敏): 一份被质量分拦下来的文档:某地基处理技术规范.pdf 解析质量分 41 分(阈值 60),明细为文本连续性 0.52、表格结构完整性 0.31、字符异常率 0.14、版面覆盖率 0.88。人工校正发现该文档是十年前的扫描件,OCR 把表格里的"φ"识别成了"of",导致钢筋直径全部错误。校正后重新入库,相关问答的准确率从 0 提到可用。 跨页表格合并的一次判定:第 17 页末尾表格 8 列,末行完整;第 18 页首个表格 8 列,列宽差异 2.1%,首行内容与第 17 页表头相似度 0.11(不像表头),两页之间无新标题。综合判定为续表,合并并为第 18 页部分补上第 17 页表头,合并后该表格作为整体切片入库。

四、效果数据

重做解析层之后三个月的复盘数据。文档解析准确率,按人工抽检五百份的段落级正确率算,从原来的百分之六十四提到百分之九十一。表格还原率,也就是表格结构完全正确的比例,从百分之三十八提到百分之八十六,跨页表格单独统计从百分之九提到百分之七十九。

问答命中率是业务最关心的指标,从百分之五十二提到百分之八十三。这里的命中定义是用户对答案点了有用,或者没有追问同一问题。

人工校正的工作量控制得还不错。三万八千份文档里被质量分标记为需校正的有四千一百多份,占比百分之十点八,三个人花了六周处理完。如果没有质量分做筛选,全量人工过一遍按当时的人力估算要接近一年。

知识库的日活从上线初期的三十几人涨到两百六十多人,这个数字比任何技术指标都说明问题。以上数据为项目复盘口径,已脱敏处理。

五、可复用经验总结

做 RAG 项目,如果效果不好,先怀疑解析而不是模型。我们接手时客户已经换过两轮 embedding 模型、加过重排,效果都没大改善,因为问题根本不在那一层。这个判断顺序很重要,很多团队会本能地往模型上调,因为那是熟悉的领域。

质量分这个东西建议每个 RAG 项目都做。它的价值不在于评估得多准,而在于把人工资源用在刀刃上。全量人工检查不现实,随机抽检漏得多,按质量分排序介入是性价比最高的方式。

不要追求所有文档类型都完美解析。公式那块我们做到百分之六十多就停手了,改成保留原图加文字描述,业务能接受。工程上要有止损意识,边际收益低的地方及时收手,把精力放在表格这种高价值高频次的场景上。

规则和模型要配合。纯规则处理不了版面的多样性,纯模型在阅读顺序这类强逻辑任务上又不稳定。视觉模型负责识别区域,规则负责排序和合并判断,这个分工在我们这个项目里效果最好。

人工校正的结果一定要回流。我们把校正前后的差异做成了案例库,用来发现共性问题。前面提到的混合排版补丁和跨页表格判定第三版,都是从校正案例里发现的。不建这个回流通道,同样的错误会一直重复。

附:工程落地细节

版面分析的视觉模型跑在底座的 GPU 池上,批量处理,单页平均耗时一百八十毫秒,三万八千份文档全量重跑一遍大约三十小时,分了两个周末跑完。OCR 引擎针对工程文档做了词典增强,把常见的专业术语和符号加进去,识别准确率提了几个百分点。表格结构识别输出的是带合并单元格信息的中间格式,入库时转成两份,一份保留结构给用户查看,一份线性化成文本给向量化用。切片策略上,表格整体不切,超长表格按行分组切但每片都带表头。质量分的计算是解析完成后的独立任务,不阻塞入库流程,低分文档先入库并打标,校正后覆盖。人工校正工具做得很简单,左边原文右边解析结果,支持段落级和单元格级的直接编辑。

附:一点实在的提醒

老文档的坑比新文档多得多。这个客户三万八千份里有近一万份是二零一五年以前的扫描件,纸张泛黄、盖章遮挡、装订孔穿字,OCR 再好也有极限。我们在项目中期一度想把这批老文档的解析准确率也拉到九成,投入产出比很差,后来改成按业务访问频次排序,只精修最常被检索的那部分。剩下的低频老文档保持现状并在检索结果里标注"该文档解析质量较低,建议查阅原件"。诚实地告诉用户系统的边界,比假装什么都能答要好。