Os clientes da AWS nos setores de saúde, serviços financeiros, setor público e outros setores armazenam bilhões de documentos como imagens ou PDFs em Serviço de armazenamento simples da Amazon (Amazon S3). No entanto, eles não conseguem obter insights, como usar as informações bloqueadas nos documentos para grandes modelos de linguagem (LLMs) ou pesquisar até extrair o texto, formulários, tabelas e outros dados estruturados. Com o processamento inteligente de documentos (IDP) da AWS usando serviços de IA, como amazontext, você pode aproveitar a tecnologia de aprendizado de máquina (ML) líder do setor para processar dados de PDFs ou imagens de documentos (TIFF, JPEG, PNG) com rapidez e precisão. Depois que o texto for extraído dos documentos, você poderá usá-lo para ajustar um modelo de base, resumir os dados usando um modelo básicoou envie-o para um banco de dados.
Nesta postagem, nos concentramos no processamento de uma grande coleção de documentos em arquivos de texto bruto e no armazenamento deles no Amazon S3. Fornecemos duas soluções diferentes para este caso de uso. O primeiro permite executar um script Python a partir de qualquer servidor ou instância, incluindo um notebook Jupyter; esta é a maneira mais rápida de começar. A segunda abordagem é uma implantação pronta para uso de vários componentes de infra-estrutura usando Kit de desenvolvimento em nuvem da AWS (AWSCDK) construções. A construção do AWS CDK fornece uma estrutura resiliente e flexível para processar seus documentos e construir um pipeline de IDP completo. Através do uso do AWS CDK, você pode estender sua funcionalidade para incluir redação, armazenar a saída no Amazon OpenSearchou adicione um personalizado AWS Lambda funcionar com sua própria lógica de negócios.
Ambas as soluções permitem processar rapidamente muitos milhões de páginas. Antes de executar qualquer uma dessas soluções em escala, recomendamos testar um subconjunto de seus documentos para garantir que os resultados atendam às suas expectativas. Nas seções a seguir, descrevemos primeiro a solução de script, seguida pela solução de construção do AWS CDK.
Solução 1: use um script Python
Esta solução processa documentos para texto bruto por meio do Amazon Textract tão rapidamente quanto o serviço permite, com a expectativa de que, se houver uma falha no script, o processo continuará de onde parou. A solução utiliza três serviços diferentes: Amazon S3, Amazon DynamoDBe Amazon Textract.
O diagrama a seguir ilustra a sequência de eventos no script. Quando o script terminar, um status de conclusão junto com o tempo gasto será retornado ao console do estúdio SageMaker.
Empacotámos esta solução num script .ipynb e script .py. Você pode usar qualquer uma das soluções implantáveis de acordo com seus requisitos.
Pré-requisitos
Para executar este script em um notebook Jupyter, o Gerenciamento de acesso e identidade da AWS (IAM) atribuída ao notebook deve ter permissões que lhe permitam interagir com DynamoDB, Amazon S3 e Amazon Textract. A orientação geral é fornecer permissões de privilégio mínimo para cada um desses serviços ao seu AmazonSageMaker-ExecutionRole
papel. Para saber mais, consulte Comece a usar as políticas gerenciadas pela AWS e avance para permissões com privilégios mínimos.
Como alternativa, você pode executar esse script em outros ambientes, como um Amazon Elastic Compute Nuvem (Amazon EC2) instância ou contêiner que você gerenciaria, desde que Python, Pip3 e o SDK da AWS para Python (Boto3) estão instalados. Novamente, as mesmas políticas IAM precisam ser aplicadas para permitir que o script interaja com os vários serviços gerenciados.
Passo a passo
Para implementar esta solução, primeiro você precisa clonar o repositório GitHub.
Você precisa definir as seguintes variáveis no script antes de executá-lo:
- tabela_de_rastreamento – Este é o nome da tabela DynamoDB que será criada.
- input_bucket – Este é o local de origem no Amazon S3 que contém os documentos que você deseja enviar ao Amazon Textract para detecção de texto. Para esta variável, forneça o nome do bucket, como
mybucket
. - saída_bucket – Serve para armazenar o local onde você deseja que o Amazon Textract grave os resultados. Para esta variável, forneça o nome do bucket, como
myoutputbucket
. - _input_prefix (opcional) – Se quiser selecionar determinados arquivos de uma pasta em seu bucket S3, você pode especificar o nome dessa pasta como o prefixo de entrada. Caso contrário, deixe o padrão vazio para selecionar tudo.
O roteiro é o seguinte:
O seguinte esquema de tabela do DynamoDB é criado quando o script é executado:
Quando o script for executado pela primeira vez, ele verificará se a tabela DynamoDB existe e a criará automaticamente, se necessário. Após a criação da tabela, precisamos preenchê-la com uma lista de referências de objetos de documento do Amazon S3 que queremos processar. O script por design irá enumerar objetos no especificado input_bucket
e preencher automaticamente nossa tabela com seus nomes quando executado. Leva aproximadamente 10 minutos para enumerar mais de 100,000 documentos e preencher esses nomes na tabela do DynamoDB a partir do script. Se você tiver milhões de objetos em um bucket, poderá alternativamente usar o recurso de inventário do Amazon S3 que gera um arquivo CSV de nomes e, em seguida, preencher a tabela do DynamoDB dessa lista com seu próprio script antecipadamente e não usar a função chamada fetchAllObjectsInBucketandStoreName
comentando. Para saber mais, consulte Configurar o inventário do Amazon S3.
Conforme mencionado anteriormente, existe uma versão de notebook e uma versão de script Python. O notebook é a maneira mais direta de começar; simplesmente execute cada célula do início ao fim.
Se você decidir executar o script Python a partir de uma CLI, é recomendável usar um multiplexador de terminal como o tmux. Isso evita que o script pare caso sua sessão SSH termine. Por exemplo: tmux new -d ‘python3 textractFeeder.py’
.
O seguinte é a ponto de entrada do script; a partir daqui você pode comentar métodos desnecessários:
Os seguintes campos são definidos quando o script preenche a tabela do DynamoDB:
- nomeDoobjeto – O nome do documento localizado no Amazon S3 que será enviado ao Amazon Textract
- nome do balde – O bucket onde o objeto do documento está armazenado
Esses dois campos deverão ser preenchidos se você decidir usar um arquivo CSV do relatório de inventário do S3 e ignorar o preenchimento automático que ocorre no script.
Agora que a tabela foi criada e preenchida com as referências do objeto do documento, o script está pronto para começar a chamar o Amazon Textract StartDocumentTextDetection
API. O Amazon Textract, semelhante a outros serviços gerenciados, tem um limite padrão nas APIs chamadas transações por segundo (TPS). Se necessário, você pode solicitar um aumento de cota no console do Amazon Textract. O código foi projetado para usar vários threads simultaneamente ao chamar o Amazon Textract para maximizar a taxa de transferência com o serviço. Você pode alterar isso dentro do código modificando o threadCountforTextractAPICall
variável. Por padrão, isso é definido como 20 threads. O script lerá inicialmente 200 linhas da tabela DynamoDB e as armazenará em uma lista na memória que é agrupada com uma classe para segurança de thread. Cada thread do chamador é então iniciado e executado em sua própria raia. Basicamente, o thread de chamada do Amazon Textract recuperará um item da lista na memória que contém nossa referência de objeto. Ele então chamará o assíncrono start_document_text_detection
API e aguarde o reconhecimento com o ID do trabalho. O ID do trabalho é então atualizado de volta para a linha do DynamoDB desse objeto, e o thread será repetido recuperando o próximo item da lista.
A seguir está o código de orquestração principal escrita:
Os threads do chamador continuarão se repetindo até que não haja mais itens na lista, momento em que os threads serão interrompidos. Quando todos os threads operando em suas raias pararam, as próximas 200 linhas do DynamoDB são recuperadas e um novo conjunto de 20 threads é iniciado, e todo o processo se repete até que cada linha que não contém um ID de trabalho seja recuperada do DynamoDB e Atualizada. Se o script falhar devido a algum problema inesperado, o script poderá ser executado novamente a partir do orchestrate()
método. Isso garante que os threads continuarão processando linhas que contêm IDs de trabalho vazios. Observe que ao executar novamente o orchestrate()
Após a interrupção do script, é possível que alguns documentos sejam enviados novamente ao Amazon Textract. Esse número será igual ou menor que o número de threads que estavam em execução no momento da falha.
Quando não houver mais linhas contendo um ID de trabalho em branco na tabela do DynamoDB, o script será interrompido. Toda a saída JSON do Amazon Textract para todos os objetos será encontrada no output_bucket
por padrão sob o textract_output
pasta. Cada subpasta dentro textract_output
será nomeado com o ID do trabalho que corresponde ao ID do trabalho armazenado na tabela do DynamoDB para esse objeto. Na pasta de ID do trabalho, você encontrará o JSON, que será nomeado numericamente começando em 1 e pode potencialmente abranger arquivos JSON adicionais que seriam rotulados como 2, 3 e assim por diante. A extensão de arquivos JSON é resultado de documentos densos ou com várias páginas, em que a quantidade de conteúdo extraído excede o tamanho JSON padrão do Amazon Textract de 1,000 blocos. Referir-se Bloquear para obter mais informações sobre blocos. Esses arquivos JSON conterão todos os metadados do Amazon Textract, incluindo o texto que foi extraído dos documentos.
Você pode encontrar a versão e o script do notebook de código Python para esta solução em GitHub.
limpar
Quando o script Python for concluído, você poderá economizar custos desligando ou interrompendo o Estúdio Amazon SageMaker caderno ou contêiner que você criou.
Agora vamos à nossa segunda solução para documentos em grande escala.
Solução 2: use uma construção AWS CDK sem servidor
Esta solução usa Funções de etapa da AWS e funções Lambda para orquestrar o pipeline de IDP. Nós usamos o Construções IDP AWS CDK, o que facilita o trabalho em grande escala com o Amazon Textract. Além disso, usamos um Mapa distribuído do Step Functions para iterar todos os arquivos no bucket S3 e iniciar o processamento. A primeira função Lambda determina quantas páginas seus documentos possuem. Isso permite que o pipeline use automaticamente a API síncrona (para documentos de página única) ou assíncrona (para documentos de várias páginas). Ao usar a API assíncrona, uma função Lambda adicional é chamada para todos os arquivos JSON que o Amazon Textract produzirá para todas as suas páginas em um arquivo JSON para facilitar o trabalho dos aplicativos downstream com as informações.
Esta solução também contém duas funções Lambda adicionais. A primeira função analisa o texto do JSON e o salva como um arquivo de texto no Amazon S3. A segunda função analisa o JSON e armazena métricas na carga de trabalho.
O diagrama a seguir ilustra o fluxo de trabalho do Step Functions.
Pré-requisitos
Esta base de código usa o AWS CDK e requer Docker. Você pode implantar isso a partir de um Nuvem AWS9 instância, que já possui o AWS CDK e o Docker configurados.
Passo a passo
Para implementar esta solução, primeiro você precisa clonar o repositório.
Depois de clonar o repositório, instale as dependências:
Em seguida, use o código a seguir para implantar a pilha AWS CDK:
Você deve fornecer o bucket de origem e o prefixo de origem (o local dos arquivos que deseja processar) para esta solução.
Quando a implantação for concluída, navegue até o console do Step Functions, onde você verá a máquina de estado ServerlessIDPArchivePipeline
.
Abra a página de detalhes da máquina de estado e na página Execuções guia, escolha Comece a execução.
Escolha Comece a execução novamente para executar a máquina de estado.
Depois de iniciar a máquina de estado, você poderá monitorar o pipeline observando a execução do mapa. Você verá um Status de processamento do item seção como a captura de tela a seguir. Como você pode ver, isso foi criado para executar e rastrear o que deu certo e o que falhou. Este processo continuará em execução até que todos os documentos tenham sido lidos.
Com esta solução, você poderá processar milhões de arquivos em sua conta AWS sem se preocupar em como determinar corretamente quais arquivos enviar para qual API ou arquivos corrompidos falhando em seu pipeline. Através do console do Step Functions, você poderá assistir e monitorar seus arquivos em tempo real.
limpar
Após a conclusão da execução do pipeline, para limpá-lo, você pode voltar ao projeto e inserir o seguinte comando:
Isso excluirá todos os serviços que foram implantados neste projeto.
Conclusão
Neste post, apresentamos uma solução que facilita a conversão de imagens de documentos e PDFs em arquivos de texto. Este é um pré-requisito fundamental para usar seus documentos para pesquisa e IA generativa. Para saber mais sobre como usar texto para treinar ou ajustar seus modelos básicos, consulte Ajuste o Llama 2 para geração de texto no Amazon SageMaker JumpStart. Para usar com pesquisa, consulte Implemente o índice de pesquisa inteligente de documentos com Amazon Textract e Amazon OpenSearch. Para saber mais sobre os recursos avançados de processamento de documentos oferecidos pelos serviços de IA da AWS, consulte Orientação para processamento inteligente de documentos na AWS.
Sobre os autores
Tim Condello é arquiteto sênior de soluções especializadas em inteligência artificial (IA) e aprendizado de máquina (ML) na Amazon Web Services (AWS). Seu foco é processamento de linguagem natural e visão computacional. Tim gosta de pegar as ideias dos clientes e transformá-las em soluções escalonáveis.
David Girling é um arquiteto sênior de soluções de IA/ML com mais de vinte anos de experiência em projetar, liderar e desenvolver sistemas corporativos. David faz parte de uma equipe especializada que se concentra em ajudar os clientes a aprender, inovar e utilizar esses serviços altamente capazes com seus dados para seus casos de uso.
- Conteúdo com tecnologia de SEO e distribuição de relações públicas. Seja amplificado hoje.
- PlatoData.Network Gerativa Vertical Ai. Capacite-se. Acesse aqui.
- PlatoAiStream. Inteligência Web3. Conhecimento Amplificado. Acesse aqui.
- PlatãoESG. Carbono Tecnologia Limpa, Energia, Ambiente, Solar, Gestão de resíduos. Acesse aqui.
- PlatoHealth. Inteligência em Biotecnologia e Ensaios Clínicos. Acesse aqui.
- Fonte: https://aws.amazon.com/blogs/machine-learning/create-a-document-lake-using-large-scale-text-extraction-from-documents-with-amazon-textract/
- :tem
- :é
- :não
- :onde
- $UP
- 000
- 1
- 10
- 100
- 12
- 20
- 200
- 7
- 710
- 8
- a
- Capaz
- Sobre
- Acesso
- Conta
- exatamente
- adicionar
- Adicional
- Adicionalmente
- avançar
- avançado
- Vantagem
- Depois de
- novamente
- AI
- Serviços de IA
- AI / ML
- Todos os Produtos
- permitir
- permite
- juntamente
- já
- tb
- Amazon
- Amazon EC2
- Amazon Sage Maker
- amazontext
- Amazon Web Services
- Amazon Web Services (AWS)
- quantidade
- an
- análises
- e
- qualquer
- api
- APIs
- aplicações
- aplicado
- abordagem
- aproximadamente
- SOMOS
- artificial
- inteligência artificial
- Inteligência artificial (AI)
- AS
- atribuído
- At
- auto
- automaticamente
- AWS
- em caminho duplo
- base
- Basicamente
- BE
- sido
- antes
- bilhões
- Blocos
- Bootstrap
- ambos
- construir
- construído
- negócio
- by
- chamada
- chamado
- visitante
- chamada
- CAN
- capacidades
- capaz
- casas
- casos
- célula
- certo
- alterar
- verificar
- Escolha
- classe
- limpar
- Na nuvem
- código
- base de código
- coleção
- comentar
- Comentando
- completar
- realização
- componentes
- Computar
- computador
- Visão de Computador
- cônsul
- construir
- não contenho
- Recipiente
- contém
- conteúdo
- continuar
- converter
- corresponde
- custos
- poderia
- Crash
- crio
- criado
- personalizadas
- cliente
- Clientes
- dados,
- banco de dados
- David
- decidir
- Padrão
- dependências
- implantar
- implantado
- desenvolvimento
- descreve
- Design
- projetado
- concepção
- detalhes
- Detecção
- Determinar
- determina
- em desenvolvimento
- Desenvolvimento
- diferente
- distribuído
- Estivador
- documento
- INSTITUCIONAIS
- Não faz
- down
- dois
- cada
- Mais cedo
- ou
- permite
- end-to-end
- termina
- Entrar
- Empreendimento
- entrada
- ambientes
- igual
- eventos
- Cada
- exemplo
- excede
- execução
- existe
- expectativa
- expectativas
- vasta experiência
- estender
- extrato
- Extração
- fracassado
- falta
- Falha
- Característica
- poucos
- Campos
- Envie o
- Arquivos
- financeiro
- serviços financeiros
- Encontre
- acabamento
- Primeiro nome
- primeira vez
- flexível
- Foco
- concentra-se
- seguido
- seguinte
- segue
- Escolha
- formas
- encontrado
- Foundation
- Quadro
- da
- função
- funcionalidade
- funções
- Ganho
- Geral
- gera
- geração
- generativo
- IA generativa
- ter
- Go
- orientações
- acontece
- Ter
- saúde
- ajuda
- SUA PARTICIPAÇÃO FAZ A DIFERENÇA
- altamente
- sua
- Como funciona o dobrador de carta de canal
- Como Negociar
- Contudo
- HTML
- http
- HTTPS
- i
- ID
- idéias
- Identidade
- ids
- if
- ilustra
- imagens
- executar
- in
- incluir
- Incluindo
- Crescimento
- índice
- indústrias
- líder da indústria
- INFORMAÇÕES
- Infraestrutura
- inicialmente
- iniciar
- inovar
- entrada
- insights
- instalar
- instalado
- instância
- Inteligência
- Inteligente
- Processamento inteligente de documentos
- interagir
- para dentro
- inventário
- IT
- Unid
- ESTÁ
- Trabalho
- jpg
- json
- Chave
- lago
- Pista
- língua
- grande
- em grande escala
- principal
- APRENDER
- aprendizagem
- Deixar
- esquerda
- menos
- como
- Lista
- lhama
- localizado
- localização
- trancado
- lógica
- mais
- procurando
- máquina
- aprendizado de máquina
- a Principal
- fazer
- FAZ
- gerencia
- gerenciados
- muitos
- mapa,
- Maximizar
- Conheça
- mencionado
- metadados
- método
- métodos
- Métrica
- milhões
- Minutos
- ML
- modelo
- modelos
- Monitore
- mais
- a maioria
- mover
- múltiplo
- devo
- nome
- Nomeado
- nomes
- natural
- Processamento de linguagem natural
- Navegar
- você merece...
- necessário
- Novo
- Próximo
- não
- nota
- caderno
- agora
- número
- objeto
- objetos
- of
- WOW!
- oferecido
- on
- ONE
- operando
- or
- orquestração
- Outros
- de outra forma
- A Nossa
- Fora
- saída
- Acima de
- próprio
- empacotado
- página
- páginas
- parte
- para
- permissões
- escolher
- oleoduto
- platão
- Inteligência de Dados Platão
- PlatãoData
- ponto
- políticas
- populosa
- Publique
- potencial
- potencialmente
- apresentado
- evitar
- Problema
- processo
- processos
- em processamento
- produzir
- projeto
- devidamente
- fornecer
- fornecido
- fornece
- público
- colocar
- Python
- mais rápido
- rapidamente
- Cru
- Leia
- pronto
- reais
- em tempo real
- recomendar
- Recomenda
- registro
- registros
- referir
- referência
- referências
- repetir
- Denunciar
- repositório
- solicitar
- requeridos
- Requisitos
- exige
- resiliente
- resultar
- Resultados
- Tipo
- LINHA
- Execute
- corrida
- é executado
- seguro
- Segurança
- sábio
- mesmo
- Salvar
- escalável
- Escala
- escrita
- Sdk
- Pesquisar
- Segundo
- Seção
- seções
- setor
- Vejo
- selecionar
- enviar
- senior
- enviei
- Seqüência
- servidor
- Serverless
- serviço
- Serviços
- Sessão
- conjunto
- rede de apoio social
- desligando
- semelhante
- simples
- simplesmente
- Tamanho
- smart
- So
- solução
- Soluções
- alguns
- fonte
- palmo
- abrangendo
- especialista
- especificada
- girou
- pilha
- começo
- começado
- Comece
- Estado
- Status
- Passo
- Dê um basta
- parou
- paragem
- armazenamento
- loja
- armazenadas
- lojas
- armazenar
- franco
- Tanga
- estruturada
- estudo
- bem sucedido
- tal
- certo
- sistemas
- mesa
- Tire
- tomado
- toma
- tomar
- Profissionais
- Tecnologia
- terminal
- ensaio
- texto
- do que
- que
- A
- as informações
- A fonte
- O Estado
- deles
- Eles
- então
- Lá.
- Este
- deles
- isto
- aqueles
- três
- Através da
- Taxa de transferência
- Tim
- tempo
- para
- para
- tps
- pista
- Trem
- Transações
- Passando
- chave na mão
- dois
- incapaz
- para
- Inesperado
- até
- Atualizada
- usar
- caso de uso
- usos
- utilização
- utilizar
- utiliza
- variável
- vário
- versão
- visão
- esperar
- queremos
- foi
- Assistir
- Caminho..
- we
- web
- serviços web
- foram
- O Quê
- quando
- qual
- inteiro
- precisarão
- de
- dentro
- sem
- Atividades:
- de gestão de documentos
- preocupante
- seria
- Envolvido
- escrever
- anos
- Vocês
- investimentos
- zefirnet