Ahora que ha recopilado los documentos y las consultas de prueba, y ha realizado un análisis de documentos en la fase de preparación, la siguiente fase es la fragmentación. Dividir los documentos en una colección de fragmentos de tamaño correcto y semánticamente relevantes es un factor clave en el éxito de la implementación de generación aumentada de recuperación (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 provocar alucinaciones. Debe optimizar el proceso de pasar información relevante y quitar información irrelevante. Esta optimización se realiza mediante estrategias eficaces de fragmentación y búsqueda para minimizar falsos positivos y falsos negativos, y maximizar los verdaderos positivos y verdaderos negativos.
Pasar fragmentos demasiado pequeños y que no contienen suficiente contexto para abordar la consulta también da lugar a resultados deficientes. Es posible que no se capture el contexto pertinente que existe en varios fragmentos. La técnica consiste en implementar enfoques eficaces de fragmentación para sus tipos de documentos específicos y sus estructuras y contenido. Hay varios enfoques de fragmentación que se deben tener en cuenta, cada uno con sus propias implicaciones de costes 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.
Economía de fragmentación
Al determinar la estrategia general de fragmentación, debe tener en cuenta el presupuesto junto con los requisitos de calidad y rendimiento del corpus de documento. Hay costes de ingeniería para el diseño y la implementación de cada implementación de fragmentación única y los costes 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 y, a continuación, esas descripciones se fragmentan. Un enfoque alternativo con algunos medios es pasarlos tal como están a un modelo multimodal en tiempo de inferencia, pero ese enfoque no afectaría a la economía de fragmentación.
En esta sección se examina la economía de la fragmentación de imágenes y la solución en general.
Economía de la fragmentación de imágenes
Hay un coste por usar un modelo de lenguaje para generar una descripción de una imagen que, a continuación, se fragmenta. Por ejemplo, los servicios basados en la nube, como Azure OpenAI, cobran por transacción básica o por 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 conocer el número y los tamaños de las imágenes de la solución y debe ponderar el valor de fragmentar las descripciones de la imagen con respecto al coste de generar esas descripciones.
Una manera de determinar qué imágenes procesar es usar un servicio como Visión de Azure AI 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 Visión de Azure AI 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 costes. Debe experimentar 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. Debe tener en cuenta los costes de creación, hospedaje y mantenimiento de su propio modelo clasificador.
Otra optimización de costes es el almacenamiento en caché mediante el patrón cache-aside. Puede generar una clave basada en el hash de la imagen. Como primer paso, puede comprobar si tiene un resultado almacenado en caché de una ejecución anterior o un documento procesado previamente. En ese caso, puede usar ese resultado. Este enfoque le evita los costes de llamar a un clasificador o a un modelo de lenguaje. Si no hay ninguna caché, al llamar al clasificador o al modelo de lenguaje, el resultado se almacenaría en caché. Las llamadas futuras para esta imagen usarían la caché.
Un flujo de trabajo sencillo que integre todos estos procesos de optimización de costes sería:
- Comprobar si el procesamiento de imágenes se ha almacenado en caché. Si es así, usar los resultados almacenados en caché.
- Ejecutar el clasificador para determinar si debe procesar la imagen. Almacenar en caché el resultado de la clasificación. Continúe solo si la lógica de clasificación le indica que lo haga.
- Generar la descripción de la imagen. Almacene el resultado en caché.
Economía de la solución completa
A continuación se muestran los factores que se deben tener en cuenta al examinar el coste de la solución general:
- Número de implementaciones de fragmentación únicas: cada implementación única tiene un coste de ingeniería y mantenimiento. Debe tener en cuenta el número de tipos de documento únicos en el corpus y el coste frente a los inconvenientes de calidad de las implementaciones únicas para cada uno.
- Coste por documento de cada implementación: algunos enfoques de fragmentación pueden dar lugar a fragmentos de mejor calidad, pero tienen un coste financiero y temporal más alto para generar esos fragmentos. Por ejemplo, el uso de un modelo precompilado en Documento de inteligencia de Azure AI probablemente tenga un coste 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: el número de documentos iniciales que necesita procesar para iniciar la solución.
- Número de documentos incrementales: el número y la tasa de documentos nuevos que debe procesar para el mantenimiento continuo del sistema.
Carga y fragmentación
Lógicamente, durante la fragmentación, primero debe cargar el documento en memoria en algún formato. A continuación, el código de fragmentación funciona con la representación en memoria del documento. Puede elegir combinar el código de carga con la fragmentación, o puede separar la carga en su propia fase. El enfoque que elija debe basarse en gran medida en las restricciones de la arquitectura y sus preferencias. En esta sección se exploran brevemente ambas opciones y, a continuación, se proporcionan algunas recomendaciones generales.
Separación de la carga y la fragmentación
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 quiera conservar el resultado del código de carga antes de la fragmentación, especialmente al experimentar con varias permutaciones de fragmentación para ahorrar tiempo de procesamiento o costes. Por último, es posible que quiera ejecutar el código de carga y fragmentación en procesos independientes por motivos de arquitectura, como la segmentación de seguridad o de procesos que implican la eliminación de PII.
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. Esto simplifica el código de fragmentación porque no es necesario realizar ningún preprocesamiento. El preprocesamiento puede ser tan sencillo como quitar o anotar partes del documento que determinó que desea omitir en el análisis de documentos, como marcas de agua, encabezados y pies de página o tan complejos como volver a formatear el documento. A continuación se muestran algunos ejemplos de preprocesamiento que puede optar por encapsular 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 LLM para generar una descripción de la imagen y actualizar el documento con esa descripción. Si ha determinado en el análisis de documentos que hay texto circundante que proporciona un contexto valioso a la imagen, páselo, junto con la imagen, al LLM.
- Descargue o copie imágenes en un almacenamiento de archivos como Azure Data Lake para que se procese por separado del texto del documento. Si ha determinado en el análisis de documentos que hay texto circundante que proporciona contexto valioso a la imagen, debe almacenar 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 procesarlos previamente, pero antes de ejecutar la lógica de fragmentación. Otra razón 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.
Ejecución de la carga y fragmentación de código en procesos independientes
Separar el código de carga y fragmentación en procesos independientes ayuda a habilitar la ejecución de 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. Además, este diseño permite escalar de forma independiente el proceso usado 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 LLM 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, debe asegurarse 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
A continuación se muestran algunas recomendaciones que se deben tener en cuenta al determinar si debe combinar o separar la lógica de fragmentación.
- Comience con la combinación de la lógica de carga y fragmentación. Sepárelas cuando la solución lo requiera.
- Evite convertir documentos a un formato intermedio si decide separar los procesos. Este tipo de operaciones pueden tener pérdidas.
Enfoques de fragmentación
En esta sección se proporciona información general sobre algunos enfoques comunes de fragmentación. Esta lista no pretende ser exhaustiva, sino más bien algunos enfoques representativos comunes. 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 formados por oraciones completas. Las ventajas de este enfoque incluyen que es económico implementar, tiene un bajo costo de procesamiento y se puede aplicar a cualquier documento basado en texto escrito en prosa u oraciones completas. Un desafío con este enfoque es que cada fragmento podría no capturar el contexto completo de un pensamiento o significado. A menudo, se deben tomar varias oraciones juntas para capturar el significado semántico.
Herramientas: Tokenizador de oraciones SpaCy, Separación de texto recursivo LangChain, Tokenizador de oraciones NLTK
Esfuerzo de ingeniería: bajo
Coste de procesamiento: bajo
Casos de uso: documentos no estructurados escritos en prosa u oraciones completas, y el corpus de los documentos contiene un número prohibitivo de tipos de documentos diferentes para los que crear estrategias de fragmentación individuales
Ejemplos: contenido generado por el usuario, como comentarios abiertos de encuestas, publicaciones de foros, reseñas, 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 ventaja que tiene este enfoque sobre el análisis basado en oraciones es que es posible obtener fragmentos con significado semántico que abarca varias oraciones.
Debe elegir el tamaño fijo de los fragmentos y la cantidad de superposición. Dado que los resultados difieren para distintos tipos de documento, es mejor usar una herramienta como el visualizador de fragmentos HuggingFace para realizar análisis exploratorios. Las herramientas como esta le permiten visualizar cómo se fragmentan los documentos, dadas sus decisiones. Se recomienda usar tokens de BERT sobre 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: Separación de texto recursivo LangChain, Visualizador de fragmentos Hugging Face
Esfuerzo de ingeniería: bajo
Coste de procesamiento: bajo
Casos de uso: documentos no estructurados escritos en prosa o no, con oraciones completas o incompletas. El corpus de los documentos contiene un número prohibitivo de diferentes tipos de documentos para los que crear estrategias de fragmentación individuales
Ejemplos: contenido generado por el usuario, como comentarios abiertos de encuestas, publicaciones de foros, reseñas, mensajes de correo electrónico, notas o listas personales o de investigación
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 la estructura se conoce 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 algunos tienen bibliotecas o paquetes que ofrecen características de manipulación de cadenas más elegantes.
Herramientas: 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: solicitudes de patentes, documentos de investigación, pólizas de seguros, scripts y guiones
Aumento del modelo de lenguaje
Los modelos de lenguaje se pueden usar para crear fragmentos. Los casos de uso comunes son usar un modelo de lenguaje de gran tamaño, 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 ha determinado en la parte de imágenes de la sección de análisis de documentos que el texto antes o después de la imagen es necesario para responder a algunas preguntas, debe pasar este contexto adicional al modelo de lenguaje. Es importante experimentar para determinar si este contexto adicional mejora o no 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. Incluir la dirección URL de la imagen en cada fragmento garantiza que se devuelvan metadatos para todas las consultas a las que sirva la imagen, especialmente en escenarios en los que el usuario final requiera la capacidad de acceder a la imagen de origen a través de esa dirección URL o desee usar imágenes sin procesar durante el tiempo de inferencia.
Herramientas: Azure OpenAI, OpenAI
Esfuerzo de ingeniería: medio
Coste 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 (OCR) con modelos de aprendizaje profundo para extraer tanto la estructura de documentos como el texto. 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 incluido en los documentos.
Las bibliotecas y servicios de análisis de diseño de documentos exponen un modelo que representa el contenido, tanto estructural como de texto, del documento. Todavía tiene que escribir código que interactúe con el modelo.
Nota:
Documento de inteligencia de Azure AI es un servicio basado en la nube que requiere que cargue el documento en el servicio. Debe asegurarse de que las regulaciones de seguridad y cumplimiento le permiten cargar documentos en servicios como este.
Herramientas: Modelos de análisis de documentos de Documento de inteligencia de Azure AI, Donut, Layout Parser
Esfuerzo de ingeniería: medio
Coste de procesamiento: medio
Casos de uso: documentos semiestructurados
Ejemplos: artículos de noticias, páginas web, currículums
Modelo precompilado
Hay servicios, como Documento de inteligencia de Azure AI, que ofrecen modelos precompilados que puede aprovechar para varios tipos de documento. Algunos modelos se entrenan para tipos de documentos específicos, como el formulario W-2 de impuestos de Estados Unidos, mientras que otros tienen como destino un género más amplio de tipos de documentos, como una factura.
Herramientas: Modelos precompilados de Documento de inteligencia de Azure AI, Procesamiento inteligente de documentos de Power Automate, LayoutLMv3
Esfuerzo de ingeniería: bajo
Coste de procesamiento: medio/alto
Casos de uso: documentos estructurados en los que existe un modelo precompilado
Ejemplos específicos: facturas, recibos, tarjeta de seguro de salud, formulario 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 muy estructurados, lo que dificulta el uso de técnicas de análisis de texto.
Herramientas: Modelos personalizados de Documento de inteligencia de Azure AI, Tesseract
Esfuerzo de ingeniería: alto
Coste de procesamiento: medio/alto
Casos de uso: documentos estructurados en los que no existe un modelo precompilado
Ejemplos: programas de reparación y mantenimiento de automóviles, transcripciones académicas y registros, manuales técnicos, procedimientos operativos, directrices de mantenimiento
Estructura de documento
Los documentos varían en cuanto a su estructura. Algunos documentos, como los formularios gubernamentales, tienen una estructura compleja y conocida, como un documento fiscal de Estados Unidos W-2. 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 fijas ni rápidas, esta sección le proporciona algunas instrucciones que se deben seguir.
Diagrama que muestra los enfoques de fragmentación por estructura de documentos.
Figura 1. El enfoque de fragmentación encaja según la estructura del documento
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. Algunos ejemplos de documentos de formato fijo son el documento fiscal W-2 de Estados Unidos-.
Los documentos de formato fijo pueden ser imágenes escaneadas de documentos originales que se rellenaron a mano o que tienen estructuras de diseño complejas, lo que dificulta su tratamiento con un enfoque básico de análisis sintáctico de textos. Un enfoque común para procesar estructuras complejas de documentos 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 comunes: modelos precompilados, modelos personalizados
Documentos semiestructurados
Los documentos semiestructurados no tienen un formato o esquema fijo, como el formulario W-2, sino que ofrecen coherencia con respecto al formato o esquema. Por ejemplo, todas las facturas no se diseñan igual, pero en general tienen un esquema coherente. Se espera que una factura tenga un invoice number
y algún tipo de nombre y dirección de bill to
y ship to
, 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 se pueden usar para 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 con 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 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 de Markdown
Enfoques comunes: 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 con estructura inferida.
Ilustración 2. Reglamento de la UE que muestra 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, dependiendo del número de documentos diferentes de este tipo con los que esté trabajando. Por ejemplo, si el corpus es toda la normativa de la UE o las leyes estatales de Estados Unidos, 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 comunes: código personalizado, modelos personalizados
Documentos no estructurados
Un buen enfoque para los documentos con poca o ninguna estructura se basa en oraciones o tamaño fijo con superposición.
Ejemplos: contenido generado por el usuario, como comentarios abiertos de encuestas, publicaciones de foros, reseñas, mensajes de correo electrónico y notas personales o de investigación
Enfoques comunes: basado en oraciones o en límites con superposición
Experimentación
Aunque se enumeran las mejores opciones para cada enfoque de fragmentación, 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 de RAG experimentará con varios enfoques de fragmentación, teniendo 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, debe observar las ventajas y desventajas de cada uno de los enfoques que pruebe para asegurarse de que elige el enfoque adecuado para su caso de uso.