ChatGPT信息提取实战

我将大量文本文档(如 PDF)转换为电子表格。 这是一项乏味且昂贵的工作。 因此,每次人工智能技术的新迭代出现时,我想知道它是否能够满足许多人的要求:t提交 PDF,请求电子表格。 在 OpenAI 的 ChatGPT 上抛出几个编程问题并获得可行的结果后,我想知道我们是否终于成功了。

当 OpenAI 的 GPT-3 是热门新事物时,我看到蒙特利尔记者 Roberto Rocha 尝试进行类似的测试。 结果平淡无奇,但 OpenAI 的最新模型 ChatGPT 有几项改进,使其更适合提取:它比 GPT-3 大 10 倍,因此通常更连贯,它经过训练可以明确遵循指令,并且它理解 编程语言。

为了测试 ChatGPT 从 PDF 中提取结构化数据的能力,我编写了一个 Python 脚本(我将在最后分享!)将两个文档集转换为电子表格:

  • New York泄露的通知单, 7,000 页 PDF。 有五种不同的形式,糟糕的 OCR 和一些自由格式的字母混合在一起。
  • 来自警方内部调查的 1,400 份备忘录。 这些是完全非结构化的,包含电子邮件和文档扫描。 超级乱。

我的总体策略如下:

  • 重做 OCR,尽可能使用最高质量的工具。 这一点非常重要,因为 ChatGPT 拒绝处理质量不佳的 OCR 文本。
  • 尽我所能清理数据,维护物理布局并删除垃圾字符和样板文本。
  • 将文件分成单独的记录。
  • 要求 ChatGPT 将每条记录转换为 JSON。

我花了大约一周的时间来熟悉这两个数据集并进行所有这些预处理。 完成后,让 ChatGPT 将一段文本转换为 JSON 非常容易。 你可以粘贴一条记录并说“返回此的 JSON 表示”,它就会执行。 但是对多条记录执行此操作是一个坏主意,因为 ChatGPT 将使用从文本中随机选择的字段名称来发明自己的模式。 它还将决定自己解析值的方式。 例如,地址有时会以字符串结尾,有时会以 JSON 对象或数组结尾,地址的组成部分会分开。

提示词设计是获得一致结果的最重要因素,你的语言选择也会产生巨大差异。 一个小技巧:找出 ChatGPT 在提到一项任务时使用的措辞并模仿它。 (如果你还不知道,你可以随时问:“请解释你如何使用 _____________。”)

因为 ChatGPT 理解代码,所以我设计了我的提示来询问符合给定 JSON 模式的 JSON。 这是我的提示:

```
Text document goes here, truncated if longer than 4000 chars
```

For the given text, can you provide a JSON representation that strictly follows this schema:

```
{
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "descriptive name of field here": { "type": "data type here" },
        ...
      }
}
```

我尝试从每个响应中提取一个 JSON 对象,并对它运行一些验证检查。 有两项检查特别重要:1) 确保 JSON 完整,没有被截断或损坏,以及 2) 确保键和值与模式匹配。 如果验证检查失败,我会重试,通常我会在第二次或第三次尝试时得到有效的 JSON。 如果它继续失败,我会记下来并跳过记录。 有些记录 ChatGPT 就是不喜欢。

提取结果

令人印象深刻的是,ChatGPT 构建了一个非常有用的数据集。 乍一看,我甚至以为我有一个完美提取的数据集。 但是,一旦我浏览了页面并比较了值,我就开始注意到错误。 有些名字拼错了。 有些人完全失踪了。 有些数字是错误的。

这些错误虽然微妙且相对不常见,但足以阻止我进行大多数数据记者想要做的基本分析。 平均值、直方图、最小值和最大值均已出局。

但对于我的项目来说,错误是可以容忍的。 我想在违规数据库中找到大玩家,所以我不在乎某些名称是否错误或某些数值是否偏离零。 对于警方的数据,我基本上是在寻找一个摘要来识别某些事件和涉及的个人。 如果我错过了什么,那也没关系。

总的来说,这些是 ChatGPT 引入的错误类型:

  • ChatGPT 产生了幻觉数据,这意味着它编造了一些东西。 通常以微妙且难以察觉的方式。 例如,它把“2222 Colony Road, Moorcroft”(注意“r”)变成了“2222 Colony Road, Mooncroft”。 “Mooncroft”(带有“n”)这个词没有出现在文本中的任何地方。 ChatGPT 似乎在将殖民地和月亮这两个词联系起来。 多么古怪。
  • 它偶然发现了人们的名字并假设了性别。 有些表格有一个“称呼”字段,这似乎导致 ChatGPT 在不合适的时候添加称呼(“小姐”、“先生”),甚至在给出(“博士”和“教授”)时也会省略它们。 当记录中出现多个名称时,它也无法使用正确的名称,更喜欢最后一个。
  • ChatGPT 记住了以前的提示,导致混淆。 有时它会使用早期记录中的名称或企业实体,尽管当前记录的文本中出现了一个完全有效的名称或企业实体。 例如,在一份记录中,它使用了分别在 150 页和 30 页之前最后一次看到的律师和律师事务所的名称。 这个问题迫使我确保名称和实体确实存在于当前记录中。
  • 它认为是拼写错误的词得到了“更正”。 通常这很有用,但有时会引入错误。 这对于电子邮件地址来说尤其成问题。
  • 错误似乎随机散布在整个数据中。 虽然某些列包含的错误比其他列多,但所有列的错误率从 1% 到 6% 以上不等。 错误也分散在各行中。 结合起来,这意味着我基本上需要将每一行与每条记录进行比较以获得完全有效的数据集——这正是我一开始就试图避免的工作。

大型语言模型的问题现在已经得到了很好的记录。 即使 ChatGPT 取得了巨大的进步,其中一些在我的实验中也出现了。 试图忽略这些问题并将 ChatGPT 衍生作品直接推给读者将不可避免地导致灾难性的失败。

有时,ChatGPT 只是拒绝处理文档并给出样板响应。 它回应了对警方备忘录和纽约数据泄露数据集中几份文件中“敏感信息”的担忧,尽管它们都是公开文件。

ChatGPT 会彻底改变数据新闻吗?

我不这么认为,原因有以下三个:

  • 不,出于技术原因:通过 OpenAI 的 API 使用 ChatGPT 非常缓慢。 仅从数据泄露 PDF 中提取大约 2,500 条记录就花了将近三周的时间。 考虑到我在 ChatGPT 成为主流之前就开始了这个项目,并且能够在实施速率限制之前使用它两周,这一点就更加重要了。 API 也不可靠,经常出现停机和中断,尽管这在未来可能会有所改善。
  • 不,出于经济原因:对于 ChatGPT,我相信我们正在用一种形式的体力劳动换取另一种形式的体力劳动。 我们正在用编程和转录来换取清洁、事实核查和验证。 因为任何行都可能不正确,所以必须检查每个字段以建立信心。 最后,我不相信我们节省了很多工作。
  • 不,出于编辑原因:在我看来,数据幻觉和其他混淆的问题将这种方法限制在内部或面向记者的用途上。 它是比故事生成器更好的提示生成器。 将 ChatGPT 置于新闻工作流程的末尾可能会以更快的速度和数量换取更低的可信度。

总的来说,这些问题使得 ChatGPT 的大部分使用在编辑上不切实际,尤其是在规模上。 但我认为它仍然有一席之地。 对于需要将小型 PDF 转换为表格的小型、资源不足的新闻编辑室,这可能是可行的(嘿 ChatGPT,你可以将此文本转换为 JSON 对象数组吗?)。

一些 PDF 也非常混乱和不统一,以至于编写提取脚本非常耗时。 我有无数的项目因为这样的问题而夭折。 ChatGPT 提取有可能为此类项目注入活力。

ChatGPT 提取还可以很好地用作探索工具或潜在客户生成器,适用于错误和缺失值是可以容忍的用例,或者你希望在投入数周时间进行真正的清理和分析之前先了解一下数据的推测性情况。

自己试试

我在 GitHub 上提供了我的 ChatGPT 提取器脚本。 也许你有一个麻烦的数据项目,想亲自尝试一下。 或者,也许你想面对面地了解可能性和局限性。 我暗自希望有人最终破解 FCC 电视和有线政治广告披露数据集,结束自 ProPublica 的“免费文件”项目以来未完成的章节。

无论哪种方式,我都觉得我们会在未来一段时间内报告和使用这项技术。 熟悉任何技术的最好方法就是使用它。


原文链接:I tested how well ChatGPT can pull data out of messy PDFs

BimAnt翻译整理,转载请标明出处