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.
Las páginas web varían mucho en tamaño y estructura. Para un procesamiento eficiente:
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:
Etiquetas y atributos no estándar:
Elementos anidados y obsoletos:
Estilo y formato en línea:
Estructura inconsistente del documento:
Problemas de codificación y caracteres:
Scripts y contenido dinámico:
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:
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.
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.
Casos de uso:
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.
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.
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.
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.
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.
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.
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/
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:
Limitaciones:
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.
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:
Limitaciones:
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)
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:
Limitaciones:
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:
Limitaciones:
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)
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:
Limitaciones:
¿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/
Actualizado: 15 de noviembre de 2024