普林茨教授和他的物候数据
关于我们
在 Findable AS,我们专注于建筑行业的文档理解和分析。这使我们能够磨练在文档相关工程方面的技能,作为对所有向我们提供的优秀工具和模型的一点感谢,我们希望分享我们的物候数据集。这项工作与我们通常处理的数据类型无关,但这是一项我们认为值得更多人关注的“热爱劳动”。
本文包含什么?
这个项目主要处理像这样的表格数字化
如你所见,内容是手写的,表格布局相当复杂。如果你想将这样的表格数字化,你的第一个想法可能是将其交给许多开放或封闭源码的 LLM 模型之一,并要求将其转换为某种 Markdown 格式。这可能有效,但根据我们的经验,即使是最强大的模型也难以处理复杂的布局和数据是手写的事实。我猜测在一两年内,我们确实会有能够成功翻译这些表格的模型,但目前我们需要借助其他方法才能成功。
在本文中,我们将更详细地解释这些表格的起源、内容以及如何解释这些数据。我们还将展示如何将表格中的数据转换为机器学习模型更容易读取的形式。在第二篇文章中,我们将展示如何实际微调 vLLM,以针对此类数据生成最佳结果。
但首先,让我们了解这些表格中的内容以及为什么它们的内容可能很有趣。
你为什么要关心?
基本上,这些表格包含一种叫做物候数据的东西。根据维基百科的定义,物候学是
研究生物生命周期中周期性事件,以及这些事件如何受气候季节性变化、年度间变化以及栖息地因素(如海拔)的影响
这可以说是人类最古老的科学之一,因为我们物种的生存取决于(并将继续取决于)这种知识。例如,了解动物的迁徙模式可以进行有效的狩猎,对植物的观察可以进行有效的播种和收割,从而规划食物供应等等。当然,关于物候学已经了解很多,但专门用于收集此类信息的系统性和官方努力相对较少。
在挪威,奥斯陆大学的植物学家亨里克·普林茨于1928年对植物、鸟类和农业现象的物候数据进行了大规模收集。他在挪威各地建立了广泛的观察员网络,并要求他们观察大量不同的物候阶段,例如不同植物的开花和芽苞破裂,某些候鸟的到来等。
在他1959年的出版物中
A. Lauscher, F. Lauscher, and H. Printz, Die Phänologie Norwegens, Teil II. Phänologischce Mittelwerte für 260 Orte, Skr. Det Norske Videnskaps-Akademi Oslo. I. Mat.-Naturv. Kl. No.l 1959, 1-176, 1959
他发表了278个观测站从1928年到1952年的观测数据。这篇文章长达182页,用德语写成,包含了每个观测站的数据,形式是手写表格,类似于上面的表格。
例如,在图中蓝色突出显示的第 i 行和第 1 列的单元格,表示一种名为款冬(拉丁语:tussilago farfara)的微小植物首次开花的儒略日期。本文中使用的儒略日期,是指1月1日之后的日序,因此在非闰年,儒略日期137对应于5月17日。
款冬之所以有趣,因为它是一种所谓的*物候可塑性*植物。它基本上会在当地气候条件允许时开始其生命周期。如果某一年春天来得早,它就会早早开花;如果春天寒冷和/或来得晚,它就会晚些开花。因此,你可以把这些微小的植物看作是遍布挪威的气候实验室。
那么,我们为什么要关心这些植物的开花日期呢?嗯,观测期恰逢人类潜在温室气体排放量远低于今天的时期(例如,关于1750年以来大气中二氧化碳演变的概述,请参阅此处)。从这个意义上讲,亨里克·普林茨的数据代表了一个间接气候观测的*时间胶囊*,它即将有百年历史。它作为一个非常简单的基线,我们可以将其与挪威今天的状况进行比较,并验证自然界的物候阶段是否确实受到了可能的气候变化的影响。
数据
关于数据的一些观察
- 共有 278 张表格,对应 278 个观测地点。
- 每个表格包含 4 个元数据字段(下方黄色显示)和 292 个数据字段(蓝色显示)
- 总共有 83,956 个字段,但如上所示,并非所有观测都在每个地点进行。
- 共有 33,905 个非空白单元格。
- 目前,您可以在这里找到包含所有观测数据的Excel表格。请注意,单元格的读取是由经过微调的vLLM完成的。我们计划稍后提供一份人工验证的表格。
- 提取所有这些数据的代码可在此处获取。
一种读取数据的替代方法
数据的原始格式是使用商业扫描仪扫描的跨页,这些跨页看起来像这样:
因此,每个跨页包含四个独立的表格。我们的第一个想法是,如果能将每页的四个表格分开,至少会有所帮助。要做到这一点,必须克服几个挑战。我们先从中间分割页面,并去除一些空白。由于我们在扫描时非常小心,因此只需通过图像中的行和列坐标进行索引即可轻松完成。所以基本上我们只是这样裁剪跨页:
这将生成如下所示的单页
我们这里仍然有问题。首先,还有一些空白,而且表格略微旋转。我们先处理旋转。这可以通过几种方式使用经典图像处理技术(如霍夫(Radon)变换)或数学形态学技术来完成,但有一种更简单、更直观的技术可以做到这一点。这是基本思想:
- 将图像反转,使其变为黑色背景上的白色文本。
- 垂直像素值求和,得到列和。
- 获取列和的最大值。
- 将图像旋转很小的角度,从第 2 步重复。
- 产生最大峰值的旋转对应于最佳旋转。
这就是尚未达到最佳旋转时,求和后的列的样子
这当然是非常“临时性”的,不适用于所有此类问题,但在我们的案例中效果非常好,所以我们就是这样做的。
然而,我们还没有完全完成。我们还需要修剪掉表格周围的所有空白。为此,我们将使用一些简单的数学形态学技巧。我首先定义两个所谓的结构元素,它们看起来像这样:
红点代表结构元素的起源。我们现在将这两个元素中的每一个滑过反转图像,并基本上提出以下问题:结构元素是否“适合”反转图像?最左边的结构元素可以很好地与左上角匹配,右边的结构元素可以很好地与右下角匹配。显然,这将在图像中的许多位置匹配,但我们正在寻找最上面和最左边的匹配以及最下面和最右边的匹配。我在这里隐藏了相当多的技术细节,如果您想了解如何完成此操作的详细信息,请查看我们的GitHub 存储库。
通过这种方式,可以定位左上角和右下角,如下图所示:
检测到这些角后,裁剪剩余的空白就变得很简单了。完成此操作后,我们确定页面的平均行数和列数,然后将页面重新采样到此标准大小。由于页面现在采用标准化格式,我们只需通过索引页面的行和列即可获得两个独立的表格。为了检查结果,我们随机选择了九个表格进行查看:
这似乎一切都很好,我们现在进入处理的最后一步。使用与获取单独表格相同的技巧,我们还对表格进行索引,以从每个单元格中获取小的子图像。我们基本上创建了这样的行和列坐标列表:
然后我们可以定义特定观测的数据,如下所示:
这样就可以了。为了检查结果,这里随机选择了100张款冬开花观测图像(注意:有些观测未填写是正常的,那只表示此物种在给定位置没有可用观测数据)
你会注意到这远非完美。表格仍然有足够大的差异,我们不能总是精确命中,所以我添加了一个安全裕度,这也意味着我会看到相当多的表格边框。但是从应该读取文本的vLLM的角度来考虑一下。它基本上看到一个简单的文本,带有边框和背景。现代vLLM,在正确提示的情况下,非常擅长解决此类问题。
我们使用功能强大的 QWen2.5 VL 模型对文本进行了初步读取。然后,我们手动验证并纠正了一部分读取结果,以便对同一模型进行微调,使其在此任务中表现得更好。该过程在单独的文章中进行了描述。
您可以在我们的GitHub 存储库中找到所有用于实验的代码。