DocAI: Documentos PDF/Scanned a Datos Estructurados

Estatuto de Problema

El “por qué” de esta solución AI es muy importante y prevalece en varios campos.

Imagina que tienes varios documentos PDF escaneados:

  • Donde los clientes hacen algunas selecciones manuales, agregar firma/fechas/información del cliente
  • Tienes varias páginas de documentación escrita que han sido escaneadas y buscas una solución que obtenga texto de estos documentos

O

  • Buscas simplemente una vía respaldada por AI que proporcione un mecanismo interactivo para consultar documentos que no tienen un formato estructurado

Lidiar con documentos escaneados/mixtos/sin estructurar puede ser complicado, y extraer información crucial de ellos podría ser manual, por lo tanto, propenso a errores y complejo.

La solución de abajo aprovecha el poder de OCR (Reconocimiento Óptico de Caracteres) y LLM (Modelos de Lenguaje Grande) para obtener texto de tales documentos y consultarlos para obtener información estructurada de confianza.

Arquitectura de Alta Nivel

Interfaz de Usuario

  • La interfaz de usuario permite subir documentos PDF/escaneados (se puede expandir aún más a otros tipos de documentos).
  • Streamlit se está aprovechando para la interfaz de usuario:
    • Es un marco de Python de código abierto y extremadamente fácil de usar.
    • Mientras se realizan cambios, reflejan en las aplicaciones en ejecución, haciendo de esto un mecanismo de prueba rápido.
    • El soporte de la comunidad para Streamlit es bastante fuerte y está creciendo.
  • Cadena de conversación:
    • Esto es fundamental para incorporar chatbots que pueden responder a preguntas secundarias y proporcionar historial de chat.
    • Usamos LangChain para la interfaz con el modelo de IA que utilizamos; para este proyecto, hemos probado con OpenAI y Mistral AI.

Servicio de Backend

Flujo de eventos

  1. El usuario sube un documento PDF/escaneado, que a continuación se sube a una cesta S3.
  2. Un servicio OCR luego recupera este archivo de la cesta S3 y lo procesa para extraer texto de este documento.
  3. Se crean trozos de texto a partir de la salida anterior, y se crean vectorias asociadas para ellos.
    • Esto es muy importante porque no quieres que se pierda el contexto cuando se dividen los trozos: podrían dividirse en medio de una oración, sin alguna puntuación el significado podría perderse, etc.
    • Así que para contrarrestarlo, creamos trozos superpuestos.
  4. El gran modelo de lenguaje que utilizamos toma estas incrustaciones como entrada y tenemos dos funcionalidades:
    1. Generar una salida específica:
      • Si tenemos un tipo específico de información que necesita ser extraída de los documentos, podemos proporcionar consultas en código al modelo de IA, obtener datos y almacenarlos en un formato estructurado.
      • Evitamos las alucinaciones de la IA añadiendo explícitamente consultas in-code con condiciones para no inventar ciertos valores y utilizar sólo el contexto del documento.
      • Podemos almacenarlo como un archivo en S3/localmente O escribirlo en una base de datos.
    2. Chat
      • Aquí proporcionamos la vía para que el usuario final inicie un chat con la IA para obtener información específica en el contexto del documento.

Tarea de OCR

  • Estamos utilizando Amazon Textract para la reconocición óptica de estos documentos.
  • Funciona muy bien con documentos que también tienen tablas/formularios, etc.
  • Si estás trabajando en una POC, aprovechar la versión gratuita de este servicio.

Embeddings vectoriales

  • Una manera muy fácil de entender las representaciones vectoriales es traducir palabras o frases en números que capturan el significado y las relaciones de este contexto
  • Imagina que tienes la palabra “anillo”, que es un adorno: en términos de la palabra misma, una de sus coincidencias cercanas es “cantar”. Sin embargo, en términos del significado de la palabra, preferiríamos que se ajustara a algo como “joyería”, “dedo”, “piedras preciosas”, o quizás algo como “cuello”, “círculo”,等等.
    • Así que al crear la representación vectorial de “anillo”, básicamente estamos llenándola de montones de información sobre su significado y relaciones.
    • Esta información, junto con las representaciones vectoriales de otras palabras/frases en un documento, asegura que se elija el significado correcto de la palabra “anillo” en contexto.
  • Usamos OpenAIEmbeddings para crear representaciones vectoriales.

LLM

  • Hay múltiples modelos de lenguaje grande que se pueden usar para nuestro escenario.
  • En el marco de este proyecto, se ha realizado una prueba con OpenAI y Mistral AI.
  • Leer más aquí sobre las API Keys para OpenAI.
  • Para MistralAI, se ha aprovechado de HuggingFace.

Casos de Uso y Pruebas

Realizamos las siguientes pruebas:

  • Se leyeron firmas y fechas/textos escritos a mano utilizando OCR.
  • Opciones seleccionadas a mano en el documento
  • Selecciones digitales realizadas sobre el documento
  • Se procesó datos no estructurados para obtener contenido tabular (agregar a archivo de texto/BD, etc.)

Escala futura

Podemos ampliar aún más los casos de uso para el proyecto mencionado anteriormente para incorporar imágenes, integrar con repositorios de documentación como Confluence/Drive, etc., para extraer información relacionada con un tema específico de varias fuentes, agregar una vía más fuerte para realizar un análisis comparativo entre dos documentos, etc.

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