首页 > 教程攻略 > ai资讯 >表格数据合成—GOT_OCR数据合成

表格数据合成—GOT_OCR数据合成

来源:互联网 时间:2026-06-15 14:58:07

这一节我们重点聊聊表格数据是怎么合成的——这个问题在实际项目中经常碰到,很多朋友也问过。下面就把整个思路和具体操作拆开来讲。

表格数据现状

目前市面上比较常见的表格数据集,主要就这几个:

看下来,PubTabNet 算是相对适合做端到端训练的一个:既有表格布局信息,也包含单元格内部的文本。唯一的硬伤——

它是英文的

。那怎么办?不走合成路线的话,纯靠人工标注,时间和成本都撑不住。

在用 PaddleOCR 的过程中,发现它里面有个叫 TableGeneration 的表格生成工具,能生成各种样式的表格图片。具体效果可以看它的 GitHub 首页。这里简单列几个它存在的缺点(纯属个人观察):

  • 生成的表格内容通常没什么实际意义;
  • 和真实表格差异比较大,模型训练出来迁移能力一般。

但优点也很突出:速度快、量管够,而且不需要人工标注,这一点在数据紧缺时特别香。

latex 表格数据合成

我们这边选择用 latex 格式来表示表格,而不是 html。原因很简单:html 标记里

这种标签太多了,token 数量暴增,解码效率和训练速度都会受影响。

下面手把手走一遍生成流程。需要提前确认一下环境是否按照《环境准备-GOT_OCR数据合成》那节做好了准备——如果还没搞定,后面就只能先当理论看看了,因为环境没配好,图片是渲染不出来的。

第一步:检查环境

确认 latex 相关工具链已安装,确保 texlive 和必要的依赖都在。没有环境的话,代码跑不动。

第二步:先验数据准备

我们需要准备 PubTabNet 的英文数据,总共大约

50w

条表格记录。目标很明确:拿到

50w

条中文表格数据。量级相当可观。下载命令如下:

wget -O /PubTabNet.tar.gz https://dax-cdn.cdn.appdomain.cloud/dax-pubtabnet/2.0.0/pubtabnet.tar.gz

第三步:数据处理

首先要把 PubTabNet_2.0.0.jsonl 里每一行的表格结构转成 html 格式。下面是一段参考代码:

from bs4 import BeautifulSoup as bs
from html import escape

def format_html(line):
    ''' Formats HTML code from tokenized annotation of img '''
    html_code = line['html']['structure']['tokens'].copy()
    to_insert = [i for i, tag in enumerate(html_code) if tag in ('
', '>')] for i, cell in zip(to_insert[::-1], line['html']['cells'][::-1]): if cell['tokens']: cell = [escape(token) if len(token) == 1 else token for token in cell['tokens']] cell = ''.join(cell) html_code.insert(i + 1, cell) html_code = ''.join(html_code) html_code = ''' %s
''' % html_code soup = bs(html_code) html_code = soup.prettify() return html_code

这段代码可以把 JSON 里的 token 数据还原成我们平时能看到的 html 表格。原始输入形式(部分截图)就不再重复贴了,实际跑一遍就能看到效果。

第四步:大模型 latex 格式数据获取

接下来就是利用大模型把 html 表格转成 latex 格式。这里提供一个基础的提示词模板:

system_prompt = "你是一个乐于助人的智能助手,你可以根据用户的要求完成用户给定的任务。"
user_prompt = "请根据给定的html格式的表格,将其转化为latex格式的表格,下面是html格式的表格:\n{html_table}"

用上面生成的 html_table 喂给大模型(这里用的是 Qwen2-72B),能得到类似下面的 latex 输出(示例):

begin{tabular}{|l|l|l|l|}
\hline
\textbf{变量} & \textbf{风险比} & \textbf{95% CI} & \textit{\textbf{p值*}} \\
\hline
年龄 (中位数) &&& 0.716 \\
\hline
\leq 69 & 1.000 &&\\
\hline
\gt 69 & 0.839 & 0.310–2.268 &\\
\hline
性别 &&& 0.142 \\
\hline
男性 & 1.000 &&\\
\hline
女性 & 0.426 & 0.152–1.190 &\\
\hline
手术类型 &&& 0.010 \\
\hline
低位前切除术 & 1.000 &&\\
\hline
腹会阴联合切除术 & 3.140 & 0.919–10.725 &\\
\hline
肿瘤位置 &&& 0.710 \\
\hline
上段直肠 & 1.000 &&\\
\hline
中段直肠 & 1.267 & 0.381–4.213 &\\
\hline
下段直肠 & 1.716 & 0.419–7.026 &\\
\hline
分化程度 &&& 0.936 \\
\hline
G1 & 1.000 &&\\
\hline
G2 & 1.933 & 0.416–3.423 &\\
\hline
G3 & 1.119 & 0.137–9.137 &\\
\hline
组织学类型 &&& 0.299 \\
\hline
腺癌 & 1.000 &&\\
\hline
粘液腺癌 & 0.381 & 0.096–1.514 &\\
\hline
肿瘤浸润深度 &&& 0.925 \\
\hline
T3 & 1.000 &&\\
\hline
T4a & 0.919 & 0.316–2.673 &\\
\hline
T4b & 0.745 & 0.172–3.223 &\\
\hline
肿瘤大小 &&& 0.329 \\
\hline
\leq 4 cm & 1.000 &&\\
\hline
\gt 4 cm & 0.594 & 0.214–1.651 &\\
\hline
end{tabular}

把这个 latex 放到 texlive 里去渲染,就能得到正式的表格图片。

注意:这一步不仅拿到了 latex 格式的文本,而且把英文的表格变成了中文表格——效果相当直观。

总结

这篇文章主要梳理了表格数据的现状,以及如何利用 PubTabNet 和大模型来批量生成中文 latex 表格数据。文中给出的提示词只是一个起点,实际使用时可以根据具体需求调整,适配不同的表格结构和业务场景。数据合成这条路,虽然绕了点,但在标注资源有限的情况下,确实是性价比很高的备选方案。

相关下载