用LLM提取文档中的数据

APPLICATION Nov 2, 2024

近十年前,我在 LinkedIn 著名的数据标准化团队担任机器学习工程师。从我加入到离开,我们仍然无法自动读取一个人的个人资料,也无法在所有语言和地区可靠地了解某人的资历和职位。

乍一看,这很简单。“软件工程师”已经足够清楚了,对吧?如果一个人只写“助理”,那他可能是一个资历较低的零售员工(如果他们在沃尔玛工作)或者一个高级律师(如果他们在律师事务所工作)。但你可能知道这一点——你知道什么是 Java 新手吗?什么是 Freiwilliges Soziales Jahr?这不仅仅是了解德语——它翻译为“自愿社会年”。但什么是代表这个角色的良好标准头衔?如果你有一个已知的职位列表,你会把它映射到哪里?

我加入了 LinkedIn,我离开了 LinkedIn。我们取得了进展,但即使是最简单的常规文本——一个人的简历,也难以理解。

1、曾经困难的事情变得微不足道

你可能不会惊讶地发现,对于像 GPT-4 这样的大模型来说,这个问题很简单:

对于 GPT 来说很容易

但是等等,我们是一家公司,而不是聊天终端里的人,我们需要结构化的输出:

啊,这样更好。你可以用最细微和文化特定的问题重复这个练习。更好的是,当你获得整个人的个人资料时,可以重复这个练习,这会为你提供更多背景信息,并使用代码,这使你能够在商业环境中一致地使用结果,而不仅仅是作为一次性聊天。再多做一些工作,你就可以将结果强制转换为允许的职位头衔的标准分类法,这将使其可索引。毫不夸张地说,如果你复制粘贴某人的简历,并恰到好处地使用 GPT,你将超越十年前一些非常聪明的人多年来所取得的最佳成果。

2、高价值的办公室工作 == 理解文档

标准化简历的具体例子很有趣,但它仅限于技术一直在努力工作的领域——在一个自然应用AI工具的技术网站上。我认为这里有一个更深层次的机会。世界上很大一部分的 GDP 是办公室工作,归根结底就是运用专家的智慧,反复从文档中提取见解,并结合背景。以下是一些复杂程度不断增加的例子:

  • 费用管理是阅读发票并将其转换为标准化视图,以显示支付了什么、何时支付、以何种货币支付以及支付了哪些费用类别。可能,这个决定是根据企业、支出人等的背景信息做出的。
  • 医疗索赔裁定是阅读一堆乱七八糟的发票和临床笔记的过程,然后说“好吧,总的来说,只有一次胸部X光检查,有很多重复的,花费了800美元,它对应到健康保险单中的1-C类”。
  • 贷款承销商可能会查看申请人的一堆银行对账单并回答一系列问题。同样,这很复杂,只是因为输入到处都是。实际的决策是“现金的平均流入和流出是多少,其中有多少用于偿还贷款,哪一部分是一次性收入,哪一部分是实际经常性收入”。

3、文本推理是LLM的本领

到目前为止,LLM大模型因容易产生幻觉(hallucination)而臭名昭著,也就是编造谎言。现实情况更加微妙:幻觉在某些情况下实际上是可以预测的结果,在其他情况下几乎保证不会发生。

幻觉发生的地方是当你要求它回答事实问题并期望模型从其对世界的固有知识中“知道”答案时。LLM 很糟糕,会反省他们对世界的了解——它们能做到这一点更像是一个非常幸福的意外。他们没有接受过这项任务的明确训练。他们接受的训练是生成可预测的文本序列完成。当 LLM 以输入文本为基础并需要回答有关该文本内容的问题时,它不会产生幻觉。如果你将这篇博文复制并粘贴到 chatGPT 中并询问它是否教你如何烹饪美国苹果派,你将 100% 得到正确的结果。对于 LLM 来说,这是一项非常可预测的任务,它会看到一段文本,并试图预测一个有能力的数据分析师将如何用预定义的结果填充一组预定义字段,其中之一是  {“is cooking discussed”: false}

以前作为 AI 顾问,我们多次解决涉及从文档中提取信息的项目。事实证明,这在保险、金融等领域有很多实用价值。我们的客户担心的事情(“LLM 会搞砸”)与真正摧毁我们的事情(我们没有正确提取表格,所有错误都源于此)之间存在很大差距。LLM 确实失败了 — 当我们失败时,它们会以干净、无歧义的方式与输入文本一起呈现。构建推理文档的自动管道有两个必要要素:

  • 完美的文本提取,将输入文档转换为干净、可理解的纯文本。这意味着处理表格、复选标记、手写注释、可变文档布局等。现实世界形式的整个复杂性需要转换为 LLM 头脑中有意义的干净纯文本。
  • 强大的模式,准确定义你从给定文档类型中寻找的输出、如何处理边缘情况、使用哪种数据格式等。

4、文本提取比相像的要棘手

以下是导致 LLM 崩溃和烧毁并获得非常糟糕的输出的原因:

  • 输入具有复杂的格式,如双列布局,并且你从例如 PDF 中从左到右复制和粘贴文本,使句子完全脱离上下文。
  • 输入中有复选框、复选标记、手写注释,而你在转换为文本时完全错过了它们
  • 更糟糕的是:你认为可以绕过转换为文本,并希望只需粘贴文档的图片并让 GPT 自行推理。这让你陷入幻觉。只需要求 GPT 转录一张带有一些空单元格的表格图像,你就会看到它高兴地发疯并随意编造东西。

记住现实世界文件中发生的疯狂混乱总是有帮助的。这是一份随意的税表:

当然,真正的税表有所有这些字段填写,通常是手写的

或者这是我的简历:

或公开可用的示例实验室报告(这是来自 Google 的头版结果)

顺便说一句,你能做的最糟糕的事情就是要求 GPT 的多模态功能转录表格。如果你敢的话就试试吧——乍一看它似乎没错,但绝对会为一些表格单元格编造一些随机的东西,完全脱离上下文等等。

5、如果存在问题,就搞个 SaaS 公司来修复它

当被要求理解这类文档时,我和我的联合创始人 Nitai Dean 感到困惑,因为没有任何现成的解决方案来理解这些文本。

有些人声称可以解决这个问题,比如 AWS Textract。但他们在我们测试过的任何复杂文档上都犯了很多错误。然后你就会看到一系列必要的小事情,比如识别复选标记、单选按钮、划掉的文本、表格上的手写涂鸦等等。

因此,我们建立了 Docupanda.io——它首先会为你输入的任何页面生成一个干净的文本表示。在左边你会看到原始文档,在右边你可以看到文本输出:

表格的处理方式类似。在底层,我们只是将表格转换为人类和 LLM 可读的 markdown 格式:

使用 LLM 理解数据的最后一步是生成并遵守严格的输出格式。我们可以让 AI 将其输出塑造成 json,这很棒,但为了在数据上应用规则、推理、查询等,我们需要使其以常规方式运行。数据需要符合一组预定义的插槽,我们将用内容填充这些插槽。在数据世界中,我们称之为模式(schema)。

6、构建模式需要反复试验,LLM 可以做到这一点

我们需要模式的原因是,没有规律性,数据就毫无用处。如果我们正在处理患者记录,并且它们映射到“Male”“m”和“M”——我们做得很糟糕。

那么你如何构建模式呢?在教科书中,你可以通过长时间坐着盯着墙壁来构建模式,并定义你想要提取的内容。你坐在那里,仔细考虑你的医疗保健数据操作,然后说“我想提取患者姓名、日期、性别和他们的医生姓名。哦,性别必须是男/女/其他。”

在现实生活中,为了定义从文档中提取什么,你盯着你的文档看……很多次。你从上面的内容开始,但然后你查看文档,发现其中一个文档有一个医生列表,而不是一个。其中一些还列出了医生的地址。有些地址有单元号和建筑号,所以也许你需要一个位置。就这样一直下去。

我们意识到,能够准确定义你想要提取的所有内容,既不简单,又困难,而且用人工智能很容易解决。

这是 DocuPanda 的关键部分。我们建立了一种机制,让你能够:

  • 指定你需要从自由语言文档中获取哪些内容
  • 让我们的 AI 映射许多文档,并找出一个可以回答所有问题并适应实际文档中观察到的缺陷和不规则之处的模式。
  • 根据反馈更改模式以根据您的业务需求进行调整

你最终得到的是一个 powerful JSON 模式 — 一个模板,它准确地说明了你想从每个文档中提取的内容,并映射到数十万个文档上,提取所有文档的答案,同时遵守规则,例如始终以相同的格式提取日期、尊重一组预定义的类别等。

7、还有更多!

就像任何兔子洞一样,总是有比第一眼看到的更多的东西。随着时间的推移,我们发现需要更多的东西:

  • 组织通常必须处理传入的匿名文档流,因此我们会自动对它们进行分类并决定对它们应用什么模式
  • 文档有时是许多文档的串联,您需要一个智能解决方案将非常长的文档分解为其原子、独立的组件
  • 使用生成的结果查询正确的文档非常有用

如果从这篇文章中有一个收获,那就是你应该研究利用 LLM 以常规方式理解文档。如果有两个要点,那就是你也应该尝试一下 Docupanda.io。我创建它的原因是我相信它。也许这是一个值得一试的好理由?


原文链接:Document Extraction Is GenAI’s Killer App

汇智网翻译整理,转载请标明出处

Tags