Compartir a través de


Fase de fragmentación de RAG

Después de recopilar los documentos de prueba y las consultas y realizar un análisis de documentos durante la fase de preparación, la siguiente fase es la segmentación. Dividir documentos en fragmentos de tamaño adecuado, cada uno conteniendo contenido semánticamente relevante, es fundamental para el éxito de la implementación de Generación Retrieval-Augmented (RAG). Pasar documentos completos o fragmentos sobredimensionados es costoso, puede sobrecargar los límites de token del modelo y no produce los mejores resultados. Pasar información a un modelo de lenguaje que sea irrelevante para la consulta puede dar lugar a respuestas inexactas o no relacionadas. Debe optimizar el proceso de pasar información relevante y quitar información irrelevante mediante estrategias eficaces de fragmentación y búsqueda. Este enfoque minimiza los falsos positivos y los falsos negativos, y maximiza los verdaderos positivos y los verdaderos negativos.

Los fragmentos que son demasiado pequeños y que no contienen suficiente contexto para abordar la consulta pueden dar lugar a resultados deficientes. Es posible que no se capture el contexto pertinente que existe en varios fragmentos. La clave es implementar enfoques de fragmentación eficaces para los tipos de documento específicos y sus estructuras y contenido específicos. Hay varios enfoques de fragmentación que se deben tener en cuenta, cada uno con sus propias implicaciones de costos y eficacia, en función del tipo y la estructura del documento al que se aplican.

En este artículo se describen varios enfoques de fragmentación y se examina cómo la estructura de los documentos puede influir en el enfoque de fragmentación que elija.

Este artículo forma parte de una serie. Lea la introducción antes de continuar.

Economía de fragmentación

Al determinar la estrategia general de fragmentación, debe tener en cuenta el presupuesto y los requisitos de calidad y rendimiento de la colección de documentos. Hay costos de ingeniería para el diseño y la implementación de cada implementación de fragmentación única y los costos de procesamiento por documento que difieren en función del enfoque. Si los documentos tienen medios incrustados o vinculados, debe tener en cuenta la economía del procesamiento de esos elementos. Para la fragmentación, este procesamiento suele usar modelos de lenguaje para generar descripciones de los medios. A continuación, esas descripciones se fragmentan. Un enfoque alternativo para algunos medios es pasarlos tal como está a un modelo multi modal en el tiempo de inferencia. Sin embargo, este enfoque no afecta a la economía fragmentada.

En las secciones siguientes se examina la economía de las imágenes fragmentadas y la solución general.

Economía de la fragmentación de imágenes

Hay un costo por usar un modelo de lenguaje para generar una descripción de una imagen que se fragmenta. Por ejemplo, los servicios basados en la nube, como el servicio Azure OpenAI, cobran por transacción o por una base de aprovisionamiento prepago. Las imágenes más grandes conllevan un coste mayor. A través del análisis de documentos, debe determinar qué imágenes son valiosas para fragmentar y qué imágenes debe omitir. A partir de ahí, debe comprender el número y los tamaños de las imágenes de la solución. A continuación, debe ponderar el valor de fragmentar las descripciones de la imagen con respecto al costo para generar esas descripciones.

Una manera de determinar qué imágenes procesar es usar un servicio como Azure AI Vision para clasificar imágenes, etiquetar imágenes o realizar la detección de logotipos. A continuación, puede usar los resultados y los indicadores de confianza para determinar si la imagen agrega un valor contextual significativo y se debe procesar. Las llamadas a Vision podrían ser menos costosas que las llamadas a modelos de lenguaje, por lo que este enfoque podría dar lugar a un ahorro de costos. Experimente para determinar qué niveles de confianza y qué clasificaciones o etiquetas proporcionan los mejores resultados para los datos. Otra opción es crear su propio modelo clasificador. Si adopta este enfoque, asegúrese de tener en cuenta los costos para compilar, hospedar y mantener su propio modelo.

Otra estrategia de optimización de costos consiste en almacenar en caché mediante el patrónCache-Aside. Puede generar una clave basada en el hash de la imagen. Como primer paso, compruebe si tiene un resultado almacenado en caché de una ejecución anterior o un documento procesado previamente. Si lo hace, puede usar ese resultado. Este enfoque elimina los costos de llamar a un clasificador o a un modelo de lenguaje. Si no hay ninguna memoria caché, cuando se llama al clasificador o al modelo de lenguaje, se almacena en caché el resultado. Las llamadas futuras para esta imagen usan la memoria caché.

El siguiente flujo de trabajo simple integra todos estos procesos de optimización de costos:

  1. Compruebe si el procesamiento de imágenes está almacenado en caché. Si es así, usar los resultados almacenados en caché.

  2. Ejecute el clasificador para determinar si debe procesar la imagen. Almacenar en caché el resultado de la clasificación. Si la lógica de clasificación determina que la imagen agrega valor, continúe con el paso siguiente.

  3. Generar la descripción de la imagen. Almacene en caché el resultado.

Economía de la solución completa

Tenga en cuenta los siguientes factores al evaluar el costo de la solución general:

  • Número de implementaciones de fragmentación únicas: Cada implementación única tiene costos de ingeniería y mantenimiento. Asegúrese de tener en cuenta el número de tipos de documento únicos de la colección y el costo frente a las desventajas de calidad de las implementaciones únicas para cada una.

  • Costo por documento de cada implementación: Algunos enfoques de fragmentación pueden dar lugar a mejores fragmentos de calidad, pero tienen un costo financiero y temporal más alto para generar esos fragmentos. Por ejemplo, el uso de un modelo precompilado en Inteligencia de documentos de Azure AI probablemente tenga un costo mayor por documento que una implementación de análisis de texto puro, pero podría dar lugar a mejores fragmentos.

  • Número de documentos iniciales: Número de documentos iniciales que debe procesar para iniciar la solución.

  • Número de documentos incrementales: Número y tasa de nuevos documentos que debe procesar para el mantenimiento continuo del sistema.

Carga y fragmentación

Durante la fragmentación, primero debe cargar el documento en memoria en algún formato. A continuación, el código de fragmentación opera sobre la representación en memoria del documento. Puede combinar el código de carga con fragmentación o separar la carga en su propia fase. El enfoque que elija debe basarse principalmente en restricciones arquitectónicas y sus preferencias. En las secciones siguientes se exploran brevemente ambas opciones y se proporcionan recomendaciones generales.

Carga y fragmentación independientes

Hay varias razones por las que puede optar por separar las fases de carga y fragmentación. Es posible que quiera encapsular la lógica en el código de carga. Es posible que desee conservar el resultado del código de carga antes de la fragmentación, especialmente cuando experimente con varias permutaciones de fragmentación para ahorrar tiempo de procesamiento o costo. Por último, es posible que quiera ejecutar el código de carga y fragmentación en procesos independientes por motivos arquitectónicos, como el aislamiento de procesos o la segmentación por seguridad, que implica la eliminación de datos personales.

Encapsulación de la lógica en el código de carga

Puede optar por encapsular la lógica de preprocesamiento en la fase de carga. Este enfoque simplifica el código de fragmentación porque no requiere ningún preprocesamiento. El preprocesamiento puede ser tan sencillo como quitar o anotar partes del documento que desea omitir en el análisis de documentos, como marcas de agua, encabezados y pies de página, para tareas más complejas, como volver a formatear el documento. Por ejemplo, puede incluir las siguientes tareas de preprocesamiento en la fase de carga:

  • Quite o anote los elementos que desea omitir.

  • Reemplace las referencias de imagen por descripciones de imágenes. Durante esta fase, se usa un modelo de lenguaje grande para generar una descripción para la imagen y actualizar el documento con esa descripción. Si determina en la fase de análisis de documentos que hay texto circundante que proporciona contexto valioso a la imagen, pase ese texto, junto con la imagen, al modelo de lenguaje grande.

  • Descargue o copie imágenes en el almacenamiento de archivos como Azure Data Lake Storage para que se procese por separado del texto del documento. Si determina en el análisis de documentos que hay texto circundante que proporciona un contexto valioso a la imagen, almacene este texto junto con la imagen en el almacenamiento de archivos.

  • Vuelva a dar formato a las tablas para que se procesen más fácilmente.

Conservación del resultado del código de carga

Hay varias razones por las que puede optar por conservar el resultado del código de carga. Una razón es si desea inspeccionar los documentos después de cargarlos y preprocesarlos, pero antes de que se ejecute la lógica de fragmentación. Otro motivo es que es posible que desee ejecutar una lógica de fragmentación diferente en el mismo código preprocesado mientras está en desarrollo o en producción. Conservar el código cargado acelera este proceso.

Ejecutar la carga y fragmentación de código en procesos separados.

Separe el código de carga y fragmentación en procesos independientes para ayudar a ejecutar varias implementaciones de fragmentación en el mismo código preprocesado. Esta separación también permite ejecutar código de carga y fragmentación en diferentes entornos de proceso y en hardware diferente. Puede usar este diseño para escalar de forma independiente el proceso que se usa para cargar y fragmentar.

Combinación de carga y fragmentación

Combinar el código de carga y fragmentación es una implementación más sencilla en la mayoría de los casos. Muchas de las operaciones que puede considerar realizar en el preprocesamiento en una fase de carga independiente se pueden realizar en la fase de fragmentación. Por ejemplo, en lugar de reemplazar las direcciones URL de imagen por una descripción en la fase de carga, la lógica de fragmentación puede realizar llamadas al modelo de lenguaje grande para obtener una descripción de texto y fragmentar la descripción.

Cuando tenga formatos de documento como HTML que tengan etiquetas con referencias a imágenes, asegúrese de que el lector o el analizador que usa el código de fragmentación no quita las etiquetas. El código de fragmentación debe poder identificar las referencias de imagen.

Recomendaciones

Tenga en cuenta las siguientes recomendaciones al determinar si debe combinar o separar la lógica de fragmentación.

  • Empiece por combinar la lógica de carga y fragmentación. Separe los elementos cuando la solución lo requiera.

  • Evite convertir documentos a un formato intermedio si decide separar los procesos. Este tipo de operación puede provocar la pérdida de datos.

Enfoques de fragmentación

En esta sección se proporciona información general sobre los enfoques comunes de fragmentación. Puede usar varios enfoques en la implementación, como combinar el uso de un modelo de lenguaje para obtener una representación de texto de una imagen con muchos de los enfoques enumerados.

Cada enfoque va acompañado de una matriz resumida de toma de decisiones que resalta las herramientas, los costes asociados, etc. El esfuerzo de ingeniería y los costes de procesamiento son subjetivos y se incluyen para la comparación relativa.

Análisis basado en oraciones

Este enfoque sencillo divide los documentos de texto en fragmentos que se componen de oraciones completas. Las ventajas de este enfoque incluyen su bajo costo de implementación, bajo costo de procesamiento y su aplicabilidad a cualquier documento basado en texto escrito en prosa o oraciones completas. Un inconveniente de este enfoque es que cada fragmento podría no capturar el contexto completo de una idea o significado. A menudo, es necesario considerar varias oraciones juntas para capturar el significado semántico.

Tools:spaCy sentence tokenizer, LangChain recursive text splitter, NLTK sentence tokenizer
Esfuerzo de ingeniería: Bajo
Costo de procesamiento: Bajo
Casos de uso: Documentos no estructurados escritos en prosa o oraciones completas, y la colección de documentos contiene un número prohibitivo de diferentes tipos de documentos que requieren estrategias de fragmentación individuales.
Ejemplos: Contenido generado por el usuario, como comentarios abiertos de encuestas, publicaciones de foro, revisiones, mensajes de correo electrónico, una novela o un ensayo

Análisis de tamaño fijo, con superposición

Este enfoque divide un documento en fragmentos en función de un número fijo de caracteres o tokens y permite una superposición de caracteres entre fragmentos. Este enfoque tiene muchas de las mismas ventajas y desventajas que el análisis basado en oraciones. Una de las ventajas de este enfoque sobre el análisis basado en oraciones es la capacidad de obtener fragmentos con significados semánticos que abarcan varias oraciones.

Debe elegir el tamaño fijo de los fragmentos y la cantidad de superposición. Dado que los resultados varían para distintos tipos de documento, es mejor usar una herramienta como el visualizador de fragmentos de Hugging Face para realizar análisis exploratorios. Puede usar herramientas como esta para visualizar cómo se fragmentan los documentos en función de sus decisiones. Debe usar tokens BERT en lugar de recuentos de caracteres al usar el análisis de tamaño fijo. Los tokens de BERT se basan en unidades significativas de lenguaje, por lo que conservan más información semántica que los recuentos de caracteres.

Herramientas:Divisor de texto recursivo de LangChain, Visualizador de fragmentos de Hugging Face
Esfuerzo de ingeniería: Bajo
Costo de procesamiento: Bajo
Casos de uso: Documentos no estructurados escritos en prosa o no prosa con oraciones completas o incompletas. La colección de documentos contiene un número prohibitivo de diferentes tipos de documentos que requieren estrategias de fragmentación individuales
Ejemplos: Contenido generado por el usuario, como comentarios abiertos de encuestas, publicaciones de foro, opiniones, mensajes de correo electrónico, notas personales, notas de investigación, listas

Código personalizado

Este enfoque analiza los documentos mediante código personalizado para crear fragmentos. Este enfoque es más correcto para los documentos basados en texto en los que se conoce la estructura o se puede deducir y se requiere un alto grado de control sobre la creación de fragmentos. Puede usar técnicas de análisis de texto, como expresiones regulares, para crear fragmentos basados en patrones dentro de la estructura del documento. El objetivo es crear fragmentos que tengan un tamaño similar en longitud y fragmentos que tengan contenido distinto. Muchos lenguajes de programación proporcionan compatibilidad con expresiones regulares y algunas tienen bibliotecas o paquetes que proporcionan características de manipulación de cadenas más elegantes.

Tools:Python (re, regex, BeautifulSoup, lxml, html5lib, marko), R (stringr, xml2), Julia (Gumbo.jl)
Esfuerzo de ingeniería: Medio
Coste de procesamiento: bajo
Casos de uso: Documentos semiestructurados en los que se puede deducir la estructura
Ejemplos: Presentación de patentes, documentos de investigación, directivas de seguros, scripts y guiones

Aumento del modelo de lenguaje

Puede usar modelos de lenguaje para crear fragmentos. Por ejemplo, puede usar un modelo de lenguaje grande, como GPT-4, para generar representaciones textuales de imágenes o resúmenes de tablas que se pueden usar como fragmentos. El aumento del modelo de lenguaje se usa con otros enfoques de fragmentación, como el código personalizado.

Si el análisis de documentos determina que el texto antes o después de la imagen ayuda a responder a algunas preguntas de requisitos, pase este contexto adicional al modelo de lenguaje. Es importante experimentar para determinar si este contexto adicional mejora el rendimiento de la solución.

Si la lógica de fragmentación divide la descripción de la imagen en varios fragmentos, asegúrese de incluir la dirección URL de la imagen en cada fragmento. Incluya la dirección URL de la imagen en cada fragmento para asegurarse de que los metadatos se devuelven para todas las consultas a las que sirve la imagen. Este paso es fundamental para escenarios en los que el usuario final necesita acceder a la imagen de origen a través de esa dirección URL o usar imágenes sin procesar durante el tiempo de inferencia.

Herramientas:Azure OpenAI, OpenAI
Esfuerzo de ingeniería: Medio
Costo de procesamiento: Alto
Casos de uso: Imágenes, tablas
Ejemplos: Generar representaciones de texto de tablas e imágenes, resumir transcripciones de reuniones, discursos, entrevistas o podcasts

Análisis de diseño de documentos

Las bibliotecas y servicios de análisis de diseño de documentos combinan funcionalidades de reconocimiento óptico de caracteres con modelos de aprendizaje profundo para extraer tanto la estructura como el texto de los documentos. Los elementos estructurales pueden incluir encabezados, pies de página, títulos, encabezados de sección, tablas y figuras. El objetivo es proporcionar un mejor significado semántico al contenido contenido contenido en los documentos.

Las bibliotecas y servicios de análisis de diseño de documentos exponen un modelo que representa el contenido estructural y textual del documento. Todavía tiene que escribir código que interactúe con el modelo.

Nota:

Document Intelligence es un servicio basado en la nube que requiere que cargue el documento. Debe asegurarse de que las regulaciones de seguridad y cumplimiento le permiten cargar documentos en dichos servicios.

Herramientas:Document Intelligence modelos de análisis de documentos, Donut, Layout Parser
Esfuerzo de ingeniería: Medio
Costo de procesamiento: Medio
Casos de uso: Documentos semiestructurados
Ejemplos: Artículos de noticias, páginas web, currículums

Modelo precompilado

Los servicios como La inteligencia de documentos proporcionan modelos precompilados que puede aprovechar para varios tipos de documentos. Algunos modelos se entrenan para tipos de documentos específicos, como el formulario fiscal W-2 de Estados Unidos, mientras que otros tienen como destino un género más amplio de tipos de documentos, como facturas.

Herramientas:Modelos precompilados de Document Intelligence, procesamiento inteligente de documentos de Power Automate, LayoutLMv3
Esfuerzo de ingeniería: Bajo
Costo de procesamiento: Medio/Alto
Casos de uso: Documentos estructurados en los que existe un modelo precompilado
Ejemplos específicos: Facturas, recibos, tarjetas de seguro médico, formularios W-2

Modelo personalizado

Para documentos muy estructurados en los que no existe ningún modelo precompilado, es posible que tenga que crear un modelo personalizado. Este enfoque puede ser eficaz para imágenes o documentos altamente estructurados, lo que dificulta el uso de técnicas de análisis de texto.

Herramientas:Modelos personalizados de Document Intelligence, Tesseract
Esfuerzo de ingeniería: Alto
Costo de procesamiento: Medio/Alto
Casos de uso: Documentos estructurados en los que no existe un modelo precompilado
Ejemplos: Programaciones de reparación y mantenimiento de automóviles, transcripciones académicas, registros, manuales técnicos, procedimientos operativos, directrices de mantenimiento

Estructura del documento

Los documentos varían en la cantidad de estructura que tienen. Algunos documentos, como los formularios gubernamentales, tienen una estructura compleja y conocida, como una forma fiscal W-2 de Estados Unidos. En el otro extremo del espectro hay documentos no estructurados, como notas de formato libre. El grado de estructura en un tipo de documento es un buen punto de partida para determinar un enfoque de fragmentación eficaz. Aunque no hay reglas específicas, en esta sección se proporcionan algunas directrices que se deben seguir.

Diagrama que muestra los enfoques de fragmentación por estructura de documentos.

Documentos estructurados

Los documentos estructurados, a veces denominados documentos de formato fijo, tienen diseños definidos. Los datos de estos documentos se encuentran en ubicaciones fijas. Por ejemplo, la fecha o el apellido del cliente se encuentran en la misma ubicación en todos los documentos con el mismo formato fijo. Un ejemplo de un documento de formato fijo es el documento fiscal W-2 de EE. UU.

Es posible que los documentos de formato fijo sean imágenes escaneadas de documentos originales rellenados a mano o que tengan estructuras de diseño complejas. Este formato hace que sean difíciles de procesar mediante un enfoque básico de análisis de texto. Un enfoque típico para procesar estructuras de documentos complejas es usar modelos de aprendizaje automático para extraer datos y aplicar significado semántico a esos datos, siempre que sea posible.

Ejemplos: Formulario W-2, tarjeta de seguro
Enfoques típicos: Modelos precompilados, modelos personalizados

Documentos semiestructurados

Los documentos semiestructurados no tienen un formato o esquema fijo, como el formulario W-2, pero proporcionan coherencia con respecto al formato o esquema. Por ejemplo, todas las facturas no se establecen iguales. Sin embargo, generalmente tienen un esquema coherente. Puede esperar que una factura tenga un número de factura y algún tipo de nombre y dirección de facturación y envío, entre otros datos. Es posible que una página web no tenga coherencias de esquema, pero tienen elementos estructurales o de diseño similares, como body, title, H1 y p que pueden agregar significado semántico al texto circundante.

Al igual que los documentos estructurados, los documentos semiestructurados que tienen estructuras de diseño complejas son difíciles de procesar mediante el análisis de texto. Para estos tipos de documentos, los modelos de aprendizaje automático son un buen enfoque. Hay modelos precompilados para determinados dominios que tienen esquemas coherentes, como facturas, contratos o documentos de seguros de salud. Considere la posibilidad de crear modelos personalizados para estructuras complejas en las que no existe ningún modelo precompilado.

Ejemplos: Facturas, recibos, páginas web, archivos markdown
Enfoques típicos: Modelos de análisis de documentos

Estructura inferida

Algunos documentos tienen una estructura, pero no están escritos en marcado. Para estos documentos, la estructura debe inferirse. Un buen ejemplo es el siguiente documento de reglamento de la UE.

Diagrama que muestra un reglamento de la UE como ejemplo de un documento que tiene una estructura inferida.

Dado que puede comprender claramente la estructura del documento y no hay modelos conocidos para él, puede determinar que puede escribir código personalizado. Un formato de documento como este podría no garantizar el esfuerzo de crear un modelo personalizado, según el número de documentos diferentes de este tipo con los que esté trabajando. Por ejemplo, si la colección contiene todas las regulaciones de la UE o las leyes estatales de EE. UU., un modelo personalizado podría ser un buen enfoque. Si está trabajando con un único documento, como el reglamento de la UE en el ejemplo, el código personalizado podría ser más rentable.

Ejemplos: Documentos legales, scripts, especificaciones de fabricación
Enfoques típicos: Código personalizado, modelos personalizados

Documentos no estructurados

Un buen enfoque para los documentos que tienen poco o ninguna estructura son basados en frases o tamaño fijo con enfoques de superposición.

Ejemplos: Contenido generado por el usuario, como comentarios abiertos de encuestas, publicaciones de foro, opiniones, mensajes de correo electrónico, notas personales, notas de investigación
Enfoques típicos: basado en oraciones o basado en límites con superposición

Experimentación

En este artículo se describen los enfoques de fragmentación más adecuados para cada tipo de documento, pero, en la práctica, cualquiera de los enfoques podría ser adecuado para cualquier tipo de documento. Por ejemplo, el análisis basado en oraciones podría ser adecuado para documentos muy estructurados o un modelo personalizado podría ser adecuado para documentos no estructurados. Parte de la optimización de la solución RAG es experimentar con varios enfoques de fragmentación. Tenga en cuenta el número de recursos que tiene, la aptitud técnica de los recursos y el volumen de documentos que tiene que procesar. Para lograr una estrategia de fragmentación óptima, observe las ventajas y desventajas de cada enfoque que pruebe para asegurarse de elegir el enfoque adecuado para su caso de uso.

Paso siguiente