Limpia los documentos antes de RAG

Limpiar un documento para la generación aumentada por recuperación (RAG) significa eliminar todo lo que no es contenido —los encabezados, pies, números de página y textos repetidos que un PDF lleva en cada página— antes de que el texto restante se divida en fragmentos, se incruste y se almacene en un índice vectorial. Es el paso menos glamuroso de una canalización RAG y el que decide en silencio si la recuperación funciona: un índice construido con texto sin limpiar almacena el mismo mobiliario cientos de veces y lo recupera como si fuera conocimiento. Este artículo explica por qué el mobiliario envenena las incrustaciones, cómo funciona realmente la fragmentación, por qué la deduplicación va antes de incrustar, qué quitar y qué conservar, y cómo evaluar si la limpieza ayudó. Para hacer la limpieza, usa el limpiador de documentos y lee tus propios resultados junto a esta guía.

Por qué el mobiliario de página envenena las incrustaciones

Un modelo de incrustación convierte un fragmento de texto en un vector que debería capturar de qué trata el fragmento. Dale un fragmento que sea mitad título del informe, pie de confidencialidad y número de página, y el vector capturará eso también con fidelidad, lo que significa que cada fragmento de un documento largo deriva hacia el mismo mobiliario, y fragmentos que deberían estar lejos en el espacio vectorial acaban artificialmente cerca porque comparten un encabezado. La recuperación hace entonces exactamente lo que se le pidió: preguntada por la sección sobre la política de reembolsos, devuelve cinco fragmentos cuya señal compartida más fuerte es el nombre de la empresa en el encabezado. Nadie cometió un error de modelado. El índice se llenó de ruido a plena fuerza, repetido en cada página, y el ruido que se repite es indistinguible de la señal para un sistema que cuenta similitudes.

El daño es peor que la dilución. Los fragmentos de mobiliario pueden ganar la recuperación sin más: una pregunta formulada como el pie —sobre confidencialidad, control de documentos o versiones— coincide con el fragmento del pie que se incrustó doscientas veces mejor que con el único párrafo que realmente la responde. Los números de página crean un fallo más sutil, enseñando al modelo que los números sueltos son contenido, así que un fragmento que termina en «42» puede citarse como si el número significara algo. Y cada fragmento de mobiliario ocupa un hueco en un conjunto de resultados top-k finito, empujando fuera un fragmento genuinamente relevante del contexto que recibe el modelo. Limpiar no es, por tanto, un orden cosmético; es eliminar un competidor sistemático de tu propio contenido dentro de tu propio índice.

Fundamentos de la fragmentación: tamaño, solapamiento y límites

Fragmentar es la decisión sobre qué unidad se incrusta, y tiene tres mandos. El tamaño equilibra foco y contexto: los fragmentos pequeños, de unos cientos de caracteres, incrustan una idea con nitidez y recuperan con precisión, pero pueden llegar sin la frase que da a la idea sus condiciones; los fragmentos grandes, de varios miles de caracteres, llevan su contexto consigo pero mezclan varias ideas en un vector promedio, así que ninguna recupera con fuerza. La mayoría de los corpus documentales cae en algún punto intermedio —aproximadamente de 500 a 1.000 caracteres es una región de partida sensata— y la respuesta correcta se decide probando tus propias preguntas contra tus propios documentos, no copiando un número de un valor por defecto. La documentación de divisores de texto de LangChain es un buen mapa de las familias de divisores, desde los de caracteres y recursivos hasta los conscientes de la estructura.

El solapamiento es un seguro contra el segundo mando, los límites. Un divisor que corta cada 800 caracteres sin importar la estructura acabará partiendo una definición por la mitad, y ninguna mitad se recupera ni se lee bien. Dividir por límites —primero párrafos, luego frases, luego espacios, como hacen los divisores recursivos— mantiene las unidades enteras la mayoría de las veces, y un solapamiento modesto del diez al veinte por ciento repite el borde de un fragmento al comienzo del siguiente, para que un corte que aún así ocurra no deje huérfano su contexto. La jerarquía de la documentación de analizadores de nodos de LlamaIndex hace el mismo apunte desde el lado del cargador: analiza en nodos que respeten el documento, y luego divide. Pero nada de esto rescata el mobiliario: el solapamiento repite fielmente el encabezado también en el fragmento siguiente, y por eso la limpieza va antes de fragmentar, nunca después.

Deduplica antes de incrustar

Los duplicados son el segundo contaminante sistemático, y vienen de dos clases. La primera es la duplicación de documentos enteros: el mismo PDF indexado dos veces con nombres distintos, la versión antigua dejada junto a la nueva, el adjunto de correo guardado junto a la copia de la unidad compartida. La segunda está dentro del documento: el descargo en la portada y otra vez en el apéndice, el resumen repetido al frente de cada capítulo, la tabla pegada en el cuerpo y en el anexo. Ambas clases tienen el mismo efecto en la recuperación —el texto duplicado se incrusta repetidamente, así que se recupera repetidamente, llenando el top-k con copias de un pasaje mientras otros pasajes nunca afloran— y el mismo efecto en el coste, porque pagas por incrustar y almacenar cada copia.

La deduplicación es más barata antes de incrustar, cuando aún es una comparación de cadenas. Los duplicados exactos caen con la normalización: colapsa los espacios, ignora el mobiliario de página que ya quitaste, hashea el resultado y conserva una copia. Los casi duplicados —el mismo párrafo con una fecha cambiada o un encabezado renumerado— necesitan una pasada de similitud, pero incluso una tosca atrapa el texto repetido que más daño hace. Dos cautelas mantienen honesta la deduplicación. Primera, conserva la primera aparición y registra dónde estaban las copias; una advertencia repetida en dos capítulos puede ser un dispositivo de seguridad deliberado, y eliminarla del registro por completo es una decisión distinta de eliminarla del índice. Segunda, deduplica después de limpiar, no antes: dos páginas que difieren solo en su número de página son duplicados de contenido envueltos en mobiliario distinto, y solo el texto limpio lo revela.

Qué quitar y qué conservar

Quita lo que se repite sin informar: encabezados y pies corrientes, números de página, marcas de agua, bandas de confidencialidad, líneas generadas de «impreso el», y las migas de navegación que una exportación de web a PDF estampa en cada página. Conserva lo que estructura: los encabezados reales, porque son la señal de límite de fragmento más fuerte que tienes y a menudo pertenecen a los metadatos del fragmento; los pies de figura, porque un pie es con frecuencia el único texto que dice lo que muestra la figura; el contenido de las tablas, manejado con cuidado, porque una tabla despojada pierde los encabezados de fila y columna que dan sentido a sus números; y las listas, cuyos elementos son unidades naturales. El caso límite es el índice de contenidos. Como fragmentos, las líneas del índice son mobiliario —una lista de títulos y números de página que coincide vagamente con cada consulta y no responde ninguna—, pero como metadatos esa misma página de índice es un mapa del documento. Quítala del texto incrustado y consérvala en tus notas sobre el corpus.

El mismo criterio se aplica dentro del propio limpiador de documentos: el mobiliario y los números de página se marcan por defecto porque casi siempre es seguro quitarlos, mientras que los párrafos duplicados nunca se marcan por defecto porque la repetición a veces es el objetivo. La honestidad de la extracción también importa aquí. Un PDF es un formato estructurado —la norma ISO de PDF, ISO 32000, define las páginas como flujos de contenido de operaciones de dibujo y texto, no como texto fluido—, así que cualquier extractor aproxima el orden de lectura, y un PDF escaneado no tiene capa de texto hasta que el OCR le da una. Si tus documentos fuente importan también por otros motivos, el artículo complementario sobre tus PDF como parte de la accesibilidad de tu sitio web cubre la estructura etiquetada que ayuda tanto a los lectores de pantalla como a los extractores.

Evaluar la recuperación después de limpiar

Limpiar es una hipótesis —la recuperación mejorará— y las hipótesis sobre la calidad de búsqueda se pueden probar con una maquinaria vergonzosamente pequeña. Reúne de veinte a cincuenta preguntas reales que tus usuarios hacen de verdad, con el pasaje que debería responder a cada una anotado a mano. Ejecútalas contra el índice sin limpiar y el índice limpio con el mismo recuperador, los mismos ajustes de fragmento y el mismo top-k, y compara dos cosas: con qué frecuencia aparece el pasaje correcto en los resultados, y qué tan arriba queda cuando aparece. Esa pareja —cobertura y rango— es el marcador. Si la limpieza funciona, los fragmentos de mobiliario dejan de aparecer en los resultados, los pasajes correctos suben, y las preguntas que antes fallaban porque un pie superaba a la respuesta empiezan a pasar.

Luego lee los fallos, porque los números por sí solos te adularán. Un índice limpio puede ganar cobertura mientras pierde una pregunta cuya respuesta vivía de verdad en un resumen repetido que deduplicaste, o en un encabezado que llevaba el nombre del producto que cada fragmento necesitaba. Esas pérdidas son información: te dicen que conserves ese elemento como metadatos, o que antepongas el título del documento a cada fragmento deliberadamente en lugar de incrustarlo por accidente doscientas veces. Vuelve a ejecutar la evaluación cada vez que cambien el corpus, el divisor o el modelo de incrustación, y mantén el conjunto de preguntas versionado junto al índice. La calidad de RAG no es una propiedad del lanzamiento; es una propiedad del mantenimiento, y un pequeño conjunto de pruebas fijo es lo que convierte un «se siente mejor» en algo que puedes defender.

Fuentes y lecturas adicionales

Preguntas frecuentes

¿Cuánto mejora realmente la recuperación con la limpieza?

Depende de cuánto mobiliario tengan tus documentos, y eso es medible: cuenta las líneas que se repiten entre páginas antes de limpiar, y prueba un conjunto fijo de preguntas reales contra el índice antes y después. Los informes largos con encabezados fuertes son los que más ganan, porque el mobiliario puede ocupar una décima parte o más de cada fragmento; los documentos cortos y limpios pueden ganar poco. El método honesto es la evaluación de antes y después de la última sección, no un porcentaje prometido.

¿Debo limpiar antes o después de fragmentar?

Antes, siempre. Fragmentar un documento sin limpiar incrusta el mobiliario en cada fragmento, lo solapa en el siguiente y esparce los números de página por todo el índice, donde ningún paso posterior puede quitarlos con fiabilidad. Limpia primero el texto extraído y luego fragmenta el resultado: el limpiador de documentos produce texto limpio y fragmentos JSONL listos en ese orden por exactamente este motivo.

¿Con qué tamaño de fragmento y solapamiento debo empezar?

Empieza en torno a 800 caracteres, dividiendo por límites de párrafo y con un solapamiento modesto, y luego ajusta contra tu propio conjunto de preguntas. Los fragmentos más pequeños recuperan con más precisión pero llevan menos contexto; los más grandes hacen lo contrario. Guías de marcos como la documentación de divisores de texto de LangChain enlazada en las fuentes describen las familias de divisores, pero los números correctos para tu corpus vienen de la evaluación, no de un valor por defecto.