当人工智能不够
四个机器人和一个人一起为英国图书馆编目历史文献。
机器学习 —— 通常被错误地称为“人工智能” —— 目前一直非常流行,只是最近被大型语言模型(如ChatGPT)取得的效应所超越。这些技术声称可以完成原本需要繁琐人力工作的任务,或者需要大量过程式编程的工作。确实,很多结果非常成功;但是公开展示往往掩盖了人为干预以选择和改进输出。
一个明确的成功案例是光学字符识别(OCR)领域。几十年来,通过对识别图像中的文本的软件进行痛苦的改进,机器学习(ML)技术,特别是“自动机器学习”(AutoML),在短短几年内取得了突破,通常能够通过从互联网上搜集到的大量数据进行训练。
本文描述了一个数字人文领域的实际项目,实现所需输出需要结合不同的“AI”技术与传统的过程式编程,并结合适度的人工细化。
从前有一天,英国图书馆与我们联系,提出一个想法。他们正在将一系列18世纪和19世纪印刷的议会法案数字化,想知道我们是否能够自动生成这些法案的索引... 快速又神奇地。
这些都是“地方和私人法案”。在18世纪,各种活动,包括离婚,都需要议会的法案。地方法案通常用于授权建造或修复道路或桥梁,并设立过路费以支付工作费用。
印刷的法令遵循标准结构,有两个标题页,它们之间含有我们所寻找的内容,第一个标题页带有皇家纹章和年号(年份用拉丁语表示,表示当前国王即位多少年了)。其余的页面都是密密麻麻的印刷文字,以一行“FINIS”结束。
最初的要求是从每个法案中提取出标题,日期,打印机和出版地,这些数据都是相对于帧编号记录的。如果我们知道要搜索的文本部分,OCR理论上可以提取文本,尽管准确度会有所不同。
基于提供的样本,我们尝试了各种实验,并提出了一个狡猾的计划,同时采用了两种不同的方法。一方面,我们尝试训练视觉分析软件来将页面分类为第一和第二种标题页以及纯文本页。另一方面,我们尝试通过字体大小和常见字符串的组合(如“Georgii II. Regis.” - 幸运的是,所有行为都在乔治一世、乔治二世和乔治三世统治期间进行)来分析OCR,以确定第一和第二个标题页,从而得出其他所有内容。
这两种方法都没有100%的成功率。然而,当我们从每种方法中获取信心分数,并将这些信心分数进行组合时,我们能够正确地识别出所有样本页的标题页。请想象在您阅读“样本页”这个词时,背景中传来了不祥的音乐。
为了评估我们的模型,我们使用了Google Sheets。我是Google Sheets的忠实用户,因为它们易于通过编程进行操纵。
把整体输出放在Google Sheets中是一种非常好的方式来可视化表格数据。这样可以省去为一次性的概念验证代码输出编写显示的工作量。并且还有一些特殊的优势:
- 您可以轻松对数据进行版本控制,这样您就可以追溯回去,看看您是否改进了问题,还是变得更糟了。
- 如果您的图像可以在网络上找到,例如通过IIIF服务器,您可以构建公式将它们显示在单元格中 - 在此情况下基于第一列中的数字,并通过请求IIIF服务器发送缩略图来节省网络和计算资源。
- 您可以在电子表格中进行计算,这比修改代码更容易。在这种情况下,上图中靠右(在图像上方)的数字是分析结果的原始输出,报告了在我们试图识别的两种特殊页面上找到各种预期元素的可信度。C列和D列是Google表格中的公式,表示每个页面很有可能是其中之一的总体得分。
因此,我们可以不断调整启发式算法,并再次运行它们在所有图片上,然后查看Google表格以了解其效果如何。
通过将输出结果插入经过逐渐调整的视觉识别模型中,我们可以看到我们在这方面的表现如何,然后证明从这两个系统的简单输出之和是确凿的。
这就是我们狡猾的计划,通过管道表达的。
我们告诉图书馆的联系人,是的,我们认为我们可以实现这个。
大约一年后,当硬盘从图书馆团队寄来,其中包含了大约2万幅图片,数字化自30个胶卷时,我们全都处于封锁中。但这事后证明是一个绝佳的封锁项目!
在此期间,要求的数据已经有了各种补充。所有这些对我们来说听起来都很简单,我们愉快地同意了。
基本要求是在图片序列中找到每个行为的开始,并从两个标题页中提取行为标题、日期、出版商等信息。但我们还被要求报告每个行为在书中的页码和每个行为的页数。起初,这似乎应该是一个简单的问题,只需从下一个标题页的页码中减去上一个标题页的页码即可。事实证明,这是一个真正的挑战!
我们拥有的巨大优势是Cogapp炼油服务(CRS)。这是一个我们通过一系列项目逐步建立起来的系统。CRS使我们能够在文件(通常是图像,但不一定)上定义一系列操作,这些操作将在文件上传后自动处理。这使我们能够按照上面的管道主题图像构建我们的流水线(事实证明,管道变得更加复杂了),然后将扫描的图像推送到其中,而不必手动启动所有步骤。
我们建立了一个管道来执行上述步骤。
- 将每个图像格式转换并使其在IIIF终端可用;
- 将每个图像发送到视觉分类模型,并且还发送到 OCR。
- 使用过程式编程分析OCR,评分每一页作为标题页。
- 然后将来自该模型的分数与来自视觉分类模型的分数相结合,以明确确定每个行为的标题页。
IIIF 是国际图像互操作框架(International Image Interoperability Framework)的缩写;这是一个协议,可以轻松地通过 HTTP 访问图像,并且可以实时定义缩放和裁剪操作。
应用于所有源图像,不可避免地,这并不像在一个小样本上的初步实验所暗示的那样成功。然而,我们对OCR的分析和视觉分类系统进行了改进。
我们的改进包括将每个帧(原本是书中的一张双页展开)分为两部分,分别进行视觉分类。由于CRS已经通过IIIF提供了所有图像,所以这一实现非常简便。例如,我们只需将URL中的“/full/”替换为“/pct:0,0,50,100/”,即可将图像的左半部分发送进行分析,而不是整个图像。
我们还根据顺序增加了评分。每个片段应以一个 "总标题页" 开始,后面跟着一个空白页,然后是一个 "片段标题页"。因此,根据相邻页面的评分,我们可以增加或减少每个标题页的分数。
通过这一过程,我们能够准确识别到对应于每个行为开始的帧;尽管光学字符识别并不完美,但由于标题页的相对一致性,我们在提取每个被要求目录元素方面取得了合理的结果。
然而,我们认为会很简单的要求——统计每场戏的页数和识别页码——结果证明比想象中更为棘手。存在两个问题:
- 我们发现一些画面实际上是重复的,可能是意外的。 (令人惊讶的是,有些扩张片不仅被拍摄了两次,有时还会出现一帧微缩胶片被数字化了两次的情况。) 此外,有些书籍的扩展页被有意地拍摄了两次,先是抹掉右手边的页面,然后再抹掉左手边的页面。因此,虽然一般来说一个数字化帧代表书中的两页,但有时它只代表一页;而有时(当它是一个完全重复的扩展页时)它根本不增加任何的页码。解决这个问题的方法可能是使用页面编号来识别重复,如果我们能够从OCR中可靠地获取页面编号的话 - 但请看下一段。
- 页数在标准位置上打印,即在左上角和右上角的对开页上;但仅在某些页面上有(标题页上没有),此外OCR在页码上产生了相当多的错误。(数字错误通常比单词错误更严重,因为单词中的一个或两个打字错误通常不会模糊该词是什么。)解决此问题的方法可能是在没有页码的页面上采用“死算法”(即将未编号的页面计算直到下一个编号页面),如果每个页面框表示书中的两个连续页面-但请参见上一段。
如果只有其中一个问题,解决起来相对容易!但每一个问题都使对另一个问题的简单解决变得困难。
使用机器学习视觉服务来识别重复页面是无效的,因为两页全是印刷文字的页面非常相似。相反,我们实施了一个策略来根据比较 OCR 识别重复的扩展。这给出了每一对连续扩展的文本的 Levenshtein 距离为基准的分数。这相当有效,但两个重复页面之间并没有明显的差距。无论如何,仅仅发现重复页面还不够,因为有些扩展是故意拍摄时覆盖了对页的部分。
进入人类!
但首先,进入工具制作阶段。我坚信为人类处理数据而建立工具的重要性。我的两种最喜欢的材料是IIIF和Google Sheets。显然后者具有零设置或托管的优点(山景城的朋友们为我们做了这些),自动保存,并允许同时多用户访问。这使得Google Sheets非常适合让人们协作处理数据。使它们适合让人们和计算机协作的原因是它们有一个非常全面的API(应用程序编程接口)。更棒的是,Google Sheets可以从IIIF服务器显示图像,并使用公式选择源图像和缩放级别以及选择其详情。
当所有的自动化流程完成了一个微缩胶片的数字化,它们生成了一个新的Google Sheets文档,其中包含几个工作表。
页面1仅显示了具有相对较高分数的重复页面候选项。每一行显示了一对框架,按照我们确定的有帮助的比例排列,以“重复”分数进行排序,并包含一个确认它们是否确实是重复的列。然后,通过快速浏览这些对的方式,很容易判断每个对是否为重复的。如果不够清楚,工作人员可以点击每个图像以查看更高分辨率的数字化页面,以完全确认。
第二页用于修正页码。每个图像以小缩略图的形式显示(这有助于识别空白、模糊和标题页),并给出了最佳猜测的页码。其中一列显示根据OCR推断的页码。另一列显示了考虑到确定的重复页面后的连续“死推”的页码。第三列突出显示异常,通过对单元格着色使其更加明显。因此,人们可以简单地向下滚动该页,看到序列出错的地方并进行修正。
还有一件事情
最后一步涉及到另外一个"机器人"。如上所述,18世纪的印刷品(使用古老字体,在薄纸上有时印刷粗糙)并不是AutoML OCR的理想来源,虽然它在很大程度上做得还不错,但有时表现不太好。
然而,这正是像ChatGPT这样的大型语言模型发挥作用的地方。有时候,这些被称为“强化版自动校正”的模型可以通过预测在现有的文本序列后面可能出现的单词来生成文本,并且完全有能力创造出(听起来很合理的)胡言乱语。但在这种情况下,自动校正正是我们想要的!
我通过将一个法案标题简单地粘贴到ChatGPT UI中并在提示“以下文本是从一份18世纪的文件中扫描并经OCR转录的。请将其纠正为您认为原始文本应该是的样子。”之前进行测试了这个想法(有趣的事实是:对ChatGPT要有礼貌——你会得到更好的结果)。结果立即显示出了希望!我们随后使用OpenAI的“completions” API通过ChatGPT运行了所有法案标题,并采用相同的提示,将结果放入了Google表中的另一列中。
结论
而这就是四个机器人(AutoML OCR;ML视觉分类;一个大型语言模型;以及一些传统的过程式编程)与人类一起使用定制工作台的方式,为索引18世纪议会法令的20000个框架组成的团队。
图像致谢:阅读机器人由Mavadee创作(CC BY 3.0);数字眼睛由Petai Jantrapoon创作(CC BY 3.0)。
本是Cogapp的董事长和创始人,Cogapp是一家专注于文化领域的数字机构。如果您想了解更多关于我们的工作,请随时与我们联系。
我们在Twitter上,或者您可以通过我们的网站与我们联系。