DocAI: PDFs/Scanned Docs to Structured Data

Enunciado do Problema

A “razão” desta solução AI é muito importante e prevalente em vários campos.

Imagine que você tem vários documentos PDFscanados:

  • Onde os clientes fazem algumas seleções manuais, adicionam assinatura/data/informação 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 alternativa com suporte de IA que forneça um mecanismo interativo para consultar documentos que não possuem um formato estruturado

Lidar com documentos scanados/misturados/não estruturados pode ser complicado, e extrair informações cruciales deles pode ser manual, portanto, propenso a erros e custoso.

A solução abaixo explora o poder de OCR (Reconhecimento Óptico de Caracteres) e LLM (Modelos de Linguagem Grande) para obter texto de documentos destes e consultá-los para obter informação estruturada de confiança.

Arquitetura de Alta Camada

Interface de Usuário

  • A interface de usuário permite o upload de documentos PDF/scanner (pode ser expandido para outros tipos de documentos também).
  • Streamlit está sendo aproveitado para a interface de usuário:
    • É um framework Python aberto e muito fácil de usar.
    • Ao realizar as mudanças, elas refletem nas aplicações em execução, tornando isso um mecanismo de teste rápido.
    • A comunidade de suporte para Streamlit é razoavelmente forte e está crescendo.
  • Cadeia de conversa:
    • Isso é essencial para incorporar chatbots que podem responder a perguntas subsequentes e fornecer histórico de chat.
    • Nós aproveitamos LangChain para interagir com o modelo de IA que usamos; para o propósito deste projeto, testamos com OpenAI e Mistral AI.

Serviço de Backend

Fluxo de Eventos

  1. O usuário carrega um arquivo PDF/documento digitalizado, que é então carregado para uma camada S3.
  2. Um serviço OCR então recupera este arquivo de camada S3 e processa-o para extrair texto deste documento.
  3. Os pedaços de texto são criados a partir da saída acima e são associados a representações vetoriais embutidas deles.
    • Agora isso é muito importante, pois você não quer perder o contexto quando os pedaços são divididos: eles podem ser divididos no meio de uma frase, sem algumas pausas o significado poderia ser perdido, etc.
    • Então, para contrabalançá-lo, criamos pedaços 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ída de documentos, podemos fornecer uma consulta no código para o 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 certos valores e usar apenas o contexto do documento.
      • Podemos armazená-lo como um arquivo no S3/localmente OU gravar em um banco de dados.
    2. Chat
      • Aqui fornecemos a opção 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.
  • Ele funciona muito bem 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.

Embeddings Vetoriais

  • Uma maneira muito fácil de entender as representações 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 adornamento: em relação à própria palavra, uma de suas correspondências próximas é “sing”. Mas em relação ao significado da palavra, nós gostaríamos que fosse semelhante a coisas como “jóias”, “dedo”, “pedras preciosas”, ou talvez coisas como “hóptero”, “círculo”, etc.
    • Portanto, quando criamos a representação vetorial de “anel”, basicamente estamos preenchendo com montes de informações sobre seu significado e relações.
    • Essa informação, juntamente com as representações vetoriais de outras palavras/frases em um documento, garante que o significado correto da palavra “anel” no contexto é selecionado.
  • Nós usamos OpenAIEmbeddings para criar representações vetoriais.

LLM

  • Existem múltiplos modelos de linguagem grande que podem ser usados para nosso cenário.
  • No âmbito deste projeto, realizou-se testes com OpenAI e Mistral AI.
  • Leia mais aqui sobre as Chaves de API para OpenAI.
  • Para MistralAI, foi aproveitado HuggingFace.

Casos de Uso e Testes

Realizamos os seguintes testes:

  • Leitura de assinaturas e datas/textos escritos à mão usando OCR.
  • Opções selecionadas à mão no documento
  • Seleções digitais feitas acima do documento
  • Parse de dados não estruturados para obter conteúdo tabular (adicionar ao arquivo de texto/BD, etc.)

Scope futuro

Podemos expandir ainda mais os casos de uso para o projeto acima para incorporar imagens, integrar com armazenamentos de documentação como Confluence/Drive, etc., para extrair 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