作者:Ajjay Govindaram 和 Nikita Ivkin | 2023 年 11 月 27 日
在 高级 (300) | | | |
生成人工智能()模型在生成高质量文本、图像和其他内容方面展现了惊人的能力。然而,这些模型需要大量清洁和结构化的训练数据才能充分发挥其潜力。大多数真实世界的数据以非结构化格式存在,如 PDF,这需要预处理才能有效使用。
根据 的统计,当前超过 80% 的商业数据都是非结构化数据。这些数据包括电子邮件、PDF、扫描文档、图像、音频和视频等多种格式。虽然这些数据包含宝贵的见解,但其非结构化特性使得 AI算法难以解释和学习。根据 ,仅有 18% 的企业报告能够有效利用非结构化数据。
随着 AI采用率的持续上升,开发高效机制来消化和学习非结构化数据显得愈加重要。这可能涉及更好的预处理工具、半监督学习技术以及自然语言处理的进步。有效利用其非结构化数据的公司将从 AI 中获得显著的竞争优势。清洗数据对良好的模型表现至关重要,提取的文本中仍然包含大量无意义的和通用的文本(例如,阅读 HTML)。从互联网抓取的数据通常有大量重复内容,社交媒体、评论或任何用户生成的内容也可能包含毒性和偏见内容,因此需要通过某些预处理步骤进行过滤。低质量内容或机器人生成的文本也会出现,可以使用相关元数据进行过滤(例如,过滤出客户反馈评价低的客户服务响应)。
在检索增强生成()模型的多个阶段,数据准备至关重要。知识源文档需要经过预处理,例如清洗文本和生成语义嵌入,以便能够有效地进行索引和检索。用户的自然语言查询同样需要预处理,以便能够编码为向量,并与文档嵌入进行比较。检索到相关上下文后,可能需要进一步的预处理,例如截断,然后与用户的查询拼接,以创建基础模型的最终提示。现在, 支持全面的数据准备功能,由 提供支持。通过这项集成,SageMaker Canvas为客户提供了一个从数据到商业洞察的端到端无代码工作区。用户可以轻松发现和聚合来自50多个数据源的数据,并使用 SageMaker Canvas的可视化界面探索和准备数据,借助超过300个内置分析和转换功能。
在本篇文章中,我们将处理一个 PDF 文档数据集—— 。此外,我们将展示如何为 RAG预处理数据集。具体而言,我们将清洗数据并创建 RAG文档以回答有关数据集内容的问题。考虑以下机器学习(ML)问题:用户向大型语言模型(LLM)提问:“如何在 Amazon Bedrock中过滤和搜索模型?”。LLM 在训练或微调阶段未见过该文档,因此无法回答这个问题,并且很可能会出现幻觉。我们在本文的目标是从 PDF 中找到相关文本(即 RAG),并将其附加到提示中,从而使 LLM 能够回答与该文档相关的问题。
以下是您可以通过 (由 提供支持)完成的主要预处理步骤:
在本次操作演示中,您应具备以下条件:
注意 : 根据创建 OpenSearch Service域。为简单起见,选择具有主用户名和密码的选项以实现细粒度访问控制。创建域后,使用以下映射创建矢量索引,矢量维度 1536 对应 Amazon Titan嵌入:
json PUT knowledge-base-index { "settings": { "index.knn": True }, "mappings": { "properties": { "text_content": { "type": "text", "fields": { "keyword": { "type": "keyword" } } }, "text_content_v": { "type": "knn_vector", "dimension": 1536 } } } }
在本节中,我们将介绍如何构建数据流以从 PDF 中提取文本和元数据,清洗和处理数据,使用 Amazon Bedrock 生成嵌入,并在 AmazonOpenSearch 中对数据进行索引。
启动 SageMaker Canvas
要启动 SageMaker Canvas,请完成以下步骤:
![Launch SageMaker删除)
创建数据流
完成以下步骤以在 SageMaker Canvas 中创建数据流:
![Create Data删除)
![Import删除)
现在让我们从 Amazon S3 桶导入数据:
![Select Amazon S3 as Data删除)
![Select Metadata删除)
![Metadata删除)
要添加新的转换,请执行以下步骤:
![Extract Text删除)
![Extract Text删除)
从示例代码片段中,浏览并选择 屏蔽 PII 。根据需要修改代码片段并选择 Add 。
![Mask PII删除)
![Mask PII删除)
从示例代码片段中,浏览并选择 分块文本 。根据需要修改代码片段并选择 Add 。
![Chunk Text删除)
![Chunk Text删除)
从示例代码片段中,浏览并选择 使用 Bedrock 生成文本嵌入 。根据需要修改代码片段并选择 Add 。
![Generate Text Embedding with Bedrock删除)
text_column = "text_redacted_chunks_embedding" output_column = text_column +
"_response"
headers = {"Content-Type": "application/json", "kbn-xsrf": "true", "osd-xsrf":
"true", "security_tenant": "global"}; index_name = 's3_vector_data_v1'
def index_data(text_redacted_chunks, text_redacted_chunks_embedding):
input_json = json.dumps({"text_content": text_redacted_chunks[-1],
"text_content_v": text_redacted_chunks_embedding[-1]}) response =
requests.request(method="POST", url=f'https://search-canvas-vector-db-domain-
dt3yq3b4cykwuvc6t7rnkvmnka.us-west-2.es.amazonaws.com/{index_name}/_doc',
headers=headers, json=input_json, auth=(master_user, 'master_pass'),
timeout=30) return response.content
indexing_udf = udf(index_data, StringType()) df =
df.withColumn('index_response', indexing_udf(col("text_redacted_chunks"),
col("text_redacted_chunks_embedding"))) ```
![Index Data删除)
最终,创建的数据流如下所示:
![Data FlowDiagram](https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2023/11/27/ML-15986
Leave a Reply