产品展示

使用 Amazon Textract、Amazon Bedrock 和 LangChain 的智能文

使用 Amazon Textract、Amazon Bedrock 和 LangChain 的智能文

智能文档处理:结合 Amazon Textract、Amazon Bedrock 和 LangChain

作者:Sonali Sahu、Anjan Biswas 和 Chinmayee Rane,发表于 2023 年 10 月 24 日在 Amazon Bedrock、Amazon Machine Learning、Amazon Textract、人工智能 和 生成式人工智能 进行详细探讨。

关键要点

智能文档处理 (IDP) 利用生成式人工智能将非结构化数据转换为结构化见解。可以通过与 Amazon Textract 和 LangChain 的集成来增强 IDP 能力。不同处理阶段中大语言模型 (LLM) 可以执行文档分类、总结、标准化和纠错等任务。

在信息时代,各种文档中庞大的数据量为企业带来了挑战与机遇。传统文档处理方法常常在效率和准确性上不能满足要求,从而开启了创新和成本优化的空间。智能文档处理IDP的出现显著推动了文档处理的进步,企业可以将各种类型的非结构化数据转化为结构化的可行见解,从而大幅度提高效率并减少人工工作。然而,潜力并不止于此。通过将 生成式人工智能 (AI) 集成到流程中,我们可以进一步增强 IDP 的能力。生成式 AI 不仅改善了文档处理,还适应了不断变化的数据模式。本文将带您了解 IDP 和生成式 AI 的联动,展示它们如何代表下一代文档处理的前沿。

我们在系列文章中详细探讨了 IDP 与 AWS AI 服务的结合 (第一部分 和 第二部分)。本文讨论如何通过大语言模型 (LLM) 扩展新的或现有的 IDP 架构。具体来说,我们将探讨如何将 Amazon Textract 与 LangChain 结合使用作为文档加载器,并利用 Amazon Bedrock 提取文档中的数据,实现 IDP 各阶段的生成式 AI 能力。

Amazon Textract 是一项机器学习 (ML) 服务,能够自动提取扫描文档中的文本、手写内容和数据。Amazon Bedrock 是一项完全托管的服务,通过易于使用的 API 提供高效的基础模型 (FM)。

解决方案概述

以下图表提供了一种高层次的参考架构,解释如何使用基础模型进一步增强 IDP 工作流程。您可以根据用例和期望结果在 IDP 的一个或多个阶段中使用 LLM。

在此架构中,LLM 被用来执行 IDP 工作流中的特定任务:

文档分类:除了使用 Amazon Comprehend 之外,您还可以使用 LLM 通过少量示例进行文档分类。摘要:可以借助 LLM 在 IDP 的提取阶段对更大文档进行总结。标准化和上下文问答:可以用 LLM 提取文档中未经明确推断的信息。模板和标准化:IDP 流程通常生成必须符合特定确定性模式的输出。拼写检查和纠正:尽管 Amazon Textract 可以从扫描文档中提取准确的值,但您还可以使用 LLM 识别提取数据中的拼写和语法错误。

接下来的部分,我们将深入探讨如何将 Amazon Textract 集成到生成式 AI 工作流中,并使用 LangChain 处理这些特定任务的文档。提供的代码块经过简化。有关详细的 Python 笔记本和逐步说明,请参阅我们的 GitHub 存储库。

Amazon Textract LangChain 文档加载器

文本提取是使用 LLM 处理文档时的重要环节。您可以使用 Amazon Textract 从文档中提取未结构化的原始文本,并保留原始的半结构化或结构化对象,例如文档中的关键值对和表格。医疗保健和保险索赔或抵押贷款等文档包包含多种格式的信息,文档提取在这里很重要,因为 LLM 可以利用丰富的内容生成更准确和相关的响应,否则将影响 LLM 输出的质量。

LangChain 是一个强大的开源框架,用于与 LLM 集成。虽然 LLM 通常是多才多艺的,但对于需要更深层上下文和细微响应的特定领域任务可能会面临挑战。LangChain 使开发人员能够构建能够将复杂任务拆分为子任务的代理,这些子任务可以通过连接和链式 LLM 提示来引入上下文和记忆。

LangChain 提供了文档加载器,可以加载和转换文档中的数据。您可以使用它们将文档结构化为 LLM 可以处理的所需格式。 AmazonTextractPDFLoader 是一种服务加载器类型的文档加载器,提供了一种通过将 Amazon Textract 与 LangChain 结合使用来自动化文档处理的快速方式。有关 AmazonTextractPDFLoader 的更多详细信息,请参阅 LangChain 文档。

要使用 Amazon Textract 文档加载器,首先从 LangChain 库中导入:

pythonfrom langchaindocumentloaders import AmazonTextractPDFLoader

梯子加速

您可以从 HTTPS URL 端点以及通过 Amazon Simple Storage Service (Amazon S3) 存储桶的 Amazon S3 对象 URL 加载文档:

pythonhttpsloader = AmazonTextractPDFLoader(https//samplewebsitecom/sampledocpdf)httpsdocument = httpsloaderload()

s3loader = AmazonTextractPDFLoader(s3//samplebucket/sampledocpdf)s3document = s3loaderload()

您还可以将文档存储在 Amazon S3 中,并使用 s3// URL 模式引用它们,如 访问存储桶 中所述,并将此 S3 路径传递给 Amazon Textract PDF 加载器:

pythonimport boto3textractclient = boto3client(textract regionname=useast2)

filepath = s3//amazontextractpubliccontent/langchain/layoutparserpaperpdfloader = AmazonTextractPDFLoader(filepath client=textractclient)documents = loaderload()

多页文档将包含多页文本,可以通过文档对象访问,文档对象是页的列表。以下代码循环遍历文档对象中的页面,并打印可通过 pagecontent 属性获取的文档文本:

pythonprint(len(documents))

for document in documents print(documentpagecontent)

文档分类

Amazon Comprehend 和 LLM 可以有效地用于文档分类。Amazon Comprehend 是一项自然语言处理 (NLP) 服务,使用 ML 从文本中提取见解,并支持基于布局的文档如 PDF、Word 和图像格式进行自定义分类模型训练。有关使用 Amazon Comprehend 文档分类器的更多信息,请参阅 Amazon Comprehend 文档分类器添加布局支持以提高准确性。

与 LLM 结合时,文档分类成为管理大量文档的强大方法。LLM 在文档分类中非常有用,因为它们可以通过自然语言理解分析文档中的文本、模式和上下文元素。您还可以根据特定的文档类型进行微调。当 IDP 管道中引入新文档类型需要进行分类时,LLM 可以处理文本并根据一组类别对文档进行分类。以下是一个示例代码,使用 LangChain 文档加载器通过 Amazon Textract 从文档中提取文本,并用于对文档进行分类。我们通过 Amazon Bedrock 使用 Anthropic Claude v2 模型进行分类。

在以下示例中,我们首先提取病人出院报告中的文本,并使用 LLM 将其分类为三种不同文档类型之一DISCHARGESUMMARY、RECEIPT 和 PRESCRIPTION。下面的屏幕截图显示了我们的报告。

我们使用以下代码:

pythonfrom langchaindocumentloaders import AmazonTextractPDFLoaderfrom langchainllms import Bedrockfrom langchainprompts import PromptTemplatefrom langchainchains import LLMChain

loader = AmazonTextractPDFLoader(/samples/documentpng)document = loaderload()

template = Given a list of classes classify the document into one of these classes Skip any preamble text and just give the class name

DISCHARGESUMMARY RECEIPT PRESCRIPTION{doctext}

prompt = PromptTemplate(template=template inputvariables=[doctext])bedrockllm = Bedrock(client=bedrock modelid=anthropicclaudev2)

llmchain = LLMChain(prompt=prompt llm=bedrockllm)classname = llmchainrun(document[0]pagecontent)

print(fThe provided document is = {classname})

代码的输出:

The provided document is a DISCHARGESUMMARY

文档摘要

摘要涉及将给定文本或文档浓缩为更短的版本,同时保留其关键信息。这一技术对于高效的信息检索非常有益,使用户能够快速掌握文档的要点,而无需阅读全文。尽管 Amazon Textract 不直接执行文本摘要,但它提供了从文档中提取全部文本的基础能力。这些提取的文本作为输入供 LLM 模型执行文本摘要任务。

使用相同的病人出院报告,我们使用 AmazonTextractPDFLoader 从该文档中提取文本。同样,我们通过 Amazon Bedrock 使用 Claude v2 模型,并初始化其包含指令的提示在这种情况下为摘要。最后,我们通过传入文档加载器提取的文本来运行 LLM 链。此操作在 LLM 上运行,使用由指令组成的提示进行摘要,文档文本被标记为 Document。请查看以下代码:

pythonfrom langchaindocumentloaders import AmazonTextractPDFLoaderfrom langchainllms import Bedrockfrom langchainprompts import PromptTemplatefrom langchainchains import LLMChain

loader = AmazonTextractPDFLoader(/samples/dischargesummarypng)document = loaderload()

template = Given a full document give me a concise summary Skip any preamble text and just give the summary

{doctext}

prompt = PromptTemplate(template=template inputvariables=[doctext])bedrockllm = Bedrock(client=bedrock modelid=anthropicclaudev2)numtokens = bedrockllmgetnumtokens(document[0]pagecontent)print(fOur prompt has {numtokens} tokens nn=========================n)llmchain = LLMChain(prompt=prompt llm=bedrockllm)summary = llmchainrun(document[0]pagecontent)print(summaryreplace(

)strip())

代码生成病人出院总结报告的摘要:

plaintext我们的提示有797个标记=========================35岁男性因上腹部疼痛、恶心、疲劳入院。被认为可能有溃疡。出院时进行活动限制、抗生素治疗、饮食变更,并安排后续检查。

前面的示例使用单页文档进行摘要。但您可能会处理包含多页的文档,需要进行摘要。处理多页文档摘要的常见方法是首先对较小文本块进行摘要,然后将较小的摘要组合以获取文档的最终摘要。请注意,这种方法需要多次调用 LLM。此逻辑可以轻松构建;然而,LangChain 提供了内置的摘要链,可以对大文本来自多页文档进行摘要。摘要可以通过 mapreduce 或 stuff 选项进行,这些选项用来管理对 LLM 的多次调用。在以下示例中,我们使用 mapreduce 对多页文档进行摘要。以下图显示我们的工作流。

让我们先提取文档,查看每页的总标记数和总页数:

pythonfrom langchaindocumentloaders import AmazonTextractPDFLoaderfrom langchainllms import Bedrock

bedrockllm = Bedrock(client=bedrock modelid=anthropicclaudev2)

loader = AmazonTextractPDFLoader(fs3//{databucket}/bedrocksample/healthplanpdf)document = loaderload()numdocs = len(document)print(fThere are {numdocs} pages in the document)for index doc in enumerate(document) numtokensfirstdoc = bedrockllmgetnumtokens(docpagecontent) print(fPage {index 1} has approx {numtokensfirstdoc} tokens)

输出显示文档页面的总数和每页的近似标记数。我将在此处省略部分输出。

接下来,我们使用 LangChain 内置的 loadsummarizechain 来总结整个文档:

pythonfrom langchainchainssummarize import loadsummarizechain

summarychain = loadsummarizechain(llm=bedrockllm chaintype=mapreduce)output = summarychainrun(document)print(outputstrip())

标准化和问答

在本节中,我们讨论标准化和问答任务。

标准化

输出标准化是一种文本生成任务,在该任务中,LLM 被用于提供一致的输出文本格式。这个任务在需要输出与所需格式一致的关键实体提取的自动化方面特别有用。例如,我们可以遵循提示工程的最佳实践,微调 LLM 来将日期格式化为 MM/DD/YYYY 格式,以便与数据库 DATE 列兼容。以下代码块演示了如何使用 LLM 和提示工程来实现这一目的。我们不仅将日期值的输出格式标准化,还提示模型以 JSON 格式生成最终输出,以便在后续应用程序中轻松使用。我们使用 LangChain 表达式语言 (LCEL) 将两个操作结合在一起。第一个操作提示 LLM 生成文档中的日期 JSON 格式的输出,第二个操作将 JSON 输出标准化为所需格式。请注意,这两个步骤的操作也可以通过适当的提示工程在单个步骤中执行,下面的标准化和模板化将在此说明。

pythonfrom langchaindocumentloaders import AmazonTextractPDFLoaderfrom langchainllms import Bedrockfrom langchainprompts import PromptTemplatefrom langchainchains import LLMChain

loader = AmazonTextractPDFLoader(/samples/dischargesummarypng)document = loaderload()

bedrockllm = Bedrock(client=bedrock modelid=anthropicclaudev2)

template1 = Given a full document answer the question and format the output in the format specified Skip any preamble text and just generate the JSON

{{ keynamekeyvalue}}{doctext}{question}

template2 = Given a JSON document format the dates in the value fields precisely in the provided format Skip any preamble text and just generate the JSON

DD/MM/YYYY{jsondoc}

prompt1 = PromptTemplate(template=template1 inputvariables=[doctext question])llmchain = LLMChain(prompt=prompt1 llm=bedrockllm verbose=True)

使用 Amazon Textract、Amazon Bedrock 和 LangChain 的智能文

prompt2 = PromptTemplate(template=template2 inputvariables=[jsondoc])llmchain2 = LLMChain(prompt=prompt2 llm=bedrockllm verbose=True)

chain =

  1. 企业战略博客 2021:年终总结 云企业战略博客 企业战略博客 2021:年终总结 云企业战略博客

    2021年企业战略博客:年终总结关键点提炼在这篇文章中,我们回顾2021年的企业战略博客,整理出重要主题和关键讨论,包括数字化转型的商业价值、环境、社会和治理ESG问题、战略规划、人工智能与机器学习、执行力和安全性等方面的内容。概述在过去的一年里,我们撰写了多篇博客,围绕与AWS客户高管交流时所关注...

  1. 使用 MySQL Shell 和 Amazon S3 降低 Amazon Aurora MySQL 使用 MySQL Shell 和 Amazon S3 降低 Amazon Aurora MySQL

    降低 Amazon Aurora MySQL 备份成本的方法关键要点本篇文章探讨了如何通过使用 MySQL Shell 与 Amazon S3 整合来降低 Amazon Aurora 的备份成本,尤其适用于长达 35 天以上的备份保留期。使用此方法能够将备份文件压缩并直接上传至 Amazon S3,...