Explore más de lo que el RAG Cookbook ofrece para obtener insights más profundos sobre las soluciones RAG actuales

Un espacio principal recoloreado que utiliza como base el espacio principal watsonx para atención al cliente.
Descripción general

En el ámbito del rastreo web y la indexación de documentos, las metodologías de fragmentación eficaces son cruciales para optimizar el rendimiento y la relevancia de la búsqueda. Cuando se trata de páginas web HTML o PDF, la estrategia que emplee puede afectar significativamente la eficiencia y precisión de su aplicación de búsqueda. Presentamos una guía completa sobre metodologías de fragmentación efectivas para diferentes circunstancias, particularmente en el contexto del uso de Elasticsearch como almacén de vectores. 

 

Segmentación de documentos

Las páginas web varían ampliamente en tamaño y estructura. Para un procesamiento eficiente:

  • Análisis HTML: divide las páginas HTML en fragmentos manejables basados en etiquetas HTML (por ejemplo, <p> para párrafos, <div> para secciones).
  • Extracción de contenido: se concentra en extraer contenido significativo como texto principal, encabezados y datos estructurados.
Estrategia de fragmentación
  • Por URL: trate cada URL como un documento separado. Este método es sencillo y útil para sitios web en los que cada página es relativamente pequeña y autónoma.
  • Por secciones de página: segmenta los documentos por secciones significativas (por ejemplo, artículos, entrada en el blog). Este enfoque es beneficioso para contenido de formato largo y sitios con tipos de contenido diversos.
  • Longitud del contenido: evite fragmentos extremadamente grandes; equilibre entre la granularidad para la relevancia de la búsqueda y el rendimiento. Los fragmentos más pequeños pueden mejorar la precisión de la búsqueda, pero pueden aumentar la sobrecarga de procesamiento.
Pipeline de procesamiento
  • Utilice bibliotecas como Beautiful Soup o Scrapy para el web scraping.
  • Normalice el texto eliminando etiquetas HTML y manejando problemas de codificación.
  • Aplique analizadores específicos del idioma (por ejemplo, stemming, palabras vacías) para mejorar la precisión de la búsqueda.
Desafíos con el código HTML antiguo

Cuando el rastreo web implica código HTML antiguo, puede afectar significativamente la calidad de los fragmentos extraídos para la indexación en Elasticsearch. Estos son algunos desafíos clave y estrategias de mitigación:

Inconsistencias estructurales

Etiquetas y atributos no estándar:

  • El código HTML más antiguo puede usar etiquetas o atributos no estándar que los analizadores modernos podrían no manejar correctamente o comprender completamente.
  • Esto puede conducir a una extracción incompleta o incorrecta de fragmentos de contenido, especialmente si el rastreador se basa en bibliotecas de análisis HTML estándar.

Elementos anidados y obsoletos:

  • El HTML antiguo a menudo incluye elementos anidados o etiquetas obsoletas como <font>, <center> o <strike>, que pueden no ser analizados correctamente por los analizadores HTML modernos.
  • Como resultado, la segmentación de contenido basada en estos elementos puede producir partes fragmentadas o estructuradas incorrectamente.

Calidad y relevancia del contenido

Estilo y formato en línea:

  • El HTML antiguo puede depender en gran medida de etiquetas de estilo y formato en línea (<font>, <b>, <i>, etc.), lo que puede saturar el texto extraído y reducir la calidad de los fragmentos indexados.
  • La calidad de la búsqueda puede verse afectada a medida que Elasticsearch analiza e indexa estos fragmentos, lo que podría afectar la relevancia en los resultados de búsqueda.

Estructura de un documento inconsistente:

  • La falta de estructura estandarizada en los documentos en páginas HTML antiguas puede provocar tamaños de fragmentos y segmentos de contenido inconsistentes.
  • Esta inconsistencia hace que sea difícil establecer límites claros entre las secciones de contenido significativo, lo que afecta la granularidad de los fragmentos y la relevancia de la búsqueda.

Desafíos técnicos

Problemas de codificación y caracteres:

  • Las páginas HTML más antiguas pueden tener problemas de codificación, como conjuntos de caracteres o entidades incorrectos (& nbsp;, & lt;), que necesitan un manejo adecuado durante la extracción de texto.
  • No manejarlos correctamente puede dar como resultado texto ilegible o una representación incorrecta del contenido en fragmentos indexados.

Script y contenido dinámico:

  • Es posible que los rastreadores web básicos no procesen de manera efectiva los elementos dinámicos y los scripts incrustados en páginas HTML más antiguas (por ejemplo, JavaScript, Flash).
  • Esto puede conducir a una extracción incompleta del contenido o a la omisión de texto generado dinámicamente, lo que afecta la exhaustividad de los fragmentos indexados.

Estrategias de mitigación

Para mitigar el impacto del código HTML antiguo en la calidad de los fragmentos al rastrear sitios web para la indexación de Elasticsearch, considere las siguientes estrategias:

  • Utilizar bibliotecas de análisis sintáctico robustas: emplee bibliotecas avanzadas de análisis sintáctico HTML que puedan manejar varias versiones HTML y elementos no estándar.
  • Normalizar texto: preprocese texto extraído para normalizar el formato y eliminar etiquetas o atributos innecesarios.
  • Limpiar contenido: filtre los elementos irrelevantes o en desuso durante el proceso de extracción para mejorar la calidad de los fragmentos indexados.
  • Adaptar la lógica de extracción: desarrolle una lógica personalizada para gestionar las peculiaridades específicas de las páginas HTML más antiguas, garantizando una segmentación más precisa en fragmentos de contenido significativos.
  • Actualizaciones periódicas: mantenga la lógica del rastreador y las bibliotecas de análisis para adaptarse a los cambios en los estándares web y las prácticas HTML a lo largo del tiempo.

Al abordar estos desafíos de manera proactiva, puede mejorar la calidad de los fragmentos de contenido extraídos de páginas HTML más antiguas, mejorando así la eficacia y relevancia generales de las aplicaciones de búsqueda basadas en Elasticsearch.

Indexación de archivos PDF

Extracción de contenido PDF

  • Extraiga texto de archivos PDF, teniendo en cuenta elementos como encabezados, párrafos y tablas.
  • Maneje los metadatos (título, autor, fecha) por separado para la indexación.

Estrategia de fragmentación

  • Por documento: trate cada archivo PDF como un único documento para indexar.
  • Por página: o bien divida los archivos PDF en fragmentos basados en páginas o secciones lógicas si es necesario.
  • Bloques de texto: segmente los fragmentos grandes en unidades más pequeñas según las rupturas naturales en el contenido (por ejemplo, párrafos).

Desafíos, hechos y mitos de la extracción de texto

  • Hecho: los PDF pueden contener imágenes o documentos escaneados, por lo que se requiere OCR (Reconocimiento Óptico de Caracteres) para la extracción de texto. watsonx Discovery tiene OCR, por lo que esto no debería ser un desafío.
  • Gestiona los problemas de codificación y formato de texto propios de los archivos PDF (por ejemplo, separación silábica, saltos de línea).

Pipeline de indexación

  • Normaliza el texto extraído eliminando caracteres especiales y gestionando la unión con guion.
  • Aplica analizadores específicos de idioma al texto procesado para mejorar las capacidades de búsqueda.
Consideraciones

Consideraciones generales

  • Rendimiento: equilibre el tamaño de los fragmentos para lograr un rendimiento eficiente de la indexación y las consultas.
  • Relevancia: asegúrese de que los fragmentos capturen segmentos de contenido significativos para obtener resultados de búsqueda precisos.
  • Sobrecarga de indexación: considere la sobrecarga de indexar grandes volúmenes de datos; optimice la configuración de indexación y la asignación de fragmentos en Elasticsearch.
  • Calidad de búsqueda: pruebe y refine las consultas de búsqueda para cerciorarse de que ofrecen resultados relevantes en documentos fragmentados.

Cómo elegir un método de fragmentación

  • Características del contenido: para mensajes cortos, el fragmento a nivel de frase puede ser suficiente. Para documentos largos, considere la fragmentación consciente del contenido o incluso explore la fragmentación heterogénea con una combinación de tamaños de fragmentos.
  • Requisitos de aplicación: si la eficiencia computacional es primordial, el fragmentado de tamaño fijo puede ser un buen punto de partida. Si la recuperación rica en contexto es crucial, la fragmentación consciente del contenido es una mejor opción.

En resumen, la mejor estrategia de fragmentación para usar Elasticsearch con rastreo web o indexación de PDF implica dividir el contenido en unidades manejables (documentos, páginas, secciones) que equilibren la granularidad con la eficiencia en la indexación y consulta. Ajuste la estrategia en función de la naturaleza de la fuente de contenido (por ejemplo, páginas web frente a archivos PDF) y los requisitos específicos de su aplicación de búsqueda. Al implementar estas metodologías, puede mejorar el rendimiento y la precisión de su motor de búsqueda, proporcionando a los usuarios resultados más relevantes y precisos.

Comparación de metodologías de fragmentación

Beneficios Simplicidad, fácil de gestionar

 

Casos de uso:

.
  • <b style=" font-family: inherit; ">Sitios web con páginas pequeñas e independientes:< span style=" font-family: inherit;
  • "> Gestión fácil de cada URL como un documento separado.
  • Situaciones en las que cada URL representa un documento distinto: Garantiza claridad y simplicidad en el manejo de documentos.
Beneficios Granularidad mejorada, mayor relevancia para las consultas de búsqueda

 

Casos de uso: 

- Sitios web con contenido extenso: mejora la relevancia de las búsquedas al segmentar artículos o publicaciones largos.

- Sitios con tipos de contenido diversos: permite una mejor organización y recuperación de contenido variado.

 

Beneficios Equilibrio entre detalle y rendimiento, mayor precisión en la búsqueda

 

Casos de uso: 

- Sitios web con mucho contenido: garantiza que los fragmentos no sean demasiado grandes, lo que mejora la precisión y el rendimiento de la búsqueda.

- Sitios web en los que no es deseable tener fragmentos extremadamente grandes: equilibra la necesidad de una indexación detallada con el rendimiento.

Beneficios Eficiencia computacional, rendimiento previsible

 

Casos de uso: 

- Aplicaciones con altos requisitos de eficiencia computacional: rendimiento previsible y uso de recursos.

- Tareas de procesamiento de datos estandarizadas: adecuadas para entornos en los que resulta beneficioso utilizar fragmentos de tamaño uniforme.

Beneficios Control detallado del contenido, resultados de búsqueda altamente relevantes

 

Casos de uso: 

 

- Indexación de mensajes cortos: ideal para búsquedas y recuperaciones precisas en textos breves.

- Aplicaciones de análisis de texto: permite el análisis detallado y la comprensión de segmentos cortos.

Beneficios Fragmentación según el contexto: mejora la relevancia de la búsqueda

 

Casos de uso: 

- Documentos largos con contenido variado: garantiza que los fragmentos conserven un contexto significativo.

- Análisis detallado de contenido: mejora la calidad de los resultados de búsqueda al mantener el contexto.

Beneficios Segmentación lógica, legibilidad mejorada

 

Casos de uso:

Indexación de PDF: trata cada página como una unidad lógica, lo que mejora la legibilidad y la capacidad de búsqueda.

Documentos en los que cada página es una unidad distinta: mantiene la integridad del contenido basado en páginas.

 

Beneficios Interrupciones naturales en el contenido, mejor manejo del contenido estructurado

 

Casos de uso: 

- Documentos grandes con saltos de párrafo claros: facilita la lectura y el procesamiento.

- Indexación estructurada de documentos: garantiza que las secciones significativas se indexen por separado.

Soluciones IBM

Fragmentación en watsonx

La plataforma IBM watsonx habilita y acelera la implementación de patrones RAG y permite la fragmentación y comprensión de documentos.  watsonx Orchestrate junto con watsonx Discovery permiten la fragmentación de documentos desde implementaciones de código bajo o sin código hasta implementaciones de soluciones más personalizadas. 

Los métodos enumerados son consideraciones comunes de técnicas de fragmentación para implementar en un caso de uso de RAG. La técnica híbrida está disponible en watsonx para proporcionar una mayor precisión y velocidad. El proceso general divide un documento en oraciones individuales, para garantizar una granularidad significativa. Luego, las oraciones se agrupan en fragmentos utilizando un LLM. El LLM evalúa si el contexto de la oración se ajusta al fragmento; de lo contrario, se inicia un nuevo fragmento. Con ese fragmento, se extraen metadatos significativos mediante el LLM; esto incluye título, ID y resumen.

Para obtener más información sobre este método, consulte este blog de IBM: https://developer.ibm.com/articles/awb-enhancing-llm-performance-document-chunking-with-watsonx/

Herramientas de código abierto

Fragmentación sintáctica

La fragmentación sintáctica utiliza un enfoque guiado por la estructura para separar el texto en función del formato del documento. Lo más común y natural es que los encabezados de sección se utilicen como separadores. Sin embargo, con formatos de documentos sin información codificada (es decir, PDF), los tamaños de fuente se pueden usar como marcador para separar fragmentos.

Puntos fuertes:

  • Implementación sencilla

Limitaciones:

  • El algoritmo asume una jerarquía informativa; por lo tanto, es posible que se pierdan marcadores sintácticos.

La fragmentación sintáctica puede ser beneficiosa en circunstancias en las que la estructura topológica del documento es predecible y tiene un formato limpio para la partición.

Fragmentación de tamaño fijo

En la fragmentación de tamaño fijo, los datos de entrada se dividen en fragmentos del mismo tamaño. Este método a menudo separa el texto en tamaños predefinidos en función del número de tokens. Este método es fácil de implementar y comprender, por lo que resulta adecuado para tareas en las que los datos de entrada tienen un tamaño constante y predecible.

Puntos fuertes:

  • Fácil de implementar y comprender
  • Computacionalmente eficiente

Limitaciones:

  • Es rígido y no se adapta al contexto del texto.
  • Puede omitir información contextual importante en el texto

La fragmentación de tamaño fijo se utiliza mejor en los casos en que los datos de entrada son predecibles y no necesitan un contexto completo.

de langchain.text_splitter import CharacterTextSplitter

# Example text
text = "The quick brown fox jumps over the lazy dog."

# Create a splitter for fixed size chunks
splitter = CharacterTextSplitter(chunk_size=10, chunk_overlap=0)

# Split the text
chunks = splitter.split(text)

# Print the chunks
for chunk in chunks:
 print(chunk)

Fragmentación semántica

La fragmentación semántica separa el texto según el contexto y agrupa los componentes significativos utilizando técnicas algorítmicas. La fragmentación semántica es importante cuando el significado del contenido es vital para dar una respuesta, como la documentación legal.

Puntos fuertes:

  • Los datos recuperados tienen mayor precisión y relevancia.
  • Cohesión de la base de conocimientos mantenida en la fragmentación

Limitaciones:

  • Implementación compleja mediante algoritmos sofisticados
  • Computacionalmente más extenso

Ejemplo:

de langchain.text_splitter import RecursiveCharacterTextSplitter

# Example text
text = "Steve Jobs nació en California. Cofundó Apple en 1976."

# Crear un divisor para la fragmentación semántica
splitter = RecursiveCharacterTextSplitter(chunk_size=50, chunk_overlap=10) # Dividir los fragmentos de texto = splitter.split(text)

# Imprime las partes
eel fragmento en fragmentos:
 imprimir (chunk)

El fragmentado híbrido emplea tanto información contextual como estructural para combinar las fuerzas de tamaño fijo y semántica. Este método se utiliza mejor para situaciones en las que hay un gran corpus de datos en todos los casos de uso, con formatos y materiales variados, como una base de conocimientos empresariales.

Puntos fuertes:

  • Precisión y velocidad óptimas con técnicas de fragmentación flexibles basadas en la estructura de la base de conocimientos y el contexto.

Limitaciones:

  • Más mantenimiento y esfuerzo de implementación debido a los exigentes requisitos de recursos

Ejemplo:

de langchain.text_splitter importar CharacterTextSplitter, RecursiveCharacterTextSplitter

# Texto de ejemplo
texto = "Steve Jobs nació en California. Cofundó Apple en 1976."

# Fixed-size splitter Fixed_size_splitter = CharacterTextSplitter(chunk_size=50, chunk_overlap=10) Fixed_size_chunks = Fixed_size_splitter.split(text)

# Semantic splitter semantic_splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=20) semantic_chunks = semantic_splitter.split(text)

# Imprime los fragmentos de tamaño fijo print("Fixed-size chunks:") for chunk in Fixed_size_chunks: print(chunk) #Imprime los fragmentos semánticos
imprime("\nSemantic chunks:") for chunk in semantic_chunks: print(chunk)

Fragmentación agéntica

Esta estrategia de fragmentación implica el uso de modelos de lenguaje grandes (LLM) para determinar la longitud y el contenido adecuados de los fragmentos de texto en función del contexto en el que se utilizarán. La estrategia se inspira en el concepto de proposiciones, que implica extraer declaraciones independientes de un texto en bruto.

Para implementar este enfoque, la estrategia utiliza una plantilla de recuperación proposicional proporcionada por Langchain para extraer proposiciones del texto. Estas proposiciones se envían a un agente basado en LLM, que determina si cada proposición debe incluirse en un fragmento existente o si se debe crear un nuevo fragmento.

El agente basado en LLM utiliza una variedad de factores para tomar esta determinación, incluyendo la relevancia de la proposición para el fragmento actual, la coherencia general del fragmento y los objetivos e intenciones del modelo. Al utilizar LLM de esta manera, la estrategia tiene como objetivo generar fragmentos de texto que no solo sean coherentes y contextualmente apropiados, sino que también estén alineados con los objetivos e intenciones del modelo.

Puntos fuertes:

  • Autonomía: los LLM pueden tomar decisiones sobre qué proposiciones incluir en un fragmento y cuándo crear uno nuevo sin intervención humana, lo que permite una generación de texto más eficiente y escalable.
  • Coherencia: los LLM están diseñados para generar texto coherente y contextualmente apropiado, lo que puede ayudar a garantizar que los fragmentos generados sean significativos y fáciles de entender.

Limitaciones:

  • Computacionalmente exhaustivo: la generación de texto mediante LLM puede ser costosa desde el punto de vista computacional, especialmente para modelos grandes o complejos. Esto puede limitar la escalabilidad y la practicidad del uso de LLM para ciertas aplicaciones.
  • Alucinaciones: esto puede ocurrir cuando el modelo genera texto basado en sus propios sesgos o suposiciones internas, en lugar de en los datos o el contexto reales.

Ahora, ¿cómo implementamos algunas de estas técnicas para fragmentar la documentación? Existen muchas bibliotecas de código abierto para ejecutar estos algoritmos y técnicas de fragmentación. Un buen lugar para comenzar es usar divisores de texto Langchain; consulte la siguiente documentación sobre divisores de texto específicos disponibles. https://python.langchain.com/v0.1/docs/modules/data_connection/document_transformers/

Próximos pasos

Obtenga los últimos patrones tecnológicos, arquitecturas de soluciones y publicaciones de arquitectura de IBM.

  1. Ir al Centro de Arquitectura de IBM
Colaboradores

Haneen Bakbak, Luke Major

Actualizado: 15 de noviembre de 2024