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_number→ Instrução: “The invoice number” - Campo:
total_amount→ Instruçã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 (inferenceType — explicit 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:
- Uma conta AWS
- Acesso ao Amazon Bedrock com o BDA habilitado em uma região suportada
- Uma role do AWS Identity and Access Management (AWS IAM) com permissões para usar o BDA e o Amazon Simple Storage Service (Amazon S3)
- Entre três e dez documentos de exemplo representativos do seu ambiente de produção
- Arquivos JSON de ground truth com os valores esperados para cada documento de exemplo
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:
- Amazon Bedrock Knowledge Bases, o serviço gerenciado de Geração Aumentada por Recuperação (RAG — Retrieval-Augmented Generation), se beneficia de dados extraídos com maior qualidade, gerando embeddings vetoriais melhores para busca semântica.
- Amazon Bedrock Agents — fluxos agênticos que dependem de dados extraídos de documentos (como processamento autônomo de hipotecas) se tornam mais confiáveis com entradas mais precisas, reduzindo a complexidade do tratamento de erros.
- Amazon Bedrock Guardrails — dados extraídos validados por verificações de raciocínio automatizado se beneficiam de entradas mais limpas, melhorando a acurácia da verificação.
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/)
Leave a Reply