作者结合二十多年科学出版经验说明,PDF 主要保存页面上的字形与位置,却丢失章节、浮动图表、脚注和交叉引用等文档语义。直接把抽取文本交给模型,会让视觉布局承载的关系在进入推理链前就消失。
我的名字出现在七十多本科普与学术著作的前置页中。二十多年来,我一直在把书稿变成排版完成的页面。如今,我以构建文档阅读 AI 系统为业。这两件事听起来毫无关联,其实只是从两个相反的方向观察同一个问题,而前一段经历恰好解释了后一项工作中出现的大多数问题。
先说简短的结论:经过排版的文档并不是一袋毫无结构的单词。它有自己的结构,而当文档变成 PDF 的那一刻,几乎所有结构都会被丢弃。当 AI 阅读这份 PDF 时,它读到的并不是文档本身,而是文档投射在页面上的影子。
排版科学著作并不是装饰,而是把含义编码进位置之中。
页眉不需要你阅读正文,就能告诉你当前位于哪一章。浮动体,也就是会移动到合适位置的表格或图片,之所以带有题注,恰恰是因为它已经与引用它的段落分离。前置页有明确的顺序:简式书名页、书名页、版权页、题献页、目录、序言。陈列公式之所以编号,是因为后文会回头引用它。脚注位于页面底部,引用文献则出现在参考文献列表中;它们是不同的对象,承担着不同的职责。
这些都不只是样式。每一项决定都带有语义。排版师的专业能力就在于知道:两行的间距加上更小的字号,意味着这里是一段补充说明,而不是主要论点;读者不需要任何人明说,也能自然理解这一点。
在 LaTeX 中,源文件明确知道所有这些信息。它有 \chapter、\caption、\label 和 \cite。结构并不是通过外观暗示出来的,而是被直接写在源文件里,再由结构派生出外观。
PDF 保留了外观,却丢弃了源文件。
PDF 是一组把字形放置到坐标上的指令:使用这种字体和字号,把这个字符放到这个 x、y 坐标上。它本质上就只有这些。某一串字形是章节标题,另一串是题注,第三串是脚注——这些事实并没有记录在任何地方。人类可以推断出来,因为人类能够熟练地阅读版式,但 PDF 并未明确说明这些信息。
因此,当系统摄取这份 PDF 时,就必须依靠猜测,重建排版师原本确切掌握的一切。字号更大的文字究竟是标题,还是一句强调语?这个双栏页面应该先读完左栏再读右栏,还是横跨两栏逐行阅读?这个数字是脚注标记,还是指数?这张表有表头行,还是第一行碰巧使用了粗体?
每一次猜测,都可能让一份文档悄无声息地变成另一份文档。
有三类问题反复出现,而它们没有一个是模型本身的问题。
阅读顺序。双栏版式是最经典的例子。如果提取过程遵循坐标流,而不是分栏后的阅读流,就会逐行交错拼接两栏内容。输出在语法上没有问题,读起来也很流畅,却完全不知所云。系统没有报错,文字也一字不少,只是被排列成了一种原文中从未存在过的顺序。
失去上下文的题注和浮动体。由于浮动体会移动,一张表格可能被排在距离讨论它的句子好几页之外。将文档扁平化之后,这张表格出现时可能完全没有上下文;更糟的是,它可能会被粘到页面上恰好与它相邻的某个段落后面。原本用于支撑某项主张的图片,就这样被悄悄关联到了另一项主张上。
被并入正文的脚注。脚注是对内容的限定,而且往往正是用来限制上方那项主张适用范围的关键限定。把它合并进连续正文,最终得到的句子就可能在断言某件事,而作者原本明明有意为这个结论添加了保留条件。
我想准确说明这一点:这些并不是幻觉。模型只是在忠实复述它收到的内容,而它收到的是一份顺序被打乱的文档。
上面的所有讨论都假设 PDF 是原生数字文档,其中的字形是真实字符。扫描件更糟,因为里面根本没有字符,只有像素;在任何系统能够读取内容之前,OCR 必须先把文字推测出来。
如今的 OCR 已经非常优秀,但它并不擅长判断某个区块是一张表格,而另一个区块是一段正文;它也不知道第 14 页是第 13 页那张表格的续页。在实践中,表格是扫描文档最容易造成严重破坏的地方,因为从错误识别的表格中提取出来的数字,看上去与从正确表格中提取出来的数字同样权威。
这就是为什么“直接用 OCR 处理一下”称不上计划。OCR 能把像素转换成字符,却不能把页面重新转换成文档。
我从排版工作中养成、如今也融入软件设计的一项习惯是:把结构视为证据,同时也把结构的缺失视为一个值得记录的事实。
具体来说,在我为阅读商业和财务文档而构建的系统中:
有意识地重建阅读顺序,而不是相信坐标流。先检测分栏,再确定阅读流。
让表格在整个处理管线中始终保持表格形态。被扁平化成散文的表格,会丢失行标签与对应数值之间的关系,而这种关系通常正是整张表格存在的意义。
让位置信息始终与内容同行。每一项提取出来的主张都会保留它所在的页码,读者可以回到原处核对。这与参考文献中的引用遵循的是同一种规范,其存在的理由也完全相同。
删除无法追溯的内容。如果某个数字无法关联回源文档中的具体位置,就不会再次引用它,而是将其标记出来。缺少一个数字只是带来不便;一个看似确信却错误的数字,则会让人基于虚构信息做出决策。
明确说明输入质量不佳。如果收到的文档是一份低质量扫描件,这一事实应该出现在输出结果中,而不是被埋在日志里。读者有权知道,自己应该在多大程度上相信眼前看到的内容。
排版让我明白,一份文档的大部分含义都承载于它的组织方式之中;而在你尝试用机械方式复现这种组织之前,它往往是不可见的。二十多年把结构放进页面的经历,事实证明,恰好是学习如何从页面中重新取回结构的一种难得准备。
对此感受最深的人并不是出版从业者,而是所有必须根据一份上百页 PDF 做出决策的人:阅读数据室材料的收购方、阅读管理账目的贷款方、阅读监管申报文件的分析师。他们收到的文档,与他们的软件实际读到的文档,并不总是同一份文档,而整个处理过程不会向他们发出任何提醒。
这种差距,正是我采用当前构建方式的全部原因。要么引用来源,要么删除主张;如果来源本身在传输过程中已经受损,就应该明确说出来。
如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。