使用生成式 AI 基础模型,使用您自己的数据进行摘要和问答 | 亚马逊网络服务

使用生成式 AI 基础模型,使用您自己的数据进行摘要和问答 | 亚马逊网络服务

大型语言模型 (LLM) 可用于分析复杂文档并提供问题的摘要和答案。 帖子 Amazon SageMaker JumpStart 中金融数据基础模型的域适应微调 描述如何使用您自己的数据集微调 LLM。 一旦您拥有了扎实的法学硕士学位,您将希望向业务用户公开该法学硕士学位以处理新文档,这些文档可能长达数百页。 在这篇文章中,我们演示了如何构建一个实时用户界面,让业务用户处理任意长度的 PDF 文档。 文件处理完毕后,您可以总结文档或提出有关内容的问题。 本文中描述的示例解决方案可在 GitHub上.

处理财务文件

季度收益报告和股东年度报告等财务报表通常长达数十或数百页。 这些文档包含大量样板语言,例如免责声明和法律语言。 如果您想从这些文档之一中提取关键数据点,您需要时间并且需要熟悉样板语言,以便您可以识别有趣的事实。 当然,你不能向法学硕士询问有关其从未见过的文档的问题。

用于摘要的 LLM 对传递到模型中的标记(字符)数量有限制,除了一些例外,这些标记通常不超过几千个标记。 这通常会妨碍总结较长文档的能力。

我们的解决方案可以处理超过法学硕士最大标记序列长度的文档,并使该文档可供法学硕士进行问答。

解决方案概述

我们的设计包含三个重要部分:

  • 它有一个交互式网络应用程序,供商业用户上传和处理 PDF
  • 它使用 langchain 库将大型 PDF 分割成更易于管理的块
  • 它使用检索增强生成技术让用户提出有关法学硕士以前从未见过的新数据的问题

如下图所示,我们使用托管在 React JavaScript 中的前端实现 亚马逊简单存储服务 (Amazon S3) 存储桶前面为 亚马逊的CloudFront的。 前端应用程序允许用户将 PDF 文档上传到 Amazon S3。 上传完成后,您可以触发由以下功能支持的文本提取作业 亚马逊Textract。 作为后处理的一部分, AWS Lambda 函数将特殊标记插入到指示页面边界的文本中。 当这项工作完成后,您可以调用一个 API 来总结文本或回答相关问题。

使用生成式 AI 基础模型,使用您自己的数据进行摘要和问答 |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

由于其中一些步骤可能需要一些时间,因此该架构使用解耦的异步方法。 例如,对文档进行总结的调用会调用 Lambda 函数,该函数将消息发布到 Amazon Simple Queue服务 (亚马逊 SQS)队列。 另一个 Lambda 函数接收该消息并启动 亚马逊弹性容器服务 (亚马逊云服务器) AWS 法门 任务。 Fargate 任务调用 亚马逊SageMaker 推理端点。 我们在这里使用 Fargate 任务,因为总结很长的 PDF 可能需要比 Lambda 函数更多的时间和内存。 汇总完成后,前端应用程序可以从 Amazon DynamoDB 表。

为了进行总结,我们使用 AI21 的 Summarize 模型,这是可通过以下方式获得的基础模型之一: 亚马逊SageMaker JumpStart。 尽管该模型可处理最多 10,000 个单词(约 40 页)的文档,但我们使用 langchain 的文本拆分器来确保对 LLM 的每次摘要调用长度不超过 10,000 个单词。 对于文本生成,我们使用 Cohere 的 Medium 模型,并使用 GPT-J 进行嵌入,两者都是通过 JumpStart 实现的。

汇总处理

当处理较大的文档时,我们需要定义如何将文档分割成较小的部分。 当我们从 Amazon Textract 获取文本提取结果时,我们会插入较大文本块(可配置的页面数量)、单个页面和换行符的标记。 Langchain 将根据这些标记进行拆分,并组装低于代币限制的较小文档。 请看下面的代码:

text_splitter = RecursiveCharacterTextSplitter( separators = ["<CHUNK>", "<PAGE>", "n"], chunk_size = int(chunk_size), chunk_overlap = int(chunk_overlap)) with open(local_path) as f: doc = f.read() texts = text_splitter.split_text(doc) print(f"Number of splits: {len(texts)}") llm = SageMakerLLM(endpoint_name = endpoint_name) responses = [] for t in texts: r = llm(t) responses.append(r) summary = "n".join(responses)

摘要链中的 LLM 是我们 SageMaker 端点的薄包装:

class SageMakerLLM(LLM): endpoint_name: str @property
def _llm_type(self) -> str: return "summarize" def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str: response = ai21.Summarize.execute( source=prompt, sourceType="TEXT", sm_endpoint=self.endpoint_name ) return response.summary 

问题回答

在检索增强生成方法中,我们首先将文档分割成更小的片段。 我们为每个片段创建嵌入,并通过 langchain 的接口将它们存储在开源 Chroma 向量数据库中。 我们将数据库保存在 亚马逊弹性文件系统 (Amazon EFS) 文件系统供以后使用。 请看下面的代码:

documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size = 500, chunk_overlap = 0)
texts = text_splitter.split_documents(documents)
print(f"Number of splits: {len(texts)}") embeddings = SMEndpointEmbeddings( endpoint_name=endpoint_name,
)
vectordb = Chroma.from_documents(texts, embeddings, persist_directory=persist_directory)
vectordb.persist()

当嵌入准备好后,用户可以提出问题。 我们在向量数据库中搜索与问题最匹配的文本块:

embeddings = SMEndpointEmbeddings( endpoint_name=endpoint_embed
)
vectordb = Chroma(persist_directory=persist_directory, embedding_function=embeddings)
docs = vectordb.similarity_search_with_score(question)

我们采用最接近的匹配块并将其用作文本生成模型的上下文来回答问题:

cohere_client = Client(endpoint_name=endpoint_qa)
context = docs[high_score_idx][0].page_content.replace("n", "")
qa_prompt = f'Context={context}nQuestion={question}nAnswer='
response = cohere_client.generate(prompt=qa_prompt, max_tokens=512, temperature=0.25, return_likelihoods='GENERATION')
answer = response.generations[0].text.strip().replace('n', '')

用户体验

尽管法学硕士代表了先进的数据科学,但法学硕士的大多数用例最终都涉及与非技术用户的交互。 我们的示例 Web 应用程序处理一个交互式用例,业务用户可以在其中上传和处理新的 PDF 文档。

下图显示了用户界面。 用户首先上传 PDF。 将文档存储在 Amazon S3 中后,用户就可以开始文本提取作业。 完成后,用户可以调用摘要任务或提出问题。 用户界面公开了一些高级选项,例如块大小和块重叠,这对于在新文档上测试应用程序的高级用户非常有用。

用户界面

接下来的步骤

法学硕士提供重要的新信息检索能力。 商业用户需要方便地访问这些功能。 未来的工作可以考虑两个方向:

  • 利用 Jumpstart 基础模型中已有的强大法学硕士。 只需几行代码,我们的示例应用程序就可以部署并利用 AI21 和 Cohere 的高级 LLM 进行文本摘要和生成。
  • 使非技术用户也可以使用这些功能。 处理 PDF 文档的先决条件是从文档中提取文本,并且摘要作业可能需要几分钟才能运行。 这就需要一个具有异步后端处理功能的简单用户界面,并且可以使用 Lambda 和 Fargate 等云原生服务轻松设计。

我们还注意到 PDF 文档是半结构化信息。 像章节标题这样的重要提示很难以编程方式识别,因为它们依赖于字体大小和其他视觉指示器。 识别信息的底层结构有助于法学硕士更准确地处理数据,至少在法学硕士可以处理无限长度的输入之前是这样。

结论

在这篇文章中,我们展示了如何构建一个交互式 Web 应用程序,让业务用户上传和处理 PDF 文档以进行摘要和问答。 我们了解了如何利用 Jumpstart 基础模型来访问高级法学硕士,并使用文本分割和检索增强生成技术来处理较长的文档并将其作为信息提供给法学硕士。

此时,没有理由不向您的用户提供这些强大的功能。 我们鼓励您开始使用 快速启动基础模型


关于作者

作者图片兰迪·德福 是 AWS 的高级首席解决方案架构师。 他拥有密歇根大学电子工程硕士学位,在那里从事自动驾驶汽车的计算机视觉研究。 他还拥有科罗拉多州立大学的 MBA 学位。 Randy 在技术领域担任过多种职位,从软件工程到产品管理。 In 于 2013 年进入大数据领域,并继续探索该领域。 他积极致力于 ML 领域的项目,并在包括 Strata 和 GlueCon 在内的众多会议上发表过演讲。

时间戳记:

更多来自 AWS机器学习