Al igual que las pólizas de seguro, los registros médicos y los informes de cumplimiento son notoriamente largos y tediosos para analizar.
Los detalles importantes (por ejemplo, los límites de cobertura y las obligaciones en las pólizas de seguro) están enterrados en texto denso y no estructurado que es un desafío para que la persona promedio tamice y digerue.
Los modelos de idiomas grandes (LLM), ya conocidos por su versatilidad, sirven como herramientas poderosas para reducir esta complejidad, sacar los hechos clave y convertir documentos desordenados en información clara y estructurada.
En este artículo, exploramos el de Google Langextract marco y su código abierto LLM, Gemma 3que juntos hacen que la extracción de información estructurada del texto no estructurado sea preciso y eficiente.
Para dar vida a esto, caminaremos por una demostración sobre la analización de una póliza de seguro, mostrando cómo detalles como exclusiones puede aparecer de manera efectiva.
Contenido
(1) Comprender langextract y gemma
(2) Debajo del capó de langextract
(3) Ejemplo de tutorial
El repositorio de GitHub que lo acompaña se puede encontrar aquí.
(1) Comprender Langexact y Gemma
(i) langextract
Langextract es una biblioteca de Python de código abierto (lanzada en GitHub de Google) que utiliza LLM para extraer información estructurada de un texto desordenado desestructurado basado en instrucciones definidas por el usuario.
Permite que los LLM se sobresalgan en Reconocimiento de entidad nombrado (como límites de cobertura, exclusiones y cláusulas) y extracción de relaciones (Vinculando lógicamente cada cláusula a sus condiciones) agrupando eficientemente entidades relacionadas.
Su popularidad proviene de su simplicidad, ya que solo unas pocas líneas de código son suficientes para realizar una extracción de información estructurada. Más allá de su simplicidad, varias características clave hacen Langextract destacar:
- Alineación de fuente exacta: Cada elemento extraído está vinculado a su ubicación precisa en el texto original, asegurando la trazabilidad completa.
- Construido para documentos largos: Maneja el problema de “aguja-in a-haystack” con fragmentos inteligentes, procesamiento paralelo y pases iterativos para maximizar el recuerdo para encontrar entidades adicionales.
- Compatibilidad del modelo amplio: Funciona sin problemas con diferentes LLM, desde modelos basados en la nube como Gemini hasta opciones locales de código abierto.
- Dominio Agnóstico: Se adapta a cualquier dominio con solo un puñado de ejemplos, eliminando la necesidad de un ajuste costoso.
- Salidas estructuradas consistentes: Utiliza ejemplos de pocos disparos y generación controlada (solo para ciertos LLM como Gemini) para hacer cumplir un esquema de salida estable y producir resultados confiables y estructurados.
- Visualización interactiva: Genera un archivo HTML interactivo para visualizar y revisar las entidades extraídas en su contexto original.
(ii) Gemma 3
Gema es una familia de LLMS Open Open Ligero, de vanguardia de Googleconstruido a partir de la misma investigación utilizada para crear los modelos Gemini.
Gemma 3 es el último lanzamiento en la familia Gemma, y está disponible en cinco tamaños de parámetros: 270m, 1b, 4b, 12b y 27b. También se pretende ser el modelo actual, más capaz que se ejecuta en una sola GPU.
Puede manejar entradas rápidas de hasta 128k tokens, lo que nos permite procesar muchos artículos de varias páginas (o cientos de imágenes) en un solo mensaje.
En este artículo, Usaremos el Modelo de Gemma 3 4B (Variante de parámetros de 4 mil millones), desplegado localmente a través de Ollama.
(2) debajo del capó de Langextract
LangExtract viene con muchas características estándar esperadas en los marcos modernos de LLM, como la ingestión de documentos, el preprocesamiento (por ejemplo, la tokenización), la gestión rápida y el manejo de la salida.
Lo que me llamó la atención es el Tres capacidades que admiten extracción de información de contexto largo optimizado:
- Fragmentación inteligente
- Procesamiento paralelo
- Pases de extracción múltiples
Para ver cómo se implementaron, cavé en el código fuente y rastreé cómo funcionan debajo del capó.
(i) estrategias de fragmentación
Langextract usa inteligente estrategias de fragmentación Para mejorar la calidad de la extracción en una sola inferencia, pase un documento grande.
El objetivo es dividir los documentos en trozos más pequeños y enfocados de tamaño de contexto manejable, de modo que el texto relevante se mantenga de una manera bien formada y fácil de entender.
En lugar de cortar sin pensar en los límites de los personajes, respeta oraciones, párrafos y nuevas líneas.
Aquí hay un resumen de los comportamientos clave en la estrategia de fragmentación:
- Oración y párrafo consciente: Los trozos se forman a partir de oraciones completas cuando sea posible (respetando delimitadores de texto como saltos de párrafos), para que el contexto permanezca intacto.
- Maneja oraciones largas: Si una oración es demasiado larga, se rompe en puntos naturales como nuevas líneas. Solo si es necesario, se dividirá dentro de una oración.
- Manejo de estuches de borde: Si una sola palabra o token es más largo que el límite, se convierte en una porción para evitar errores.
- División basada en tokens: Todos los cortes respetan los límites del token, por lo que las palabras nunca se dividen a mitad de camino.
- Preservación del contexto: Cada fragmento lleva metadatos (token y posiciones de caracteres) que lo mapearán al documento de origen.
- Procesamiento eficiente: Los fragmentos se pueden agrupar en lotes y procesarse en paralelo, por lo que las ganancias de calidad no agregan latencia adicional.
Como resultado, LangExtract crea trozos bien formados que empacan en el mayor contexto posible mientras evitan divisiones desordenadas, lo que ayuda a la LLM a mantener la calidad de la extracción en documentos grandes.
(ii) procesamiento paralelo
El soporte de LangExtract para el procesamiento paralelo en la inferencia de LLM (como se ve en Scripts de proveedores de modelos) permite que la calidad de extracción sea alta en documentos largos (es decir, buena cobertura de entidad y asignación de atributos) sin aumentar significativamente la latencia general.
Cuando se le da una lista de trozos de texto, el max_workers Los parámetros controla cuántas tareas pueden ejecutarse en paralelo. Estos trabajadores envían múltiples trozos a la LLM simultáneamente, con hasta max_workers trozos procesados en paralelo.
(iii) Pases de extracción múltiple
El propósito de los pases de extracción iterativa es mejorar el retiro al capturar entidades que podrían perderse en cualquier carrera.
En esencia, adopta un múltiples muestras y fusionar La estrategia, donde la extracción se ejecuta varias veces de forma independiente, dependiendo de la naturaleza estocástica de la LLM a las entidades de superficie que podrían perderse en una carrera.
Posteriormente, los resultados de todos los pases se fusionan. Si dos extracciones cubren la misma región de texto, se mantiene la versión del pase anterior.
Este enfoque aumenta el recuerdo al capturar entidades adicionales a través de carreras, mientras resuelve conflictos por parte de un piloto de primer paso regla. La desventaja es que reprocesa tokens varias veces, que puede aumentar los costos.
(3) Tutorial de ejemplo
Ponamos a la prueba de Langextract y Gemma en un documento de póliza de seguro de motor de muestra, que se encuentran públicamente en el Sitio web de MSIG Singapur.
Mira el acompañante de repositorio de Github seguir
(i) Configuración inicial
LangExtract se puede instalar desde Pypi con:
pip install langextract
Luego descargamos y ejecutamos Gemma 3 (modelo 4B) localmente con Ollama.
Ollama es una herramienta de código abierto que simplifica la ejecución de LLM en nuestra computadora o en un servidor local. Nos permite interactuar con estos modelos sin necesidad de una conexión a Internet o depender de los servicios en la nube.
Para instalar Ollama, visite el Página de descargas y elija el instalador para su sistema operativo. Una vez hecho esto, verifique la instalación ejecutando ollama --version en tu terminal.
Importante: Asegúrese de que su dispositivo local tenga acceso a GPU Para Ollama, ya que esto acelera dramáticamente el rendimiento.
Después de instalar Ollama, obtenemos el servicio en ejecución al abrir la aplicación (macOS o Windows) o ingresar ollama serve para Linux.
Para descargar Gemma 3 (4B) localmente (3.3GB de tamaño), ejecutamos este comando: ollama pull gemma3:4bdespués de lo cual corremos ollama list Para verificar que Gemma se descargue localmente en su sistema.
(ii) análisis y procesamiento de PDF
El primer paso es leer el documento de política PDF y analizar el contenido utilizando Pymupdf (instalado con pip install PyMuPDF).
Creamos un Document clase que almacena un texto y metadatos asociados, y un PDFProcessor Clase para el análisis general del documento.
Aquí hay una explicación del código anterior:
load_documents: Pasa por cada página, extrae bloques de texto y los guarda comoDocumentobjetos. Cada bloque incluye el texto y los metadatos (por ejemplo, número de página, coordenadas con ancho/altura de la página).
Las coordenadas capturan donde aparece el texto en la página, preservando la información de diseño, como si se trata de un encabezado, texto del cuerpo o pie de página.get_all_text: Combina todo el texto extraído en una cadena, con marcadores transparentes que separan las páginas.get_page_text: Obtiene solo el texto de una página específica.
(iii) Ingeniería rápida
El siguiente paso es proporcionar instrucciones para guiar el LLM en el proceso de extracción a través de Langextract.
Comenzamos con un indicador del sistema que especifica la información estructurada que queremos extraer, centrándonos en las cláusulas de exclusión de políticas.
En el mensaje anterior, especifiqué explícitamente una salida JSON como el formato de respuesta esperado. Sin esto, probablemente afectaremos un error de <a href="https://github.com/google/langextract/issues/127" rel="noreferrer noopener" target="_blank">langextract.resolver.ResolverParsingError</a>.
El problema es que Gema hace no Incluya la aplicación de salida estructurada incorporada, por lo que, por defecto, genera texto no estructurado en lenguaje natural. Luego, inadvertidamente, puede incluir texto adicional o JSON malformado, potencialmente rompiendo los estrictos analizadores JSON en Langextract.
Sin embargo, si usamos LLM como Gemini que tienen decodificación con esquema (es decir, configurable para salida estructurada), luego se pueden omitir las líneas de inmediato 11–21.
A continuación, presentamos Pocas de disparo Al proporcionar un ejemplo de qué significan las cláusulas de exclusión en el contexto del seguro.
Langextract’s ExampleData La clase sirve como una plantilla que muestra los ejemplos de LLM trabajados de cómo el texto debe mapear a las salidas estructuradas, informándolo Qué extraer y Cómo formatearlo.
Contiene una lista de Extraction Objetos que representan la salida deseada, donde cada uno es una clase de contenedor que comprende atributos de una sola pieza de información extraída.
(iv) ejecución de extracción
Con nuestro analizador PDF y las indicaciones configuradas, estamos listos para ejecutar la extracción con LangExtract’s extract método:
Aquí hay una explicación de los parámetros anteriores:
- Pasamos nuestro texto de entrada, indicaciones y varios ejemplos de pocos disparos en el
text_or_documents,prompt_descriptionyexamplesparámetros respectivamente - Pasamos la versión del modelo
gemma3:4benmodel_id - El
model_urlestá predeterminado al punto final local de Ollama (http://localhost:11434). Asegúrese de que el servicio Ollama ya se esté ejecutando en su máquina local - Establecimos
fence_outputyuse_schema_constraintaFalseDado que Gemma no está orientado a la salida estructurada, y LangExtract aún no admite restricciones de esquema para Ollama max_char_bufferEstablece el número máximo de caracteres para la inferencia. Los valores más pequeños mejoran la precisión (al reducir el tamaño del contexto) pero aumentar el número de llamadas LLMextraction_passesEstablece el número de pases de extracción para un retiro mejorado en la extracción
En mi GPU de 8GB VRAM, el documento de 10 páginas tomó <10 minutos Para completar el análisis y la extracción.
(v) Guardar y salida posterior al proceso
Finalmente guardamos la salida usando LangExtract’s io módulo:
Postprocesamiento personalizado Luego se aplica para embellecer el resultado para una fácil visualización, y aquí hay un fragmento de la salida:
Podemos ver que las respuestas LLM contienen extracciones estructuradas del texto original, agrupándolas por clase (específicamente exclusiones) y proporcionando tanto la línea de texto fuente como una explicación simple del inglés.
Este formato hace que las cláusulas de seguros complejas sean más fáciles de interpretar, ofreciendo un mapeo claro entre el lenguaje de política formal y los resúmenes simples.
(4) Envolverlo
En este artículo, exploramos cómo las fragmentos de Langextract, el procesamiento paralelo y los pases iterativos, combinados con las capacidades de Gemma 3, permiten una extracción confiable de datos estructurados de largos documentos.
Estas técnicas demuestran cómo la combinación correcta de modelos y estrategias de extracción puede convertir documentos largos y complejos en ideas estructuradas que sean precisas, rastreables y listas para su uso práctico.
Antes de que te vayas
Te invito a seguir mi Github y LinkedIn Páginas para contenido más atractivo y práctico. ¡Mientras tanto, diviértete extrayendo información estructurada con Langexact y Gemma 3!