0Pricing
AI Engineering Academy · Lección

Por qué la división ingenua perjudica la recuperación

Analice fallos reales de recuperación causados por una división deficiente, incluidas respuestas separadas entre los límites de los fragmentos y la pérdida de contexto de encabezados y títulos de secciones.

Por qué la división ingenua perjudica la recuperación es una lección gratuita de AI Engineering Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Engineering Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Engineering Academy incluye 4 lecciones en total.

El coste de dividir mal los documentos

La división en fragmentos es el proceso de separar los documentos en piezas más pequeñas antes de incorporarlas a un almacén vectorial. La forma en que divide el texto determina qué contexto estará disponible durante la recuperación. Una división deficiente es una de las causas más comunes y de mayor impacto de los fallos en los sistemas RAG.

Respuestas divididas entre límites

Imagine un documento que dice: 'La política de reembolsos es de 30 días desde la compra. Los clientes deben incluir el recibo original.' Si un divisor de tamaño fijo corta después de 'compra.', estas dos frases quedan en fragmentos distintos. Una consulta sobre la política de reembolsos podría recuperar solo la primera mitad, lo que impediría al modelo mencionar el requisito del recibo.

Pérdida de contexto de los encabezados

Los documentos suelen utilizar encabezados de sección para aportar significado. Considere una tabla titulada 'Precios de los planes Enterprise' seguida de filas de números. Si el encabezado y la tabla quedan en fragmentos distintos, el fragmento recuperado de la tabla contiene números sin etiqueta; el modelo no puede responder correctamente a '¿Cuál es el precio de Enterprise?'.

Problemas de la división en fragmentos de tamaño fijo

La división en fragmentos de tamaño fijo separa el texto cada N caracteres o tokens, independientemente de los límites de las frases. Es rápida y sencilla, pero suele cortar las frases por la mitad. Un fragmento que termina con 'The model was trained on' y el fragmento siguiente, que comienza con 'a dataset of 500 billion tokens', carecen de sentido por separado.

from langchain.text_splitter import CharacterTextSplitter

# Naive fixed-size: may break mid-sentence
splitter = CharacterTextSplitter(chunk_size=200, chunk_overlap=0)
chunks = splitter.split_text(document_text)
print(f'Created {len(chunks)} chunks')
print('First chunk:', chunks[0])

La superposición no siempre ayuda

Una solución habitual consiste en añadir superposición entre fragmentos: repetir los últimos N tokens de un fragmento al principio del siguiente. Esto ayuda con las frases divididas, pero introduce redundancia y puede confundir a los recuperadores cuando se recuperan dos fragmentos muy similares. La superposición es un parche, no una solución para los problemas estructurales de división.

# Overlap helps partially but adds redundancy
splitter = CharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50  # last 50 chars repeated in next chunk
)
chunks = splitter.split_text(document_text)

Medición de la tasa de fallos de recuperación

Puede medir con qué frecuencia la división perjudica la recuperación creando un pequeño conjunto de evaluación de referencia: una lista de preguntas con pasajes de origen correctos conocidos. Después, compruebe con qué frecuencia el pasaje correcto aparece entre los fragmentos recuperados en el top-k. Una tasa de aciertos baja suele revelar problemas de división antes incluso de analizar la calidad de la generación.

def hit_rate(queries_and_answers, retriever, k=5):
    hits = 0
    for query, expected_text in queries_and_answers:
        results = retriever.retrieve(query, k=k)
        retrieved_texts = [r.page_content for r in results]
        if any(expected_text in text for text in retrieved_texts):
            hits += 1
    return hits / len(queries_and_answers)

Problemas con el código y los datos estructurados

Los archivos de código, JSON y las tablas tienen unidades lógicas —funciones, objetos y filas de tabla— que no deberían dividirse. Separar la definición de una función de Python entre dos fragmentos hace que ninguno sea comprensible por sí solo. Un recuperador que encuentre el segundo fragmento verá código sin argumentos y sin contexto.

# Bad: splits code arbitrarily
bad_chunk_1 = 'def calculate_price(item, qty'  # incomplete!
bad_chunk_2 = ', discount):\n    return item.price * qty * (1 - discount)'

# Good: keep the full function together
good_chunk = 'def calculate_price(item, qty, discount):\n    return item.price * qty * (1 - discount)'

Documentos largos y pérdida del contenido central

La investigación sobre los LLM muestra el fenómeno de 'pérdida en el centro': cuando se recuperan muchos fragmentos y se incluyen en un prompt, el modelo presta atención al contenido cercano al principio y al final, pero tiende a ignorar el del centro. Una división deficiente que produce muchos fragmentos pequeños y de baja calidad empeora el problema al diluir la señal relevante.

Diagnóstico manual de fragmentos defectuosos

Un diagnóstico rápido consiste en imprimir una muestra aleatoria de los fragmentos y leerla. Pregúntese: ¿Tiene sentido este fragmento de forma aislada? Si un usuario hiciera una pregunta, ¿podría el modelo responderla basándose únicamente en este fragmento? Los fragmentos que contienen pronombres sin referente ('Él dijo que...'), código incompleto o números sin contexto son señales de alerta.

import random

def audit_chunks(chunks, sample_size=10):
    sample = random.sample(chunks, min(sample_size, len(chunks)))
    for i, chunk in enumerate(sample):
        print(f'--- Chunk {i+1} ({len(chunk)} chars) ---')
        print(chunk[:300])
        print()

Cuando el tamaño del fragmento es demasiado grande

Los fragmentos muy grandes perjudican la precisión de la recuperación. Un fragmento de 2000 tokens sobre un tema amplio puede coincidir con muchas consultas, pero aportar demasiado ruido al LLM. El modelo tiene que encontrar la aguja en el pajar dentro de ese fragmento. Los fragmentos más pequeños y centrados mejoran la precisión, aunque pueden perder parte del contexto circundante.

Estrategias que solucionan estos problemas

Entre las mejores alternativas a la división ingenua en fragmentos de tamaño fijo se incluyen: la división en límites de frase, que nunca corta una frase por la mitad; la división semántica, que separa el texto en los límites entre temas; la división padre-hijo, que conserva un contexto más amplio; y la división consciente de la estructura del documento, que respeta las funciones de código, las etiquetas HTML y los encabezados Markdown. En las próximas lecciones se aborda cada una de ellas.

Comprobación rápida

Compruebe su comprensión de los modos de fallo de la división en fragmentos tratados en esta lección.

Resumen de la lección

En esta lección ha aprendido que la división ingenua en fragmentos de tamaño fijo rompe los límites de las frases y las secciones, que la superposición es una solución parcial, pero añade redundancia y que la calidad de los fragmentos determina directamente la tasa de aciertos de la recuperación. A continuación exploraremos la división semántica, que separa el texto en los límites naturales entre temas mediante la similitud de embeddings.

Preguntas frecuentes

¿La lección «Por qué la división ingenua perjudica la recuperación» es gratis?

Sí — el texto completo de «Por qué la división ingenua perjudica la recuperación» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Engineering Academy, actualiza a CoddyKit PRO. El curso de AI Engineering Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Por qué la división ingenua perjudica la recuperación»?

Analice fallos reales de recuperación causados por una división deficiente, incluidas respuestas separadas entre los límites de los fragmentos y la pérdida de contexto de encabezados y títulos de sec… Practicas AI Engineering Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar AI Engineering Academy?

No se requiere experiencia previa. AI Engineering Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Por qué la división ingenua perjudica la recuperación»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de AI Engineering Academy?

Sí. Cada lección de AI Engineering Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Por qué la división ingenua perjudica la recuperación
  2. División semántica con similitud de embeddings
  3. Recuperación padre-hijo y de pequeño a grande
  4. Estrategias específicas para código y HTML
← Volver a AI Engineering Academy