T
traeai
登录
返回首页
AWS Machine Learning Blog

使用 Amazon Nova 多模态嵌入实现制造业智能

8.5Score
使用 Amazon Nova 多模态嵌入实现制造业智能

TL;DR · AI 摘要

Amazon Nova Multimodal Embeddings通过将文本、图像和文档映射到共享向量空间,显著提升了制造业多模态检索系统的性能。

核心要点

  • Amazon Nova支持文本、图像和文档的多模态嵌入,适用于制造业文档检索。
  • 1024维嵌入在质量和成本之间提供了实用平衡。
  • 多模态检索系统在26个制造查询中表现优于仅文本系统。

结构提纲

按章节快速跳转。

  1. 介绍制造业文档的复杂性和传统文本检索系统的局限性。

  2. Amazon Nova Multimodal Embeddings如何将不同模态映射到同一向量空间。

  3. 支持从256到3072的不同维度设置及其权衡。

  4. 构建并比较了多模态与仅文本检索管道的性能。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • Amazon Nova Multimodal Embeddings
    • 应用场景
      • 制造业文档检索
    • 核心技术
      • 多模态嵌入
      • 共享向量空间

金句 / Highlights

值得收藏与分享的关键句。

#AWS#Amazon Bedrock#多模态嵌入#制造业
打开原文

标题:使用 Amazon Nova 多模态嵌入实现制造智能化 | Amazon Web Services

来源链接:https://aws.amazon.com/blogs/machine-learning/manufacturing-intelligence-with-amazon-nova-multimodal-embeddings/

发布时间:2026-05-11T09:08:24-08:00

Markdown 内容: 如果你从事航空航天、汽车或重型工业制造领域的工作,你的组织可能维护着大量的技术文档。这些文档结合了书面规范与工程图纸、CAD 绘图、检查照片、热分析曲线以及疲劳曲线等内容。一个关于喷嘴喉部最大壁温的文本查询答案可能隐藏在热轮廓图中,而不是书面描述中。仅基于文本检索系统无法提取这些信息,因为它们无法识别图像内容。

Amazon Nova 多模态嵌入 通过将文本、图像和文档页面映射到共享向量空间来解决这一问题。文本查询可以检索工程图纸,而图像查询也可以检索书面规范,因为这两种模态共享相同的坐标系。

在这篇文章中,我们将使用 Amazon BedrockAmazon S3 向量 构建一个用于航空航天制造文档的多模态检索系统。我们将在 26 个制造查询上评估该系统,并比较文本-only 流程和多模态流程之间的生成质量。

制造业中多模态检索为何重要

大多数制造文档结合了文本、图表和图像。一份工作订单可能包含书面组装程序以及已完成步骤的标注照片。检查报告会将通过/失败测量值与焊接接头的射线照片配对。材料认证包括表格机械属性和工程师在设计审查时必须参考的 S-N 疲劳曲线。

考虑一些来自本文使用的数据集中的具体视觉信息示例:扭矩规格表出现在工程图纸中,而不是以独立文本形式存储。彩色编码的热轮廓图用于可视化火箭发动机喷嘴的峰值温度。制造工艺流程图用决策菱形和颜色编码的门控标记质量暂停点,并且相关周期时间作为注释显示在图表本身上。

仅文本检索系统通过 OCR 提取文本,然后嵌入并索引提取出的字符串来处理这些文档。这种方法在答案出现在文档的书面部分时有效,但文本-only 系统忽略了图表中的空间关系、检查图像中的视觉模式以及图表和曲线中编码的定量信息。当你搜索涡轮泵中使用的轴承类型时,答案可能出现在交叉剖面图的标注中,OCR 可能会误读或剥离其空间上下文。

多模态嵌入采用不同的方法。它不是将图像转换为文本然后再嵌入文本,而是直接处理图像并生成与文本嵌入处于相同空间的向量。关于涡轮泵轴承的文本查询可以根据视觉理解匹配我们的数据集中交叉剖面图,而不仅仅是 OCR 能提取的文本。

Amazon Nova 多模态嵌入概述

Amazon Nova 多模态嵌入Amazon Bedrock 中可用,可为文本、图像和多页文档生成嵌入。文本、图像和文档模态投影到一个共享的向量空间中,这意味着你可以直接计算文本嵌入和图像嵌入之间的余弦相似度。

你可以从 256、384、1024 或 3072 的嵌入维度中进行配置。更高的维度捕获更多的语义细节,但需要更多的存储和计算资源来进行相似性搜索。对于本文的评估,我们使用 1024 维度作为检索质量和成本之间的实用平衡。该模型还支持 DOCUMENT_IMAGE 级别,这是一种专为包含图表、表格和标注图表等混合内容的页面设计的处理模式。

对于检索工作负载,模型接受设置为 GENERIC_INDEX(用于正在索引的文档)或 GENERIC_RETRIEVAL(用于查询)的 purpose 参数。这种不对称嵌入方法在无需手动格式化查询的情况下改进了检索向量空间。

解决方案概述

我们在同一数据集上构建了两个并行检索管道,以比较它们下游生成的质量。

数据集 – 15 张独立的技术图像(CAD 图纸、检查报告、测试曲线、材料规范、工艺流程图)和五个多页 PDF(装配程序、热火测试报告、工程变更通知、材料认证、不符合报告)。这些文件包含合成的航空航天制造数据。

管道 A,多模态 – 使用 Amazon Nova 多模态嵌入直接嵌入每张图像和每个 PDF 页面作为文档图像,然后将其导入 Amazon Simple Storage Service (Amazon S3) 向量索引。

管道 B,文本-only 基线 – 将每张图像和 PDF 页面发送到 Amazon Nova 2 Lite 进行 OCR 文本提取,使用 Amazon Nova 多模态嵌入(仅文本输入)嵌入提取的文本,然后导入单独的 Amazon S3 向量索引。OCR 步骤使用以下提示:

注意:OCR 提取文本的提示 “完全按照图像中显示的内容提取所有可见文本。包括所有数字、标签、注释、表格内容、标题和脚注。尽可能保留结构(表格、列表、章节)。仅返回提取的文本,不包含任何评论。”

JSON

评估 – 对多模态索引运行 26 个制造查询以获取检索指标(Recall@K、平均逆秩 (MRR)、NDCG@K)。然后,对于两个管道,使用 Amazon Nova 2 Lite 提取上下文并生成答案,并使用大型语言模型 (LLM) 法官针对真实数据对每个答案进行评分。

下图展示了端到端管道架构。源文档通过两条并行路径流动:管道 A 直接使用 Amazon Nova 多模态嵌入对图像进行嵌入,而管道 B 在嵌入之前通过 OCR 提取文本。两个管道都将向量存储在 Amazon S3 向量中。在查询时,检索到的上下文输入到 Amazon Nova 2 Lite 中以生成答案,并且 LLM 法官针对真实数据对每个答案进行评分。

下图展示了数据集中三个样本文档。从左到右:喷嘴组件 CAD 图、焊接检查报告和 Inconel 718 疲劳 S-N 曲线。每种文档类型都呈现了仅通过文本提取难以捕捉的信息。

解决方案概述

本节逐步介绍从生成嵌入到构建向量索引并运行查询的关键实现步骤。完整的代码可在 GitHub 上的配套笔记本 中找到。

先决条件

要跟随本文操作,您需要在您的 AWS 账户中配置以下资源和访问权限:

  • 具有访问美国东部 (us-east-1) 地区 Amazon Bedrock 的 AWS 账户
  • 已启用 amazon.nova-2-multimodal-embeddings-v1:0us.amazon.nova-2-lite-v1:0 模型访问权限
  • Amazon SageMaker AI 笔记本实例或本地 Python 环境
  • Python 3.10+,并安装 boto3numpypandasmatplotlibPillowpdf2imagetqdm
  • Amazon Bedrock 的 InvokeModel、Amazon S3 和 Amazon S3 向量 API 的 IAM 权限

本文中的示例代码仅供教育用途,尚未经过生产环境审查。在部署到生产环境之前,请根据您组织的安全要求对其进行审查和测试。

生成多模态嵌入

为制造图像生成嵌入需要向 Amazon Bedrock 发出一次 InvokeModel 调用。请求指定图像字节、所需的嵌入维度以及详细程度。对于独立的图像(如 CAD 图),我们使用 STANDARD_IMAGE;对于包含混合文本和图形的 PDF 页面,DOCUMENT_IMAGE 可产生更好的结果,因为该模型会为表格和图表内容应用额外处理。

python
import base64, json, boto3

bedrock_runtime = boto3.client("bedrock-runtime", region_name="us-east-1")
MODEL_ID = "amazon.nova-2-multimodal-embeddings-v1:0"

with open("dataset/nozzle_assembly_diagram.png", "rb") as f:
    b64_data = base64.b64encode(f.read()).decode("utf-8")

request_body = {
    "taskType": "SINGLE_EMBEDDING",
    "singleEmbeddingParams": {
        "embeddingPurpose": "GENERIC_INDEX",
        "embeddingDimension": 1024,
        "image": {
            "format": "png",
            "detailLevel": "STANDARD_IMAGE",
            "source": {"bytes": b64_data},
        },
    },
}

response = bedrock_runtime.invoke_model(
    modelId=MODEL_ID,
    body=json.dumps(request_body),
    accept="application/json",
    contentType="application/json",
)
embedding = json.loads(response["body"].read())["embeddings"][0]["embedding"]
print(f"Embedding dimension: {len(embedding)}")  # 1024

Python

构建 Amazon S3 向量索引

Amazon S3 向量提供了一个托管的向量存储和查询层。我们创建一个向量桶和一个配置为余弦相似度的索引,然后以每批 50 个的方式导入嵌入。

python
s3vectors = boto3.client("s3vectors", region_name="us-east-1")

# 创建向量桶和索引
s3vectors.create_vector_bucket(vectorBucketName="manufacturing-vectors")
s3vectors.create_index(
    vectorBucketName="manufacturing-vectors",
    indexName="manufacturing-multimodal",
    dataType="float32",
    dimension=1024,
    distanceMetric="cosine",
)

# 导入带有元数据的一批嵌入
vectors = [
    {
        "key": "img-nozzle_assembly_diagram",
        "data": {"float32": embedding},
        "metadata": {
            "source_file": "nozzle_assembly_diagram.png",
            "type": "image",
        },
    }
]
s3vectors.put_vectors(
    vectorBucketName="manufacturing-vectors",
    indexName="manufacturing-multimodal",
    vectors=vectors,
)

Python

查询索引

在查询时,我们使用 GENERIC_RETRIEVAL 目的生成文本嵌入,然后调用 query_vectors 以检索最相似的文档。GENERIC_RETRIEVAL 目的告诉模型改进查询-文档匹配的嵌入。

python
query = "What is the torque specification for the chamber flange bolts?"
markdown
请求体如下:

request_body = { "taskType": "SINGLE_EMBEDDING", "singleEmbeddingParams": { "embeddingPurpose": "GENERIC_RETRIEVAL", "embeddingDimension": 1024, "text": {"truncationMode": "END", "value": query}, }, } response = bedrock_runtime.invoke_model( modelId=MODEL_ID, body=json.dumps(request_body), accept="application/json", contentType="application/json", ) query_embedding = json.loads(response["body"].read())["embeddings"][0]["embedding"]

results = s3vectors.query_vectors( vectorBucketName="manufacturing-vectors", indexName="manufacturing-multimodal", queryVector={"float32": query_embedding}, topK=5, returnDistance=True, returnMetadata=True, ) for v in results["vectors"]: print(f" {v['key']} (distance: {v['distance']:.4f})")

code

Python

此查询检索扭矩规格图像和法兰螺栓图案图作为前两个结果,两者都包含答案。纯文本系统需要OCR提取正确捕获工程图纸中的扭矩值,但这对于复杂的工程技术图纸并不总是可靠的。

## 评估方法

我们分两个阶段评估了该系统:检索质量(系统是否找到正确的文档?)和生成质量(语言模型能否从检索到的上下文中生成正确的答案?)。评估数据集包含26个来自航空航天制造文档的查询,每个查询都有相关的地面真实文档ID和参考答案。以下小节描述了每个阶段的工作方式。

### 检索评估

对于每个查询,我们使用`GENERIC_RETRIEVAL`目的生成文本嵌入,查询多模态S3向量索引,并将返回的文档与地面真实的相关文档ID进行比较。

query = "What is the torque specification for the chamber flange bolts?" query_embed = generate_text_embedding( query, dim=1024, purpose="GENERIC_RETRIEVAL" )

results = s3vectors.query_vectors( vectorBucketName="manufacturing-vectors", indexName="manufacturing-multimodal", queryVector={"float32": query_embed}, topK=10, returnDistance=True, returnMetadata=True, ) retrieved_ids = [v["key"] for v in results["vectors"]]

code

Python

我们在K=3、5和10时计算三个指标:**召回率@K**(在前K个结果中找到的相关文档比例)、**MRR**(衡量第一个相关结果出现的高度)和**NDCG@K**(归一化折扣累积增益,当相关文档排名更高时给予更多信用)。

### 使用LLM作为法官的生成评估

对于生成评估,两条管道都为每个查询检索前五个结果。多模态管道直接将检索到的图像作为多模态上下文传递给Amazon Nova 2 Lite。纯文本管道则将OCR提取的文本作为字符串上下文传递。

def generate_answer_multimodal(query, retrieved_keys): """直接将检索到的图像作为多模态上下文传递。""" content_blocks = [] for key in retrieved_keys[:5]: img_path = vector_key_to_image_path(key) with open(img_path, "rb") as f: img_bytes = f.read() content_blocks.append({"text": f"Retrieved document:"}) content_blocks.append({ "image": {"format": "png", "source": {"bytes": img_bytes}} }) content_blocks.append({ "text": ( f"仔细审查上述每张图像。\n\n" f"问题: {query}\n\n答案:" ) }) response = bedrock_runtime.converse( modelId="us.amazon.nova-2-lite-v1:0", messages=[{"role": "user", "content": content_blocks}], inferenceConfig={"maxTokens": 500, "temperature": 0.1}, ) return response["output"]["message"]["content"][0]["text"]

code

Python

每个生成的答案都使用Anthropic Claude Sonnet 4.5作为LLM法官与地面真实参考进行评分。法官接收查询、地面真实答案和生成的答案,然后分配一个1到5的分数并附上简短的解释。

def judge_correctness(query, generated_answer, ground_truth): prompt = ( "您是一名评估法官。请根据地面真实答案对生成的答案进行1到5分的评分。\n\n" "1 = 完全错误或无关\n" "2 = 部分相关但大部分错误\n" "3 = 有一定正确性但缺少关键信息\n" "4 = 大部分正确但有轻微遗漏\n" "5 = 完全正确且完整\n\n" f"问题: {query}\n" f"地面真实答案: {ground_truth}\n" f"生成的答案: {generated_answer}\n\n" '仅以JSON对象形式响应: ' '{"score": <1-5>, "reason": "<简短解释>"}' ) response = bedrock_runtime.converse( modelId="us.anthropic.claude-sonnet-4-5-20250929-v1:0", messages=[{"role": "user", "content": [{"text": prompt}]}], inferenceConfig={"maxTokens": 200, "temperature": 0.0}, ) return response["output"]["message"]["content"][0]["text"]

code

Python

通过分别评估检索和生成,您可以确定每个管道的成功或失败之处。即使检索到了正确的文档,如果生成器无法从提供的上下文格式中提取信息,仍然可能产生错误的答案。

## 评估结果

我们在来自航空航天制造数据集的26个查询上评估了多模态管道。每个查询有一个或多个地面真实的相关文档ID。检索指标衡量系统在不同K值(返回的结果数量)下展示正确文档的效果。

### 多模态检索指标

多模态管道在 K=5 时达到 90% 的召回率,在前五个结果中检索出大部分相关文档,并在 K=10 时上升到 96%。MRR 为 0.92 表示第一个相关结果通常出现在位置 1。在 K=10 时召回率低于 1.0 的两个查询涉及跨 PDF 和独立图像的文档,其中一个相关的来源出现在前 10 名之外。

以下图表显示了 K=3、5 和 10 时的多模态检索指标。MRR 测量第一个相关结果出现的高度;Recall@K 测量在前 K 个结果中找到的相关文档的比例;NDCG@K 测量排名质量,当相关文档出现在列表较高位置时给予更多信用。

图像 3

生成质量:仅文本 vs 多模态

*检索指标*衡量系统是否找到了正确的文档,而*生成指标*则衡量下游语言模型能否从检索到的上下文中生成正确答案。我们将每个管道的前五个检索结果传递给 Amazon Nova 2 Lite 进行回答生成,然后使用 Anthropic Claude Sonnet 4.5 作为 LLM 判官,以 1-5 分对每个答案与真实答案进行评分。

| 管道 | 平均判官分数 | 归一化(0-1) | |------|--------------|---------------| | 多模态(MME) | 4.88 / 5 | 0.977 | | 仅文本(OCR) | 2.00 / 5 | 0.400 |

表 2:由 LLM 作为判官评分的生成质量。多模态管道检索并直接将图像传递给生成器,而仅文本管道则传递通过 OCR 提取的文本。

多模态管道在 88% 的查询中表现更好(23/26),平均得分为 4.88/5。仅文本管道平均得分为 2.00,其中 17/26 的查询得分仅为 1(完全错误)。热分析轮廓图、疲劳曲线、工艺流程图以及 CAD 标注标签等视觉内容显示出最大的改进。对于少数两个管道都表现良好的查询(4 或 5 分),答案恰好是以 OCR 可靠捕获的清晰格式呈现的文本,例如材料名称或表格布局中的数值。

以下图表显示了两种管道的 LLM 判官评分(1-5)分布。多模态管道集中在 5 分,而仅文本管道集中在 1 分,特别是在需要理解视觉内容的查询中。

图像 4

这些结果显示检索质量直接影响答案质量。当系统检索到正确的文档但仅将 OCR 文本传递给生成器时,它会丢失答案依赖的视觉信息。多模态管道通过将原始图像传递给多模态生成器避免了这种损失性转换。

实现复杂度和成本

除了准确性,多模态管道更易于构建且运行成本更低。仅文本管道每份文档需要两次模型调用(一次用于 OCR 文本提取,一次用于文本嵌入),还需要提示工程来处理各种文档布局。多模态管道每份文档只需一次嵌入调用,无需中间提取步骤,因此实现复杂度和每份文档的摄取成本降低了约一半。

清理

为了避免持续的成本,请在完成评估后删除 S3 向量索引和存储桶。GitHub 上的配套笔记本包含这些清理命令(已注释以确保安全)。以下代码片段展示了如何删除索引和向量存储桶:

python
# 删除索引
s3vectors.delete_index(vectorBucketName=S3_VECTOR_BUCKET, indexName=MME_INDEX)
s3vectors.delete_index(vectorBucketName=S3_VECTOR_BUCKET, indexName=TEXT_ONLY_INDEX)

# 删除向量存储桶
s3vectors.delete_vector_bucket(vectorBucketName=S3_VECTOR_BUCKET)

Python

Amazon Bedrock 嵌入推理按请求计费,无需管理持久基础设施。

结论

多模态嵌入填补了仅文本系统无法解决的检索空白,特别是对于包含大量视觉内容的文档集合。在这篇博客中使用的航空航天制造数据集上,多模态管道在 K=5 时达到 90% 的召回率(K=10 时为 96%),并且生成质量接近完美(4.88/5),而仅文本管道由于 OCR 无法可靠地捕获工程图、热图和工艺流程图中的信息,仅得 2.00/5。

借助 Amazon Bedrock 上的 Amazon Nova 多模态嵌入,您可以构建此功能而不必管理嵌入模型基础设施。Amazon S3 向量提供了一个无需集群管理和容量规划的向量存储和查询层。

要亲自尝试,请从 GitHub 克隆配套代码示例,并在 Amazon SageMaker AI 或本地环境中运行。通过替换示例数据集和查询,您可以将管道适配到自己的制造文档。有关更多模式和示例,请参阅以下资源:

关于作者们

AI 可能会生成不准确的信息,请核实重要内容