Amazon Textract的新版面功能在通用目的和生成型AI文件处理任务中引入了效率

Amazon Textract新版面功能:提升通用与生成型AI文件处理任务的效率

Amazon Textract 是一项机器学习(ML)服务,可以自动从任何文件或图像中提取文本、手写文字和数据。AnalyzeDocument 布局是一个新功能,允许客户自动从文档中提取段落、标题、副标题、页眉、页脚等布局元素。布局通过自动将文本分组为这些布局元素,并根据人类阅读模式对它们进行排序,扩展了Amazon Textract的字和行检测。(即,从左到右,从上到下的阅读顺序)。

构建金融和研究报告、医疗转录、合同、媒体文章等的文档处理和理解解决方案需要提取标题、页眉、段落等信息。例如,在目录数据库中编目金融报告时,提取并存储标题作为目录索引可实现简单检索。在引入此功能之前,客户必须使用后处理代码和来自Amazon Textract的词和行响应构建这些元素。

在存在多列和复杂布局的文档中,实现此代码的复杂性会增加。通过此公告,从文档中提取常见的布局元素变得更加便捷,让客户能更快地构建高效的文档处理解决方案,减少代码量。

在2023年9月,Amazon Textract推出了自动提取段落、标题、列表、页眉和页脚等布局元素,并按照人类阅读的顺序对文本和元素进行排序的布局功能。我们还发布了针对Amazon Textract专门构建的开源后处理工具包的更新版本,称为Amazon Textract Textractor

在本文中,我们将讨论客户如何利用此功能处理文档工作负载。我们还将讨论一项定性研究,展示布局如何提高生成性人工智能(AI)任务对大型语言模型(LLM)进行文档处理工作负载的抽象和抽取任务的准确性。

布局元素

Amazon Textract的布局功能的核心是新的布局元素。AnalyzeDocument API的LAYOUT功能现在可以在文档的页面中检测到多达十种不同的布局元素。这些布局元素在响应JSON中表示为块类型,包含置信度、几何(即边界框和多边形信息)和Relationships,它是一个对应于LINE块类型的ID列表。

  • 标题 – 文档的主标题。以LAYOUT_TITLE块类型返回。
  • 页眉 – 文档顶部页边距的文本。以LAYOUT_HEADER块类型返回。
  • 页脚 – 文档底部页边距的文本。以LAYOUT_FOOTER块类型返回。
  • 章节标题 – 主标题下的表示文档中节的标题。以LAYOUT_SECTION_HEADER块类型返回。
  • 页码 – 文档的页码。以LAYOUT_PAGE_NUMBER块类型返回。
  • 列表 – 以列表形式进行分类的任何信息。以LAYOUT_LIST块类型返回。
  • 图像 – 指示文档中图像的位置。以LAYOUT_FIGURE块类型返回。
  • 表格 – 指示文档中表格的位置。以LAYOUT_TABLE块类型返回。
  • 键值对 – 指示文档中表单键值对的位置。以LAYOUT_KEY_VALUE块类型返回。
  • 文本 – 通常作为文档段落的一部分存在的文本。它是一个用于不包含在其他元素中的文本的综合分类。以LAYOUT_TEXT块类型返回。
Amazon Textract布局元素

每个布局元素可以包含一个或多个LINE关系,这些行构成布局元素的实际文本内容(例如,LAYOUT_TEXT通常是一个包含多个LINE的文本段落)。重要的是要注意,布局元素在 API 响应中按照文档的阅读顺序出现,这使得可以从 API 的 JSON 响应中轻松构建布局文本。

布局感知提取的用例

以下是新的 AnalyzeDocument LAYOUT功能的一些常见用例。

  1. 为搜索索引和目录目的提取布局元素。可以使用LAYOUT_TITLELAYOUT_SECTION_HEADER的内容以及阅读顺序来适当标记或丰富元数据。这改进了文档仓库中文档的上下文,以提高搜索能力或组织文档。
  2. 通过提取按正确阅读顺序的文本并使用布局元素来总结整个文档或文档的部分。
  3. 提取文档的特定部分。例如,文档可能包含混合图像和文本的文本段以及其他纯文本部分或段落。现在可以使用LAYOUT_TEXT元素隔离文本部分。
  4. 使用 LLM 在上下文文档问答和实体提取中提供更好的性能和准确的答案。

布局还有其他可能的文档自动化用例。然而,在本文中,我们解释了如何提取布局元素以帮助理解如何将该特性用于传统文档自动化解决方案。我们讨论了使用布局进行文档问答用例(使用称为检索增强生成(RAG)的常见方法和 LLM)以及实体提取用例的好处。对于这两个用例的结果,我们提供了一些比较分数,帮助区分布局感知文本与纯文本的好处。

为了突出这些优势,我们进行了测试,比较使用使用光栅扫描和DetectDocumentText提取的纯文本以及使用AnalyzeDocumentLAYOUT功能提取的布局感知线性化文本对 LLM 的上下文问答输出结果的影响。对于此测试,我们使用了 Anthropic 的 Claude Instant 模型与 Amazon Bedrock。然而,对于复杂的文档布局,根据文档布局的复杂程度,以正确阅读顺序生成文本并适当地将其分块可能具有挑战性。下面的部分中,我们讨论了如何提取布局元素,并将文本线性化以构建基于 LLM 的应用程序。具体而言,我们讨论了通过光栅扫描为基础的纯文本和布局感知线性化文本为文档问答应用程序生成的响应的比较评估。

从页面提取布局元素

Amazon Textract Textractor 工具包可以通过使用带有LAYOUT功能的 AnalyzeDocument API处理文档,并通过页面的PAGE_LAYOUT属性和其自己的子属性TITLESHEADERSFOOTERSTABLESKEY_VALUESPAGE_NUMBERSLISTSFIGURES来公开检测到的布局元素。每个元素都有自己的可视化功能,可以看到被检测到的内容。要开始使用,您需要安装 Textractor,使用下面的命令:

pip install amazon-textract-textractor

如下面的代码片段所示,使用AnalyzeDocument API和LAYOUT功能处理名为 news_article.pdf 的文档。响应结果存储在变量 document 中,其中包含了从属性中检测到的每个布局块。

from textractor import Textractorfrom textractor.data.constants import TextractFeaturesextractor = Textractor(profile_name="default")input_document = "./news_article.pdf"document = extractor.analyze_document(                   file_source=input_document,                   features=[TextractFeatures.LAYOUT],                   save_image=True)document.pages[0].visualize()document.pages[0].page_layout.titles.visualize()document.pages[0].page_layout.headers.visualize()document.pages[0].page_layout.section_headers.visualize()document.pages[0].page_layout.footers.visualize()document.pages[0].page_layout.tables.visualize()document.pages[0].page_layout.key_values.visualize()document.pages[0].page_layout.page_numbers.visualize()document.pages[0].page_layout.lists.visualize()document.pages[0].page_layout.figures.visualize()
使用 Amazon Textract Textractor 进行布局可视化

官方 Textractor 文档中可以看到更详细的示例。

从布局响应线性化文本

为了使用布局功能,Amazon Textract Textractor 在 1.4 版本中进行了大量改进,提供了超过 40 个配置选项的线性化功能,使您可以轻松地根据下游使用案例定制线性化文本输出。新的线性化器支持目前所有可用的 AnalyzeDocument API,包括表单和签名,这使您可以在生成的文本中添加选择项,而无需进行任何代码更改。

from textractor import Textractorfrom textractor.data.constants import TextractFeaturesfrom textractor.data.text_linearization_config import TextLinearizationConfigextractor = Textractor(profile_name="default")config = TextLinearizationConfig(                         hide_figure_layout=True,                         title_prefix="# ",                         section_header_prefix="## ")document = extractor.analyze_document(                                 file_source=input_document,                                 features=[TextractFeatures.LAYOUT],                                 save_image=True)print(document.get_text(config=config))

官方 Textractor 文档中可以看到这个示例及更多。

我们还在库中添加了一个布局美化打印机,它允许您通过将布局 API 响应以 JSON 格式传递给一个函数,并返回按页面分组的线性化文本。

python -m pip install -q amazon-textract-prettyprinter

您可以选择以 Markdown 格式格式化文本,在文档中排除图像内的文本,以及排除页眉、页脚和页码提取。通过传递 save_txt_path 参数,还可以将线性化输出以纯文本格式存储在本地文件系统或亚马逊 S3 位置上。以下代码片段演示了示例用法:

from textractcaller.t_call import call_textract, Textract_Featuresfrom textractprettyprinter.t_pretty_print import get_text_from_layout_jsontextract_json = call_textract(input_document=input_document,                      features=[Textract_Features.LAYOUT,                      Textract_Features.TABLES])layout = get_text_from_layout_json(textract_json=textract_json,exclude_figure_text=True, # 可选参数exclude_page_header=True, # 可选参数exclude_page_footer=True, # 可选参数exclude_page_number=True, # 可选参数save_txt_path="s3://bucket/prefix") # 可选参数full_text = layout[1]print(full_text)

评估 LLM 在概括性和提取性任务中的性能度量

布局感知文本发现可以提高 LLM 生成的文本性能和质量。我们特别评估了两类 LLM 任务——概括性任务和提取性任务。

概括性任务指的是需要 AI 生成在源材料中没有直接找到的新文本的任务。概括性任务的一些例子包括总结和问答。对于这些任务,我们使用回归为主的评估用于 Gisting 的测量工具(ROUGE)指标来评估 LLM 在问答任务中与一组基本真实数据的性能。

提取性任务指的是模型识别和提取输入文本的特定部分以构建回应的活动。在这些任务中,模型专注于从源材料中选择相关的段落(如句子、短语或关键词),而不是生成新的内容。一些例子包括命名实体识别(NER)和关键词提取。对于这些任务,我们使用根据 Amazon Textract 提取的布局线性化文本计算的平均归一化 Levenshtein 相似性(ANLS)来评估命名实体识别任务。

ROUGE评分对主观问答任务的分析

我们的测试是在多列文档上执行上下文问答(Q&A)的设置,通过提取文本,然后执行RAG以从LLM获取答案响应。我们使用栅格扫描基于原始文本和布局感知的线性化文本对一组问题进行问答。然后,我们通过将机器生成的响应与相应的真实答案进行比较,评估每个问题的ROUGE指标。在这种情况下,真实答案是由人类回答的相同一组问题,被视为对照组。

使用RAG的上下文问答需要从文档中提取文本,创建文本的较小块,生成这些块的向量嵌入,并随后将它们存储在向量数据库中。这样做是为了使系统能够在向量数据库上使用问题执行相关性搜索,以返回与所提出的问题最相关的文本块。然后,将这些相关文本块用于构建总体上下文,并提供给LLM以使其能够准确回答问题。

用于测试的以下文档来自DocUNet:使用堆叠的U-Net进行文档图像去畸变数据集。该文档是一个具有标题、段落和图片的多列文档。我们还定义了一组由人类回答的20个问题作为对照组或真实答案。然后,使用相同的20个问题从LLM生成响应。

来自DocUNet数据集的示例文档

在下一步中,我们使用DetectDocumentText API和AnalyzeDocument API以及LAYOUT功能从该文档中提取文本。由于大多数LLM的上下文窗口令牌数量有限,我们保持了较小的块大小,约为250个字符,块重叠为50个字符,使用LangChain的RecursiveCharacterTextSplitter。这导致了两个独立的文档块集,一个是使用原始文本生成的,另一个是使用布局感知线性化文本生成的。通过使用Amazon Titan Embeddings G1 Text嵌入模型生成向量嵌入,将这两组文本块存储在向量数据库中。

使用Amazon Titan Embeddings G1 Text进行划块和嵌入

以下代码片段从文档生成原始文本。

import textractcaller as tcfrom textractcaller.t_call import call_textractfrom textractprettyprinter.t_pretty_print import get_lines_stringplain_textract_json = call_textract(input_document = input_document)plain_text = get_lines_string(textract_json = plain_textract_json)print(plain_text)

输出(为简洁起见删减)如下所示。由于API缺乏布局意识,文本阅读顺序不正确,提取的文本跨越文本列。

PHOTONICS FOR A BETTER WORLDUNESCO ENDORSESINTERNATIONAL DAY OF LIGHTFirst celebration in 2018 will become an annualreminder of photonics-enabled technologiesT he executive board of the United Nations Educational,in areas such as science, culture, education, sustainable development,Scientific, and Cultural Organization (UNESCO) has endorsedmedicine, communications, and energy.a proposal to establish an annual International Day of LightThe final report of IYL 2015 was delivered to UNESCO in Paris(IDL) as an extension of the highly successful International Year ofduring a special meeting in October 2016. At this event, SPIE memberLight and Light-based Technologies (IYL 2015)....

通过DetectDocumentText提取的原始文本的阅读顺序的视觉效果可在以下图像中看到。

栅格扫描阅读顺序可视化

以下代码片段从文档生成线性化文本。您可以使用Amazon Textract Textractor Python库的最新版本使用任一方法从文档生成线性化文本。

import textractcaller as tc
from textractcaller.t_call import call_textract, Textract_Features
from textractprettyprinter.t_pretty_print import get_text_from_layout_json

layout_textract_json = call_textract(input_document = input_document, features = [Textract_Features.LAYOUT])
layout_text = get_text_from_layout_json(textract_json = layout_textract_json)[1]
print(layout_text)

输出(已进行简略处理)如下所示。由于我们使用了LAYOUT功能,文本的阅读顺序得到保留,并且文本更有意义。

PHOTONICS FOR A BETTER WORLDUNESCO ENDORSES INTERNATIONAL DAY OF LIGHTFirst celebration in 2018 will become an annualreminder of photonics-enabled technologiesT he executive board of the United Nations Educational,Scientific, and Cultural Organization (UNESCO) has endorseda proposal to establish an annual International Day of Light(IDL) as an extension of the highly successful International Year ofLight and Light-based Technologies (IYL 2015).The endorsement for a Day of Light has beenembraced by SPIE and other founding partners ofIYL 2015....

通过具有LAYOUT功能的AnalyzeDocument提取的原始文本的阅读顺序的视觉效果可在以下图像中看到。

布局感知阅读顺序可视化

我们分别对提取的文本进行了大小为250、重叠为50的块划分。

接下来,我们为这些块生成向量嵌入,并将它们加载到两个单独的集合中的向量数据库中。我们使用开源的ChromaDB作为我们的内存向量数据库,并在相关性搜索中使用了3作为topK值。这意味着对于每个问题,我们使用ChromaDB进行相关性搜索查询会返回一个包含三个大小为250的相关文本块。然后,这三个文本块用于构建LLM的上下文。我们故意选择了较小的块大小和较小的topK,以满足以下特定原因。

  1. 缩短上下文的整体大小,因为研究表明,LLM在较短的上下文下(通过较大的标记上下文窗口)表现更好
  2. 较小的整体提示大小会导致较低的整体文本生成模型延迟。整体提示大小(包括上下文)越大,模型生成响应所需的时间可能越长。
  3. 遵守模型的有限标记上下文窗口,尤其是大多数LLM的情况。
  4. 成本效益高,因为使用较少的标记意味着输入和输出标记的问题的更低成本。

请注意,Anthropic Claude Instant v1通过Amazon Bedrock支持10万个标记的上下文窗口。我们故意将自己限制在较小的块大小,因为这也使得测试与具有较少参数和较短整体上下文窗口的模型相关。

我们使用ROUGE指标评估机器生成的文本与参考文本(或基准真实文本)之间的差异,测量两个文本之间的n元词组、词序列和词对的重合度。我们选择了三个ROUGE指标进行评估。

  1. ROUGE-1:比较生成文本与参考文本之间的单词重叠度(单个词)。
  2. ROUGE-2:比较生成文本与参考文本之间的双词组(两个词序列)的重合度。
  3. ROUGE-L:测量生成文本与参考文本之间的最长公共子序列(LCS),重点关注同时出现在两个文本中的最长单词序列,尽管不一定是连续的。
ROUGE分数计算

针对我们针对文档的20个样本问题,我们分别对原始文本和线性化文本进行了Q&A,并进行了ROUGE分数分析。我们注意到整体精确度平均提高了近50%。而在使用线性化文本与基准值进行比较时,F1分数显著提高,而在使用原始文本与基准值进行比较时则没有。这表明模型在使用线性化文本和更小的分块来生成正确回答方面变得更好。这导致了精确度的提高,并且精确度和召回率之间的平衡有利于精确度,从而提高了F1分数。F1分数的增加表明改进。需要考虑这些指标变化的实际影响。例如,在成本高昂的误报场景中,精确度的提高非常有益。

带有布局的Q&A任务结果的ROUGE图

针对学术数据集的抽取任务进行ANLS分数分析

我们测量了ANLS或平均标准化Levenshtein相似度,这是一种编辑距离度量,由文章“场景文本视觉问题解答”引入,并旨在同时考虑模型的推理能力和OCR细微缺陷。这个指标是传统Levenshtein距离的一个衍生版本,Levenshtein距离是衡量两个序列(如字符串)之间的差异的一种度量。它被定义为将一个词变成另一个词所需的最小的单字符编辑(插入、删除或替换)次数。

对于我们的ANLS测试,我们执行了一个NER任务,即LLM被提示从OCR提取的文本中提取确切的值。我们用于测试的两个学术数据集分别是DocVQAInfographicVQA。我们使用零-shot提示来尝试提取关键实体。LLM的提示结构如下所示。

template = """您被要求仅使用所提供的文档来回答问题。问题的答案应从文档中直接提取,并尽可能简短。文档:\n{document}问题:{question}从文档中提取答案并尽量使用较少的词语。"""

使用带有布局感知的线性化文本相对于原始文本(栅格扫描)在响应零-shot提示时,在所有文档问题回答数据集中的准确性都有所提高。在InfographicVQA数据集中,使用带有布局感知的线性化文本使较小的3B参数的FlanT5-XL模型能够与更大的FlanT5-XXL模型(在原始文本上)的性能匹配,后者具有几乎四倍的参数(11B)。

数据集 ANLS*
FlanT5-XL (3B) FlanT5-XXL (11B)
不带布局感知(栅格) 带布局感知 Δ 不带布局感知(栅格) 带布局感知 Δ
DocVQA 66.03% 68.46% 1.43% 70.71% 72.05% 1.34%
InfographicsVQA 29.47% 35.76% 6.29% 37.82% 45.61% 7.79%

* ANLS是根据Amazon Textract提取的文本进行测量的,而不是提供的文件转录。

结论

Layout的发布标志着在使用Amazon Textract构建文档自动化解决方案方面取得了重大进展。正如本文中所讨论的,Layout使用传统和生成式AI方法,改进了构建各种文档自动化解决方案的效率,如文档搜索、上下文问答、摘要、关键实体提取等。随着我们继续拥抱AI在构建文档处理和理解系统方面的力量,这些增强无疑将为更加流畅的工作流程、更高的生产力和更深入的数据分析铺平道路。

有关Layout功能的更多信息以及如何利用该功能进行文档自动化解决方案,请参阅AnalyzeDocumentLayout分析生成式AI应用文档