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
- O usuário envia um PDF/documento digitalizado, que é então carregado em um bucket S3.
- Um serviço OCR então recupera este arquivo do bucket S3 e processa-o para extrair texto deste documento.
- 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.
- O grande modelo de linguagem que usamos recebe esses embeddings como entrada e temos duas funcionalidades:
- 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.
- 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.
- Gerar saída específica:
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