Como otimizar a precisão de extração de blueprints no Amazon Bedrock Data Automation

O desafio de extrair dados estruturados de documentos reais

Extrair dados estruturados de documentos não estruturados — como notas fiscais, contratos, formulários tributários e cadastros — é uma meta comum de automação para empresas de todos os portes. O problema é que manter alta precisão nessa extração é difícil na prática: documentos divergem dos modelos esperados, formatos variam entre fornecedores e a qualidade de digitalização nem sempre é ideal.

O Amazon Bedrock Data Automation (BDA) permite classificar, extrair, normalizar e validar dados de documentos por meio de uma única API. Para isso, utiliza blueprints — esquemas customizáveis que definem quais campos extrair e como interpretá-los, gerando saídas adaptadas ao formato de cada tipo de documento. Mesmo assim, otimizar esses blueprints para cobrir toda a variedade de documentos em produção ainda exige ajustes iterativos.

É para resolver exatamente esse gargalo que a AWS lançou o recurso de otimização automática de instruções de blueprints. Com ele, basta fornecer de três a dez documentos de exemplo com os valores esperados, e o BDA refina as instruções de extração automaticamente — em minutos, não semanas — sem necessidade de fine-tuning de modelos.

Por que as instruções iniciais nem sempre são suficientes

Ao criar um pipeline de Processamento Inteligente de Documentos (IDP — Intelligent Document Processing) com o BDA, você define blueprints que especificam os campos a extrair. Cada campo recebe uma instrução em linguagem natural que orienta o modelo. Por exemplo:

  • Campo: invoice_numberInstrução: “The invoice number”
  • Campo: total_amountInstrução: “The total amount due”

Esse nível de instrução funciona bem em casos simples. No mundo real, porém, surgem complicações: rótulos de campo variam entre versões de um mesmo documento, campos parecidos causam confusão (como “subtotal” vs. “total”), layouts diferem entre fornecedores e casos de borda exigem orientações mais específicas.

Um exemplo simplificado de schema de blueprint para pedidos de compra ilustra bem a estrutura. Cada campo possui um tipo (type), um tipo de inferência (inferenceTypeexplicit para valores que aparecem diretamente no documento, inferred para valores que exigem raciocínio) e uma instrução que guia a extração:

{
  "class": "Purchase Order",
  "type": "object",
  "properties": {
    "po_number": {
      "type": "string",
      "inferenceType": "explicit",
      "instruction": "The unique identifier for the purchase order"
    },
    "order_date": {
      "type": "string",
      "inferenceType": "explicit",
      "instruction": "The date when the order was placed"
    },
    "order_total": {
      "type": "number",
      "inferenceType": "explicit",
      "instruction": "The total amount for the order"
    },
    "special_requests": {
      "type": "string",
      "inferenceType": "inferred",
      "instruction": "Any special requests or notes included in the order"
    }
  }
}

O recurso de otimização age exatamente sobre os valores de instruction de cada campo. Os atributos type e inferenceType permanecem inalterados. O schema completo do exemplo de pedido de compra está disponível no repositório no GitHub.

Da iteração manual ao refinamento automatizado

Sem a otimização automática, o caminho tradicional para melhorar a precisão exige testar diferentes formulações de instrução, adicionar contexto e repetir o ciclo de extração até encontrar o melhor resultado. Para organizações que processam documentos de centenas de fornecedores, esse processo pode consumir semanas por tipo de documento.

Com o recurso de otimização de instruções, todo esse ciclo é automatizado em um único fluxo de trabalho. O BDA compara os resultados de extração com os valores corretos fornecidos (o chamado ground truth) e refina as instruções em linguagem natural para cada campo — entregando instruções otimizadas em minutos.

Como funciona o fluxo de otimização

O processo segue quatro etapas principais:

  • Fornecer documentos de exemplo: faça upload de três a dez documentos representativos do seu ambiente de produção, incluindo casos de borda onde a extração já apresentou problemas. Quanto mais diversidade, melhor — isso evita overfitting.
  • Fornecer o ground truth: informe os valores corretos esperados para cada campo em cada documento. O ground truth é o conjunto de dados verificados que serve como referência para medir a qualidade da extração.
  • Executar a otimização: inicie o processo. O BDA compara seus resultados iniciais com o ground truth e refina as instruções de cada campo automaticamente.
  • Revisar os resultados: analise as métricas detalhadas de acurácia junto com as instruções otimizadas. O processo normalmente conclui em minutos.

As métricas apresentadas incluem o F1 Score (medida combinada de precisão e recall) e a taxa de correspondência exata (percentual de campos cujo valor extraído corresponde exatamente ao ground truth).

Uma instrução genérica como “The invoice number” pode se tornar, após a otimização: “The invoice number, typically found in the upper right corner of the document header, formatted as a numeric or alphanumeric code following ‘Invoice #’ or ‘Invoice No.’” — muito mais específica e eficaz para documentos reais.

Exemplo prático: extração de pedidos de compra

Para ilustrar o fluxo, o artigo original da AWS usa o cenário de uma empresa fictícia de fabricação de bicicletas. O blueprint extrai campos como número do pedido, descrições de itens, quantidades, preços unitários e totais. Após o upload de quatro pedidos de compra representativos — de varejistas como Cycle Central e Bike World — com os arquivos de ground truth correspondentes, os resultados após a otimização foram:

  • Correspondência exata por arquivo (melhor caso): de 92% para 100%
  • Correspondência exata agregada: de 90% para 92%

O BDA refinou automaticamente as instruções para lidar com formatações específicas de cada fornecedor, variações nos rótulos de campos e diferenças de layout entre os pedidos. Em operações de alto volume, mesmo alguns pontos percentuais de melhoria na precisão se traduzem diretamente em menos revisão manual e maior velocidade de processamento.

Pré-requisitos para começar

Para usar o recurso, você precisará de:

Um arquivo de ground truth espelha o schema do seu blueprint, com cada campo preenchido com o valor correto esperado. Veja um exemplo simplificado para um pedido de compra:

{
  "po_number": "PO-2026-0224-1265",
  "retailer_name": "Bike World",
  "order_date": "2026-02-24",
  "order_total": 11571.25,
  "order_items": [
    {
      "sku": "AB-MB-076",
      "product_name": "Trail Classic",
      "quantity": 6,
      "unit_price": 1864.37,
      "line_total": 11186.22
    }
  ]
}

Implantando a solução de exemplo

A AWS disponibiliza uma solução de exemplo completa para facilitar o início. Para implantá-la, siga os passos abaixo:

  • Baixe o template do CloudFormation do repositório no GitHub.
  • Abra o console do AWS CloudFormation.
  • Escolha Create stack, depois Upload a template file.
  • Faça upload do template baixado e clique em Next.
  • Em Stack name, insira um nome (por exemplo, blueprint-optimization-sample).
  • Siga os demais prompts, confirme as capacidades do IAM e clique em Create stack.

A stack implanta um blueprint de exemplo, arquivos de documentos, arquivos de ground truth e um notebook do Amazon SageMaker AI. O código completo também está disponível no repositório no GitHub.

Após a implantação, acesse o Amazon SageMaker AI, abra o notebook criado pela stack no JupyterLab, selecione o kernel Python 3 e siga as instruções para criar e otimizar um blueprint com os documentos de exemplo. Quando concluir, execute a célula de limpeza no notebook para esvaziar o bucket S3 antes de excluir a stack do CloudFormation.

Walkthrough da API com Boto3

Os exemplos abaixo mostram as principais chamadas de API para o fluxo de otimização usando o AWS SDK para Python (Boto3). O notebook completo está disponível no repositório no GitHub.

1. Criar um blueprint

import boto3, json

bda_client = boto3.client('bedrock-data-automation')

response = bda_client.create_blueprint(
    blueprintName='acme-bikes-purchase-order',
    type='DOCUMENT',
    blueprintStage='DEVELOPMENT',
    schema=json.dumps(blueprint_schema)
)

blueprint_arn = response['blueprint']['blueprintArn']

2. Iniciar a otimização

response = bda_client.invoke_blueprint_optimization_async(
    blueprint={
        'blueprintArn': blueprint_arn,
        'stage': 'DEVELOPMENT'
    },
    samples=[
        {
            'assetS3Object': {'s3Uri': 's3://my-bucket/samples/PO_001.pdf'},
            'groundTruthS3Object': {'s3Uri': 's3://my-bucket/ground-truth/PO_001.json'}
        },
        # ... additional samples
    ],
    outputConfiguration={
        's3Object': {'s3Uri': 's3://my-bucket/optimization-output/'}
    },
    dataAutomationProfileArn=profile_arn
)

invocation_arn = response['invocationArn']

3. Verificar o status da otimização

import time

while True:
    status = bda_client.get_blueprint_optimization_status(
        invocationArn=invocation_arn
    )['status']
    if status == 'Success':
        break
    elif status in ('ServiceError', 'ClientError'):
        raise RuntimeError(f'Optimization failed: {status}')
    time.sleep(15)

4. Recuperar o blueprint otimizado

bp = bda_client.get_blueprint(
    blueprintArn=blueprint_arn,
    blueprintStage='DEVELOPMENT'
)

optimized_schema = json.loads(bp['blueprint']['schema'])

5. Promover para produção (opcional)

bda_client.copy_blueprint_stage(
    blueprintArn=blueprint_arn,
    sourceStage='DEVELOPMENT',
    targetStage='LIVE'
)

Interpretando as métricas de resultado

A página de resultados da otimização exibe três métricas para cada arquivo de exemplo e de forma agregada:

  • Exact Match Rate (Taxa de Correspondência Exata): percentual de campos onde o valor extraído corresponde ao ground truth caractere por caractere. É a medida mais rigorosa de precisão. No exemplo do artigo, o arquivo Cycle Central passou de 92,4% para 100%.
  • Overall F1 Score: combina precisão (quanto do que foi extraído estava correto) e recall (quanto do conteúdo correto foi encontrado) em um único número. Especialmente útil para campos com valores de comprimento variável, como descrições de itens. No exemplo, o F1 Score também subiu de 92,4% para 100%.
  • Confidence Score (Pontuação de Confiança): indica o grau de certeza do BDA sobre cada valor extraído. Uma pontuação mais alta significa que o modelo encontrou sinais mais claros no documento para aquele campo. No exemplo, a confiança subiu de 57,8% para 60,1% — um ganho menor, esperado quando o layout do documento é ambíguo. Pontuações de confiança mais altas reduzem o volume de campos encaminhados para revisão humana em fluxos com validação humana no loop.

Use a aba de métricas por arquivo para identificar quais documentos ainda apresentam pontuações baixas após a otimização — esses são candidatos a receber exemplos mais direcionados. A aba de métricas agregadas ajuda a avaliar a saúde geral do blueprint antes de salvá-lo.

Integração com outros serviços do Amazon Bedrock

Blueprints otimizados melhoram a qualidade dos dados na camada de extração, o que fortalece fluxos de trabalho construídos sobre o BDA:

Com pontuações de confiança e ancoragem visual (bounding boxes) para campos extraídos, é possível implementar validação humana no loop onde necessário. A otimização melhora tanto os valores extraídos quanto as pontuações de confiança associadas, aumentando a segurança nos fluxos de processamento automatizado.

Boas práticas para melhores resultados

  • Selecione exemplos representativos: escolha documentos que cubram a variedade do seu ambiente de produção, incluindo formatos comuns e casos de borda problemáticos.
  • Verifique a qualidade do ground truth: confira que os valores esperados estão corretos antes de executar a otimização — a qualidade do ground truth impacta diretamente nos resultados.
  • Comece com três a cinco exemplos: é possível obter melhorias significativas com poucos exemplos bem escolhidos. Adicione mais se os resultados iniciais não atingirem as metas de precisão.
  • Inclua casos desafiadores: adicione exemplos onde a extração já falhou anteriormente para ajudar o processo a aprender a lidar com esses casos de borda.
  • Re-otimize quando necessário: execute a otimização novamente se notar degradação de precisão ao longo do tempo — por exemplo, quando novos formatos de documento aparecerem no seu ambiente.

Disponibilidade e preços

A otimização de instruções de blueprints está disponível nas regiões AWS onde o Amazon Bedrock Data Automation é suportado. Para verificar a disponibilidade por região, consulte a documentação do Amazon Bedrock Data Automation. O processo de otimização incorre nos custos padrão de inferência do BDA, calculados com base no número de páginas dos documentos de exemplo. Para detalhes de preços, consulte a página de preços do Amazon Bedrock.

Limpeza dos recursos

Se você implantou a solução de exemplo ou criou recursos durante os testes, siga os passos abaixo para evitar cobranças contínuas:

  • Exclua a stack do CloudFormation pelo console do AWS CloudFormation. Isso remove o notebook do SageMaker AI, o bucket S3 e os recursos associados.
  • Exclua os blueprints criados acessando o Amazon Bedrock Data Automation no console do Amazon Bedrock, selecionando o blueprint e escolhendo Delete.
  • Remova documentos de exemplo e arquivos de ground truth de buckets S3 criados fora da stack.

Para mais informações sobre gerenciamento de recursos do Amazon Bedrock Data Automation, consulte a documentação oficial.

Conclusão

A otimização automática de instruções de blueprints é um recurso que pode reduzir significativamente o esforço manual necessário para atingir alta precisão de extração. Ao fornecer alguns documentos de exemplo com ground truth, é possível refinar automaticamente as instruções de extração e melhorar a acurácia em minutos — não em semanas.

Combinado com pontuações de confiança, ancoragem visual e integração com Amazon Bedrock Agents e Amazon Bedrock Knowledge Bases, esse recurso pode acelerar o caminho do protótipo para pipelines de IDP em produção.

Para dar os próximos passos, a AWS recomenda:

  • Testar o recurso implantando a solução de exemplo na sua conta e executando o notebook do SageMaker AI.
  • Executar a otimização nos seus próprios documentos para medir as melhorias de precisão no seu caso de uso específico.
  • Explorar como blueprints otimizados se integram com o Amazon Bedrock Knowledge Bases para busca e recuperação de documentos, ou com o Amazon Bedrock Agents para fluxos de tomada de decisão automatizada.

Recursos úteis: documentação do Amazon Bedrock Data Automation, console do Amazon Bedrock, template CloudFormation da solução de exemplo e preços do Amazon Bedrock.

Fonte

Optimize blueprint extraction accuracy in Amazon Bedrock Data Automation (https://aws.amazon.com/blogs/machine-learning/optimize-blueprint-extraction-accuracy-in-amazon-bedrock-data-automation/)

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *