Skip to content

大模型(LLMs)RAG 版面分析——表格识别方法篇

📝 笔记来源:AiGC面试宝典 📝 整理日期:2024年8月11日


一、为什么需要识别表格?

表格的尺寸、类型和样式展现出多样化的特征,如背景填充的差异性、行列合并方法的多样性以及内容文本类型的不一致性等。同时,现有的文档资料不仅涵盖了现代电子文档,也包括历史的手写扫描文档,这些文档在样式设计、光照条件以及纹理特性等方面存在显著差异。因此,表格识别一直是文档识别领域的重大挑战。

📝通俗解释:表格识别之所以困难,是因为表格的形式太多了——有的有边框,有的只有横线,有的完全没有线条,还有的可能是手写的古老文件。就像我们人眼看到不同格式的表格都能理解,但让计算机正确识别它们就需要克服很多挑战。

下图所示为五种不同类型的表格示例:

表格类型示例说明
左上:有颜色背景的全线表带有蓝色表头的工程数据表,有完整的边框线
右上:少线表统计模型对比表,只有少量横线分隔
左中:无线表财务报表片段,无竖线,靠缩进和对齐区分层级
左下:复杂线条样式表格带有红黑线条的统计表格,表头包含时间和分类维度
右下:手写历史文档泛黄纸张上的手写表格,可能是历史账本

二、介绍一下表格识别任务?

表格识别包括表格检测表格结构识别两个子任务。

表格识别过程可细分为两个关键步骤:

1. 表格定位(Table Localization)

此阶段涉及识别并划定表格的整体边界,采用的技术手段包括但不限于目标检测算法,如 YOLO、Faster RCNN 或 Mask RCNN,甚至有时借助生成对抗网络(GAN)来精确勾勒出表格的外在轮廓。

📝通俗解释:就像在一张报纸上找到表格在哪里。首先要确定表格的范围——它占多大面积,在哪个位置。这步是"粗略定位",先找到表格大致在哪里。

2. 表格元素解析与结构重建(Table Element Parsing and Structure Reconstruction)

(1)表格单元格划分(Cell Detection)

这一子任务着重于识别和区分表格内部的各个单元格,不论它们是由连续线条完全包围还是部分包围,抑或是无明显线条分隔。

📝通俗解释:确定表格里有哪些格子。有的格子有完整的边框,有的只有部分边框,有的完全没有边框(靠空白分隔),都需要识别出来。

(2)表格结构理解(Table Structure Understanding)

在此环节中,系统深入分析表格区域以提取其中的数据内容及其内在逻辑关系,明确行与列的分布规律以及单元格之间的层次关联,最终实现对表格原始结构的高度准确复原。

📝通俗解释:理解表格的"逻辑结构"——哪是表头、哪是数据、哪些单元格合并了、哪些行属于同一类别等。这就像理解表格的含义而不仅仅是看到它的样子。


三、有哪些表格识别方法?

3.1 传统方法

利用规则指导和图像处理技术,执行如下步骤以识别结构:

  1. 应用腐蚀与膨胀算法:来细化和增强目标区域边界特征
  2. 连通性分析:通过分析像素连通性,确定并标记图像中的各个显著区域
  3. 线段检测:实施线段检测和直线拟合技术,精确描绘出图像内的线性结构元素
  4. 交点计算:计算这些线性结构之间的交点,以此构建可能的边框或连接关系网络
  5. 边界框合并:合并初步检测到的边界框,运用智能合并策略减少冗余并提高精度
  6. 尺寸筛选:根据尺寸筛选优化,剔除不符合预期大小条件的候选区域,从而获得更为准确的目标识别结果

📝通俗解释:传统方法就像"人海战术"——用各种图像处理技巧一步步"猜"出表格结构。先找到线条,再找线条交叉点,再把交叉点围成的区域当作格子。这种方法对简单表格有效,但对复杂表格(如无线表)效果较差。


3.2 pdfplumber 表格抽取

📝通俗解释:pdfplumber 是一个专门从 PDF 文件中提取表格的工具包,它不是用深度学习,而是用纯图像处理和文本分析的方法。

3.2.1 pdfplumber 如何进行表格抽取?

  1. 第一步:因为表格及单元格都是存在边界的(由可见或不可见的线表示),所以 pdfplumber 首先找到可见的或猜测出不可见的候选表格线

  2. 第二步:因为表格以及单元格基本上都是定义在一块矩形区域内,所以 pdfplumber 根据候选的表格线确定它们的交点。根据得到的交点,找到它们围成的最小的单元格。把连通的单元格整合到一起,生成一个检测出的表格对象

📝通俗解释:想象你在玩"连连看"——先找到所有可能的线条(可见的或猜测的),再找到线条的交叉点,最后把交叉点围成的区域当作一个个小格子,把相邻的格子组合成一个表格。

3.2.2 pdfplumber 常见的表格抽取模式?

模式一:Lattice(适用于有线框的表格)

  1. 把 PDF 页面转换成图像
  2. 通过图像处理的方式,从页面中检测出水平方向和竖直方向可能用于构成表格的直线
  3. 根据检测出的直线,生成可能表格的 bounding box
  4. 确定表格各行、列的区域
  5. 根据各行、列的区域,水平、竖直方向的表格线以及页面文本内容,解析出表格结构,填充单元格内容,最终形成表格对象

📝通俗解释:Lattice 模式就像"按图索骥"——先找到所有线条(表格线),然后根据线条来确定哪些区域是格子。这种方法适合有明显边框的表格。

模式二:Stream(适用于无线框的表格)

  1. 通过 pdfminer 获取连续字符串(串行)
  2. 通过文本对齐的方式确定可能表格的 bounding box(文本块)
  3. 根据文本的对齐方式和间距来确定表格的行列结构
  4. 根据各行、列的区域以及页面上的文本字符串,解析表格结构,填充单元格内容,最终形成表格对象

📝通俗解释:Stream 模式就像"看字猜表"——不找线条,而是看文字怎么排列。文字左对齐的可能是同一列,文字上下对齐的可能是同一行。这种方法适合没有边框线的表格(如财务报表)。


3.3 深度学习方法-语义分割

📝通俗解释:深度学习方法就像"训练一个AI大脑"——给机器看大量表格图片,让它自己学习什么是表格、什么是格子。目前主流是用"语义分割"技术,即给图片每个像素打标签(是线、不是线、是格子、不是格子)。


3.3.1 table-ocr / table-detect:票据图片复杂表格框识别

table-ocr(GitHub: chineseocr/table-ocr)

  • 思路:运用 UNet 实现对文档表格的自动检测和表格重建
  • 原理:将表格检测问题转化为图像分割问题,UNet 可以端到端地输出表格区域和单元格位置

📝通俗解释:UNet 是一种"编码器-解码器"结构的神经网络。想象它先把图片"压缩"理解重点,再"还原"成一张标记了表格区域的图。类似于把一张照片变成一张标注了"这里是表格"的简笔画。

table-detect(GitHub: chineseocr/table-detect)

  • 思路:采用两阶段检测方案 —— YOLO(表格检测)+ UNet(表格线/单元格定位)
    • 第一阶段:用 YOLO 检测出表格的整体位置
    • 第二阶段:用 UNet 细分出表格内部的线条和单元格

📝通俗解释:这个方法像"分工合作"——先用 YOLO 快速找到表格在哪里(粗定位),再用 UNet 精细地画出每个格子的边界(精确定位)。YOLO 速度快,UNet 精度高,两者结合效果更好。


3.3.2 腾讯表格图像识别

GitHub: tommyMessi/tableImageParser_tx

  • 思路:图像分割,分割类别是 4 类

    • 横向的可见线
    • 竖向的可见线
    • 横向的不可见线
    • 竖向的不可见线
  • 特点:类间并不互斥,每个像素可能同时属于多种类别。这是因为线和线之间有交点,交点处的像素同时属于多条线

  • 模型对比:对比了 DeepLab 系列、FCN、UNet、SegNet 等,收敛最快的是 UNet

  • 效果评估:已测试,效果较差

📝通俗解释:腾讯的方案把表格识别变成"四分类问题"——每个像素判断是横线、竖线、还是两者的交叉点。这种方法理论上很优雅,但实际效果不太理想,可能是因为表格样式太复杂,简单的分类难以覆盖所有情况。


3.3.3 TableNet

简介:TableNet 是一个现代深度学习架构,由 TCS 研究团队在 2019 年提出。主要动机是通过手机或相机从扫描的表格中提取信息。他们提出了一个解决方案,包括准确检测图像中的表格区域,然后检测和提取表格行和列中的信息。

📝通俗解释:TableNet 的核心思想是"一鱼两吃"——用一个共享的"编码器"网络同时学习表格检测和列检测,然后用两个"解码器"分支分别输出表格区域和列区域的掩码。这样可以充分利用表格和列之间的关联信息。

数据集:使用的数据集是 Marmot(马莫特),包含 2000 页 PDF 格式的文档及对应的标注数据

架构

  • 该体系结构基于 VGG-19 网络,作为编码器-解码器模型的主干
  • 使用预训练的 VGG-19 网络权重,用 1×1 卷积层替换全连接层
  • 所有卷积层后跟 ReLU 激活和概率 0.8 的 Dropout 层
  • 解码网络由两个分支组成:
    • 分支一:输出表格区域的掩码
    • 分支二:输出列区域的掩码(表格区域的子集)

📝通俗解释:架构可以想象成"流水线"——图片先进编码器"压缩理解",然后分两条线分别"还原"成表格掩码和列掩码。两个输出可以互相帮助,因为列总是在表格里面的。

输出:使用模型处理文档后,将生成表格和列的掩码。这些蒙版用于从图像中筛选出表格及其列区域,然后使用 Tesseract OCR 从分段区域中提取信息

效果

  • 原始模型:召回率 0.9621、精确率 0.9547、F1 分数 0.9583
  • 微调后(与 ICDAR 数据集联合训练):召回率 0.9628、精确率 0.9697、F1 分数 0.9662

📝通俗解释:TableNet 的效果还是不错的,F1 分数接近 97%。但它有个局限——只能检测表格和列,不能检测行也不能识别合并单元格。


3.3.4 CascadeTabNet

介绍:一种基于端到端深度学习的方法,使用级联掩码 R-CNN HRNet 模型来进行表格检测和结构识别。

主要优点

  1. 提出了级联网络:一种基于级联掩码区域的 CNN 高分辨率网络(Cascade mask R-CNN HRNet)模型,既能检测表格区域,又能从检测到的表格中识别结构信息

  2. 端到端解决:同时解决表格检测和表格识别两个子任务

  3. 实例分割:用实例分割解决表格检测,提高精度

  4. 迁移学习:展示了一种有效的基于迭代迁移学习的方法,可以帮助模型使用少量训练数据在不同类型的数据集上取得良好效果

📝通俗解释:CascadeTabNet 的核心创新是"级联"和"迁移学习"。级联就像"层层把关"——先用粗略模型检测表格区域,再用精细模型识别内部结构。迁移学习则是"站在巨人肩膀上"——先用大量数据训练一个通用模型,再在小数据上微调,这样即使训练数据少也能有不错的效果。

两阶段迁移学习策略

  • 第一阶段:使用 ImageNet / COCO 预训练模型权重初始化 CNN 模型,在大规模数据上学习通用特征
  • 第二阶段:在较小数据集上进行微调,完成更具体的任务——预测无边框表格中的单元掩码,并根据表格类型检测表格

📝通俗解释:想象你要学习识别表格——第一步(迁移学习第一阶段)就像先学会"看东西"(从 ImageNet 学通用视觉特征),第二步(迁移学习第二阶段)再专门学习"看表格"(微调成表格识别模型)。这样比从头学起更快更好。


3.3.5 SPLERGE

思想:一种先自顶向下、再自底向上的两阶段表格结构识别方法,分为 Split(分割)和 Merge(合并)两个部分。

  • Split 部分:先把整个表格区域分割成网格状结构,由两个独立的深度学习模型分别预测:

    • 行分割:预测每一列像素是否属于单元格间的分隔符区域
    • 列分割:预测每一行像素是否属于单元格间的分隔符区域
  • Merge 部分:对 Split 结果中的每对邻接网格对进行预测,判断它们是否应该合并(处理合并单元格的情况)

📝通俗解释:SPLERGE 的思路很巧妙——先"切"再"合"。第一步像切豆腐一样把表格切成一个个小格子(假设所有格子都是独立的),第二步再判断哪些相邻格子应该合并在一起(比如表头跨多列的情况)。这种"先分后合"的策略能很好地处理复杂的合并单元格。


3.3.6 DeepDeSRT

思路:DeepDeSRT 是一个神经网络框架,用于检测和理解文档或图像中的表格。它有两个解决方案:

  1. 表格检测:提供基于学习的深度解决方案,用于文档图像中的表格检测
  2. 结构识别:提供基于深度学习的表格结构识别方法,即识别检测到的表格中的行、列和单元格位置

📝通俗解释:DeepDeSRT 采取"分而治之"的策略——把表格检测和结构识别分开处理。检测用 Faster R-CNN(目标检测神器),结构识别用全连接网络+VGG-16(特征提取)。两个模块各司其职,互不干扰。

数据集:使用的数据集是 ICDAR 2013 表格竞赛数据集,包含 67 个文档,总页数为 238 页

结构

  1. 表格检测

    • 使用 Fast R-CNN 作为检测表格的基本框架
    • 第一部分:通过区域建议网络(RPN)生成区域建议
    • 第二部分:使用 Fast R-CNN 对区域进行分类
    • 使用 ZFNet 和 VGG-16 的权重进行预训练
  2. 结构识别

    • 成功检测到表格并了解其位置后,使用全连接网络与 VGG-16 的权重,从行和列中提取信息

📝通俗解释:DeepDeSRT 的结构可以想象成"两步走"——第一步用 RPN 找出"可能包含表格的区域"(类似雷达扫描),第二步用 Fast R-CNN 确认"这些区域是不是表格"(类似人工复核)。找到表格后,再用 VGG 网络分析表格的行列结构。


致谢

感谢 AiGC面试宝典 的知识分享


总结

方法类别代表方法特点
传统方法图像处理算法依赖规则,对简单表格有效
PDF 解析pdfplumber (Lattice/Stream)适用于 PDF 文档
深度学习-检测YOLO, Faster R-CNN定位表格位置
深度学习-分割UNet, TableNet, DeepLab像素级分类
深度学习-端到端CascadeTabNet同时完成检测和识别
两阶段方法SPLERGE先分割后合并

基于 MIT 许可发布