Explorar más el Cookbook de RAG para obtener perspectivas más profundas de las soluciones RAG actuales

Un espacio principal recoloreado que utiliza como base el espacio principal watsonx para atención al cliente.
Visió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 las búsquedas. Cuando se trata de páginas web HTML o PDF, la estrategia que emplee puede afectar significativamente a la eficiencia y precisión de su aplicación de búsqueda. Aquí tiene una guía completa sobre metodologías de fragmentación eficaces para diferentes circunstancias, especialmente en el contexto del uso de Elasticsearch como almacén de vectores. 

 

Segmentación de documentos

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

  • Análisis de HTML: divida las páginas HTML en fragmentos manejables basados en etiquetas HTML (por ejemplo, <p> para párrafos, <div> para secciones).
  • Extracción de contenidos: se centra en la extracción de contenidos significativos como el texto principal, los encabezados y los datos estructurados.
Estrategia de fragmentación
  • Por URL: trate cada URL como un documento independiente. Este método es sencillo y útil para los sitios web en los que cada página es relativamente pequeña y autónoma.
  • Por secciones de página: segmente los documentos por secciones significativas (por ejemplo, artículos, entradas de 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 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 las etiquetas HTML y gestionando los problemas de codificación.
  • Aplique analizadores específicos de cada idioma (por ejemplo, derivación, palabras vacías) para mejorar la precisión de la búsqueda.
Desafíos con el código HTML antiguo

Cuando el rastreo web se realiza con código HTML antiguo, la calidad de los fragmentos extraídos para su indexación en Elasticsearch puede verse considerablemente afectada. A continuación, se presentan algunos retos clave y estrategias para mitigarlos:

Incoherencias estructurales

Etiquetas y atributos no estándar:

  • El código HTML antiguo puede utilizar etiquetas o atributos no estándar que los analizadores sintácticos modernos podrían no gestionar correctamente o no comprender del todo.
  • Esto puede dar lugar a una extracción incompleta o incorrecta de fragmentos de contenido, sobre todo si el rastreador utiliza bibliotecas estándar de análisis sintáctico de HTML.

Elementos anidados y obsoletos:

  • El HTML antiguo suele incluir elementos anidados o etiquetas obsoletas, como <font>, <center> o <strike>, que es posible que los analizadores de HTML modernos no analicen correctamente.
  • Por tanto, si se utiliza esta segmentación, es posible que los fragmentos resulten inconexos o estén mal estructurados.

Calidad y relevancia del contenido

Estilo y formato en línea:

  • El código HTML antiguo puede depender en gran medida de las 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 mientras Elasticsearch analiza e indexa estos fragmentos, lo que podría influir en la relevancia de los resultados.

Estructura inconsistente del documento:

  • La falta de una estructura de documentos estandarizada en las páginas HTML más antiguas puede dar lugar a tamaños de fragmentos y segmentos de contenido inconsistentes.
  • Esta falta de coherencia dificulta el establecimiento de límites claros entre las secciones de contenido relevantes, lo que afecta a la granularidad de los fragmentos y a la pertinencia de las búsquedas.

Desafíos técnicos

Problemas de codificación y caracteres:

  • Las páginas HTML más antiguas pueden presentar problemas de codificación, como conjuntos de caracteres o entidades incorrectas (&nbsp;, &lt;), que deben tratarse adecuadamente durante la extracción de texto.
  • Si no se gestionan correctamente, pueden producirse errores en el texto o una representación incorrecta del contenido en los fragmentos indexados.

Scripts y contenido dinámico:

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

Estrategias de mitigación

Para mitigar el impacto del código HTML obsoleto en la calidad de los fragmentos durante el rastreo de la web para su indexación en Elasticsearch, tenga en cuenta las siguientes estrategias:

  • Utilice bibliotecas de análisis sintáctico robustas: utilice bibliotecas avanzadas de análisis sintáctico de HTML que puedan gestionar diversas versiones de HTML y elementos no estándar.
  • Normalice el texto: preprocese el texto extraído para normalizar el formato y eliminar etiquetas o atributos innecesarios.
  • Limpie el contenido: filtre los elementos irrelevantes u obsoletos durante el proceso de extracción para mejorar la calidad de los fragmentos indexados.
  • Adapte la lógica de extracción: desarrolle una lógica personalizada para gestionar las peculiaridades de las páginas HTML más antiguas y garantizar 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 sintáctico para adaptarlas a los cambios que se produzcan con el tiempo en los estándares web y las prácticas de HTML.

Si aborda estos retos de forma proactiva, podrá mejorar la calidad de los fragmentos de contenido extraídos de páginas HTML antiguas, lo que, a su vez, mejorará la eficacia y la relevancia generales de las aplicaciones de búsqueda basadas en Elasticsearch.

Indexación de archivos PDF

Extracción de contenido de archivos PDF

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

Estrategia de fragmentación

  • Por documento: trate cada archivo PDF como un único documento para la indexación.
  • Por página: también puede dividir los PDF en fragmentos basados en páginas o secciones lógicas si es necesario.
  • En bloques de texto: divida los fragmentos largos en unidades más pequeñas siguiendo las pausas naturales del texto (por ejemplo, en párrafos).

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

  • Hecho: los archivos PDF pueden contener imágenes o documentos escaneados, por lo que es necesario utilizar OCR (reconocimiento óptico de caracteres) para extraer el texto. Watsonx Discovery cuenta con OCR, por lo que esto no debería suponer ningún problema.
  • Solucione los problemas de codificación y formato del texto de los archivos PDF (por ejemplo, la separación silábica y los saltos de línea).

Pipeline de indexación

  • Normalice el texto extraído eliminando los caracteres especiales y ajustando la separación silábica.
  • Aplique analizadores específicos para cada idioma al texto procesado con el fin de mejorar las capacidades de búsqueda.
Consideraciones

Consideraciones generales

  • Rendimiento: equilibre el tamaño de los fragmentos para una indexación eficiente y un mejor rendimiento de 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: tenga en cuenta la carga que supone 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 perfeccione las consultas de búsqueda para asegurarse de que ofrecen resultados relevantes en documentos fragmentados.

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

  • Características del contenido: para mensajes cortos, la fragmentación a nivel de oración puede ser suficiente. Para documentos largos, considere la fragmentación basada en el contenido o incluso explore la fragmentación heterogénea con una combinación de tamaños de fragmentos.
  • Requisitos de la aplicación: si la eficiencia computacional es primordial, la división en fragmentos de tamaño fijo puede ser un buen punto de partida. Si la recuperación basada en el contexto es fundamental, la fragmentación basada en el contenido es una opción más adecuada.

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 la 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 de los requisitos específicos de su aplicación de búsqueda. Al aplicar 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 y autónomas:<span style=" font-family: inherit; "> Es fácil gestionar cada URL como un documento independiente.
  • Casos en los que cada URL corresponde a un documento distinto: Garantiza la claridad y la sencillez en la gestión de documentos.
Beneficios Granularidad mejorada, relevancia mejorada para consultas de búsqueda

 

Casos de uso: 

- Sitios web de contenidos largos: Aumenta la relevancia de las búsquedas segmentando los artículos o posts extensos.

- Sitios con diversos tipos de contenido: Permite una mejor organización y recuperación de contenidos variados.

 

Beneficios Equilibrio entre granularidad 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, mejorando la precisión y el rendimiento de las búsquedas.

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

Beneficios Eficiencia computacional, rendimiento predecible

 

Casos de uso: 

- Aplicaciones con requisitos de alta eficiencia computacional: rendimiento y uso de recursos predecibles.

- Tareas normalizadas de procesamiento de datos: Adecuado para entornos en los que resulta beneficioso disponer de tamaños de trozos uniformes.

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

 

Casos de uso: 

 

- Indexación de mensajes cortos: ideal para buscar y recuperar con precisión textos breves.

- Aplicaciones de análisis de textos: 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 del 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 diferenciada: Mantiene la integridad del contenido basado en páginas.

 

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

 

Casos de uso: 

- Documentos de gran tamaño con saltos de párrafo claros: Facilita la lectura y el procesamiento.

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

Soluciones de 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, permite la fragmentación de documentos desde low-code/no-code hasta implementaciones de soluciones más personalizadas. 

Los métodos enumerados son aspectos habituales que se deben tener en cuenta a la hora de aplicar técnicas de fragmentación en un caso de uso de RAG. La técnica híbrida, disponible con watsonx, proporciona mayor precisión y velocidad. El proceso general divide el documento en frases individuales para garantizar una granularidad significativa. A continuación, las frases se agrupan en fragmentos mediante un LLM. El LLM evalúa si el contexto de la frase encaja en el fragmento; de lo contrario, se inicia uno nuevo. A partir de este fragmento, se extraen metadatos significativos utilizando el LLM, como el título, el ID y el 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 habitual 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 utilizar como marcador para separar fragmentos.

Puntos fuertes:

  • Implementación sencilla

Limitaciones:

  • El algoritmo asume la jerarquía de la información; por lo tanto, es posible que se pasen por alto los marcadores sintácticos

La fragmentación sintáctica puede resultar útil en situaciones en las que la estructura topológica del documento es predecible y está claramente estructurada para su división.

División en fragmentos de tamaño fijo

En la división en fragmentos de tamaño fijo, los datos de entrada se dividen en fragmentos de igual tamaño. Este método suele separar el texto en tamaños predefinidos según el número de tokens. Este método es sencillo de aplicar y comprender, por lo que resulta adecuado para tareas en las que los datos de entrada tienen un tamaño coherente y predecible.

Puntos fuertes:

  • Fácil de implementar y entender
  • Eficiente desde el punto de vista computacional

Limitaciones:

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

Es mejor utilizar la división en fragmentos de tamaño fijo en casos donde los datos de entrada son predecibles y no requieren un contexto exhaustivo.

from langchain.text_splitter import CharacterTextSplitter

# Example text
text = "El ágil zorro marrón salta por encima del perro perezoso."

# 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 en función del contexto y agrupa los componentes significativos mediante técnicas algorítmicas. Esta es importante cuando el significado del contenido es fundamental para elaborar una respuesta, como en el caso de la documentación jurídica.

Puntos fuertes:

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

Limitaciones:

  • Implementación compleja utilizando algoritmos sofisticados
  • Más extensa desde el punto de vista computacional

Ejemplo:

from langchain.text_splitter import RecursiveCharacterTextSplitter

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

# Create a splitter for semantic chunking
splitter = RecursiveCharacterTextSplitter(chunk_size=50, chunk_overlap=10)

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

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

La fragmentación híbrida utiliza información contextual y estructural para combinar las ventajas de la división en fragmentos de tamaño fijo y de la fragmentación semántica. Este método se utiliza mejor en 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 empresarial.

Puntos fuertes:

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

Limitaciones:

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

Ejemplo:

from langchain.text_splitter import CharacterTextSplitter, RecursiveCharacterTextSplitter

# Example text
text = "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)

# Print the fixed-size chunks
print("Fixed-size chunks:")
for chunk in fixed_size_chunks:
 print(chunk)

# Print the semantic chunks
print("\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 de gran tamaño (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 consiste en extraer afirmaciones 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. A continuación, 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 debe crearse uno nuevo.

El agente basado en un LLM utiliza diversos factores para tomar esta decisión, entre ellos la relevancia de la proposición para el fragmento actual, la coherencia general del fragmento y los objetivos e intenciones del modelo. Al utilizar los 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 trozo y cuándo crear un nuevo trozo 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:

  • Exhaustiva desde el punto de vista computacional: generar texto utilizando LLM puede ser costoso 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.

¿Cómo podemos aplicar algunas de estas técnicas para dividir la documentación en fragmentos? Existen muchas bibliotecas de código abierto para ejecutar estos algoritmos y técnicas de fragmentación. Un buen punto de partida es utilizar divisores de texto Langchain. Consulte la siguiente documentación sobre los divisores de texto específicos disponibles. https://python.langchain.com/v0.1/docs/modules/data_connection/document_transformers/

Próximos pasos

Obtenga las últimas tecnologías, arquitecturas de soluciones y publicaciones de arquitectura de IBM.

  1. Ir al IBM Architecture Center
Colaboradores

Haneen Bakbak, Luke Major

Actualizado: 15 de noviembre de 2024