13594780322

加密货币,让财富增值再简单不过!

Amazon Textract的新布局功能在通用和生成式AI文档处理任务中引入了效率 机器学习博客

Amazon Textract的新布局功能在通用和生成式AI文档处理任务中引入了效率 机器学习博客

发表时间:2026-01-27

浏览次数:6

Amazon Textract的新布局功能提高了文档处理效率

重点摘要

Amazon Textract近期推出的布局功能可以自动提取文档中的各种布局元素,比如段落、标题、列表、页眉和页脚。这一新功能不仅简化了信息的提取流程,还提高了生成式人工智能AI任务的准确性,特别适用于文档处理工作负载。通过使用该功能,客户能够更快速地构建高效的文档处理解决方案。

Amazon Textract是一项机器学习ML服务,能够自动从任何文档或图像中提取文本、手写文字和数据。新的分析文档AnalyzeDocument布局功能允许客户自动提取布局元素,如段落、标题、副标题、页眉、页脚等。布局功能增强了Amazon Textract的单词和行检测,通过将文本自动分组为这些布局元素,并根据人类的阅读顺序进行排列即从左到右、从上到下,使得文档信息的处理变得更加高效。

在构建与财务报告、研究报告、医疗记录、合同和媒体文章等相关的文档处理和理解方案时,需要提取标题、页眉、段落等信息。例如,在对文档数据库中的财务报告进行编目时,从中提取并存储标题作为索引可以简化检索。在此功能推出之前,客户需要通过后处理代码和Amazon Textract回复中获取的单词和行来构建这些元素。

Amazon Textract的新布局功能在通用和生成式AI文档处理任务中引入了效率 机器学习博客

处理具有多个列和复杂布局的文档时,实现此代码的复杂性也随之增加。随着这一公告的发布,从文档中提取常见的布局元素变得更加简单,使客户能够更快速地构建高效的文档处理解决方案,减少代码量。

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

在本文中,我们将讨论客户如何利用此功能处理文档工作负载。我们还将展示一项定性研究,证明布局功能如何提高文档处理工作负载中涉及大型语言模型LLMs的生成式人工智能AI任务的准确性。

布局元素

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

布局元素描述标题文档的主标题,返回为LAYOUTTITLE块类型。页眉位于文档顶部边缘的文本,返回为LAYOUTHEADER块类型。页脚位于文档底部边缘的文本,返回为LAYOUTFOOTER块类型。版块标题主标题下代表文档中不同部分的标题,返回为LAYOUTSECTIONHEADER块类型。页码文档的页码,返回为LAYOUTPAGENUMBER块类型。列表以列表形式分组的信息,返回为LAYOUTLIST块类型。图形指示文档中图像位置,返回为LAYOUTFIGURE块类型。表格指示文档中表格位置,返回为LAYOUTTABLE块类型。键值对指示文档中表单键值对的位置,返回为LAYOUTKEYVALUE块类型。文本文档中的文本,通常作为段落的一部分。返回为LAYOUTTEXT块类型。

每个布局元素可以包含一个或多个LINE关系,这些行构成布局元素的实际文本内容例如,LAYOUTTEXT通常是一段包含多个LINE的文本。需要注意的是,布局元素在API响应中的出现顺序与文档中的阅读顺序相同,这简化了从API的JSON响应构建布局文本的过程。

布局感知提取的用例

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

搜索编制和编目 用于搜索索引的LAYOUTTITLE或LAYOUTSECTIONHEADER的内容可以用于适当标记或丰富元数据,从而改善文档存储库中的文档上下文,并提升搜索能力。文档总结 按照正确的阅读顺序提取文本并使用布局元素来总结整个文档或部分文档。提取文档特定部分 例如,文档中可能包含混合的图像与文本段落,现可以通过LAYOUTTEXT元素来隔离文本部分。提高性能 使用LLM进行上下文文档问答和实体提取时,获得更好的性能和更准确的答案。

虽然还有其他文档自动化的可能用例,但在本文中,我们将解释如何提取布局元素,以帮助理解如何利用该功能用于传统的文档自动化解决方案。我们讨论了在文档QampA用例中使用布局的好处,采用一种称为检索增强生成RAG的方法,以及实体提取用例的好处。我们将展示这两种用例的比较分数,以帮助区分布局感知文本与纯文本的优势。

为了突出这些好处,我们进行了测试,比较了使用光栅扫描提取的纯文本与使用LAYOUT功能提取的布局感知线性化文本在上下文问答输出结果中的影响。在此测试中,我们使用了Anthropic的Claude Instant模型与Amazon Bedrock结合。然而,对于复杂的文档布局,生成以适当阅读顺序排列的文本,并随之恰当地进行分块可能会面临挑战,具体取决于文档的复杂程度。在接下来的部分中,我们讨论如何提取布局元素并线性化文本,以构建基于LLM的应用程序。我们特别讨论了使用光栅扫描的纯文本与使用LAYOUT功能的线性化文本在文档QampA应用程序中生成的LLM响应的比较评估。

从页面提取布局元素

Amazon Textract Textractor工具包可以通过带有LAYOUT功能的AnalyzeDocument API处理文档,并随后通过页面的PAGELAYOUT属性及其子属性TITLES、HEADERS、FOOTERS、TABLES、KEYVALUES、PAGENUMBERS、LISTS和FIGURES公开检测到的布局元素。每个元素都有自己的可视化功能,方便查看所检测的内容。要开始使用,请通过以下命令安装Textractor:

bashpip install amazontextracttextractor

如以下代码示例所示,文件newsarticlepdf通过带有LAYOUT功能的AnalyzeDocument API进行处理,响应结果存储在文档变量中,该变量包含每个检测到的布局块属性。

pythonfrom textractor import Textractorfrom textractordataconstants import TextractFeatures

extractor = Textractor(profilename=default)inputdocument = /newsarticlepdf

document = extractoranalyzedocument( filesource=inputdocument features=[TextractFeaturesLAYOUT] saveimage=True)

documentpages[0]visualize()documentpages[0]pagelayouttitlesvisualize()documentpages[0]pagelayoutheadersvisualize()documentpages[0]pagelayoutsectionheadersvisualize()documentpages[0]pagelayoutfootersvisualize()documentpages[0]pagelayouttablesvisualize()documentpages[0]pagelayoutkeyvaluesvisualize()documentpages[0]pagelayoutpagenumbersvisualize()documentpages[0]pagelayoutlistsvisualize()documentpages[0]pagelayoutfiguresvisualize()

有关更深入的示例,请参见官方Textractor文档。

从布局响应线性化文本

为了利用布局功能,Amazon Textract Textractor在14版本中进行了大量调整,以提供线性化支持,具有超过40个配置选项,使您可以轻松定制线性化文本输出以满足下游用例需求。新的线性化工具支持当前所有可用的AnalyzeDocument API,包括表格和签名,让您能够在不更改任何代码的情况下将选择项添加到结果文本中。

pythonfrom textractor import Textractorfrom textractordataconstants import TextractFeaturesfrom textractordatatextlinearizationconfig import TextLinearizationConfig

extractor = Textractor(profilename=default)

config = TextLinearizationConfig( hidefigurelayout=True titleprefix=# sectionheaderprefix=## )

document = extractoranalyzedocument( filesource=inputdocument features=[TextractFeaturesLAYOUT] saveimage=True)

print(documentgettext(config=config))

在官方Textractor文档中可以看到这个示例。

我们还为库添加了一个布局格式化打印机,允许您通过将布局API响应以JSON格式传递给单个函数,返回线性化文本按页。

bashpython m pip install q amazontextractprettyprinter

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

pythonfrom textractcallertcall import calltextract TextractFeaturesfrom textractprettyprintertprettyprint import gettextfromlayoutjson

textractjson = calltextract(inputdocument=inputdocument features=[TextractFeaturesLAYOUT TextractFeaturesTABLES])

layout = gettextfromlayoutjson(textractjson=textractjsonexcludefiguretext=True # 可选excludepageheader=True # 可选excludepagefooter=True # 可选excludepagenumber=True # 可选savetxtpath=s3//bucket/prefix) # 可选

fulltext = layout[1]print(fulltext)

评估LLM在抽象和提取任务中的表现指标

布局感知文本被发现可以提高LLM生成的文本的性能和质量。特别地,我们评估了两种类型的LLM任务抽象任务和提取任务。

抽象任务是指要求AI生成在源材料中未直接存在的新文本的任务。例如总结和问答等。对于这些任务,我们使用面向回忆的摘要评估ROUGE指标来评估LLM在问答任务上的表现,基于一组真实数据进行对比。

提取任务指的是模型识别和提取输入文本特定部分以构造响应的活动。在这些任务中,模型专注于从源材料中选择相关的片段如句子、短语或关键字,而不是生成新内容。命名实体识别NER和关键字提取都是这类任务的例子。在这些任务中,我们使用基于布局线性化所提取文本的命名实体识别任务的平均标准化Levenshtein相似度ANLS进行评估。

ROUGE分数分析:抽象问答任务

我们的测试设定是在多列文档上进行上下文QampA,通过提取文本后执行RAG以获取LLM的回答。我们对一组问题进行QampA,比较基于光栅扫描提取的原始文本与布局感知线性化文本。接着,我们针对每个问题评估ROUGE指标,通过将机器生成的响应与相应的真实答案进行比较。在此实验中,真实答案是由人类回答的一组问题,作为对照组。

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

我们使用DocUNet Document Image Unwarping via a Stacked UNet数据集中的一份文档进行测试。该文档是带有标题、段落和图像的多列文档。我们还定义了一组20个问题,并由人类回答,以作为对照组或真实数据。相同的20个问题随后用于生成LLM的响应。

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

以下代码片段用于从文档生成原始文本:

pythonimport textractcaller as tcfrom textractcallertcall import calltextractfrom textractprettyprintertprettyprint import getlinesstring

plaintextractjson = calltextract(inputdocument=inputdocument)plaintext = getlinesstring(textractjson=plaintextractjson)

print(plaintext)

输出已简化如下,读取顺序不正确,原因是API缺乏布局意识,提取的文本跨越文本列。

plaintextPHOTONICS FOR A BETTER WORLDUNESCO ENDORSESINTERNATIONAL DAY OF LIGHTFirst celebration in 2018 will become an annualreminder of photonicsenabled technologies

通过DetectDocumentText提取的原始文本读取顺序的可视化结果如下所示。

虎跃加速器app官网下载

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

pythonimport textractcaller as tcfrom textractcallertcall import calltextract TextractFeaturesfrom textractprettyprintertprettyprint import gettextfromlayoutjson

layouttextractjson = calltextract(inputdocument=inputdocument features=[TextractFeaturesLAYOUT])layouttext = gettextfromlayoutjson(textractjson=layouttextractjson)[1]print(layouttext)

输出已简化如下,读取顺序得到了保留,因为我们使用了LAYOUT功能,文本更通顺合理。

plaintextPHOTONICS FOR A BETTER WORLD

UNESCO ENDORSES INTERNATIONAL DAY OF LIGHT

First celebration in 2018 will become an annualreminder of photonicsenabled technologies

通过使用带有LAYOUT功能的AnalyzeDocument提取的布局线性化文本的读取顺序可视化结果如下所示。

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

接下来,我们为两组文本块生成向量嵌入,并将它们加载到两个独立的集合中的向量数据库中。我们使用开源的ChromaDB作为我们的内存向量数据库,并