DocAI: PDFs/Documentos Escaneados para Dados Estruturados

Enunciado do Problema

A ” razão ” para esta solução de AI é muito importante e prevalente em vários campos.

Imagine que você tem vários documentos PDFscanados:

  • Onde os clientes fazem algumas seleções manuals, adicionam assinatura/datas/informações do cliente
  • Você tem várias páginas de documentação escrita que foram scanadas e procura uma solução que obtenha texto destes documentos

OU

  • Você está simplesmente procurando uma via com apoio de AI que forneça um mecanismo interativo para consultar documentos que não possuem um formato estruturado

lidar com documentos scanados/mistas/não estruturados pode ser complicado, e a extração de informações cruciales deles pode ser manual, portanto, suscetível a erros e custoso.

A solução abaixo explora o poder de OCR (Reconhecimento Óptico de Caracteres) e LLM (Modelos de Linguagem de Grande Escala) para obter texto de documentos destes e consultá-los para obter informações confiáveis estruturadas.

Arquitetura de Alta Nível

Interface do Usuário

  • A interface do usuário permite o upload de documentos PDF/scaneados (pode ser expandida para outros tipos de documentos também).
  • Streamlit está sendo utilizado para a interface do usuário:
    • É um Framework Python de código aberto e é extremamente fácil de usar.
    • À medida que as alterações são feitas, elas se refletem nos aplicativos em execução, tornando isso um mecanismo de teste rápido.
    • O suporte da comunidade para o Streamlit é bastante forte e está crescendo.
  • Cadeia de conversa:
    • Isso é essencialmente necessário para incorporar chatbots que podem responder a perguntas de acompanhamento e fornecer histórico de chat.
    • Utilizamos LangChain para interagir com o modelo de IA que usamos; para os propósitos deste projeto, testamos com OpenAI e Mistral AI.

Serviço de Backend

Fluxo de Eventos

  1. O usuário envia um PDF/documento digitalizado, que é então carregado em um bucket S3.
  2. Um serviço OCR então recupera este arquivo do bucket S3 e processa-o para extrair texto deste documento.
  3. Textos em blocos são criados a partir da saída acima, e embeddings vetoriais são criados para eles.
    • Agora isso é muito importante, pois você não quer perder o contexto quando os blocos são divididos: eles podem ser divididos meio frase, sem algumas pausas o significado poderia ser perdido, etc.
    • Então, para contrarrestar, criamos blocos superpostos.
  4. O grande modelo de linguagem que usamos recebe esses embeddings como entrada e temos duas funcionalidades:
    1. Gerar saída específica:
      • Se tivermos um tipo específico de informação que precisa ser extraído dos documentos, podemos fornecer uma consulta no código ao modelo de IA, obter os dados e armazená-los em um formato estruturado.
      • Avoid AI hallucinations adicionando explicitamente consultas no código com condições para não inventar determinados valores e usar apenas o contexto do documento.
      • Podemos armazená-lo como um arquivo no S3/localmente OU escrever em um banco de dados.
    2. Chat
      • Aqui fornecemos o caminho para o usuário final iniciar um chat com a IA para obter informações específicas no contexto do documento.

Tarefa de OCR

  • Nós estamos usando Amazon Textract para reconhecimento óptico nestes documentos.
  • Funciona excelentemente com documentos que também têm tabelas/formulários, etc.
  • Se estiver trabalhando em um POC, aproveite a camada gratuita para este serviço.

Vetores de Embeddings

  • Uma maneira muito fácil de entender os embeddings vetoriais é traduzir palavras ou frases em números que capturam o significado e as relações desse contexto
  • Imagine que você tem a palavra “anel”, que é um ornamento: em relação à própria palavra, uma de suas melhores correspondências é “sing”. Mas em relação ao significado da palavra, nós queremos que seja correspondida a algo como “jóias”, “dedo”, “pedras preciosas”, ou talvez algo como “hóptero”, “círculo”, etc.
    • Portanto, quando criamos o embeddings vetoriais de “anel”, basicamente estamos preenchendo com montes de informações sobre o seu significado e relações.
    • Essa informação, juntamente com os embeddings vetoriais de outras palavras/frases em um documento, garante que o significado correto da palavra “anel” no contexto é escolhido.
  • Nós usamos OpenAIEmbeddings para criar Embeddings Vetoriais.

LLM

  • Existem muitos grandes modelos de linguagem que podem ser usados para nosso cenário.
  • No âmbito deste projeto, testes foram realizados com OpenAI e Mistral AI.
  • Leia mais aqui sobre as Chaves de API para OpenAI.
  • Para MistralAI, HuggingFace foi aproveitado.

Casos de Uso e Testes

Realizamos os seguintes testes:

  • Assinaturas e datas/textos escritos à mão foram lidas usando OCR.
  • Opções selecionadas à mão no documento
  • Seleções digitais feitas em cima do documento
  • Dados não estruturados processados para obter conteúdo tabelado (adicionar a arquivo de texto/BD, etc.)

Scope futuro

Podemos expandir ainda mais os casos de uso para o projeto acima para incorporar imagens, integrar com repositórios de documentação como Confluence/Drive, etc., para puxar informações relativas a um tópico específico de várias fontes, adicionar uma avenida mais forte para fazer análise comparativa entre dois documentos, etc.

Source:
https://dzone.com/articles/docai-pdfs-scanned-docs-to-structured-data