En el contexto de procesamiento de documentos PDF para generar embeddings y almacenar información vectorial (por ejemplo en Oracle AI Vector Search, LangChain o motores RAG), el siguiente fragmento de un script en Python, define cómo se va a “fragmentar” el texto antes de convertirlo en vectores.
El código en cuestión:
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=150
)
Corresponde a un objeto de LangChain utilizado para dividir texto grande en bloques más pequeños (“chunks”).
¿Qué significa cada parámetro?
chunk_size=1000
Define el tamaño máximo de cada fragmento.
En este caso:
- Cada chunk tendrá aproximadamente 1000 caracteres.
- No necesariamente son 1000 palabras.
- Normalmente incluye espacios, saltos de línea y signos de puntuación.
- Chunk 1 -> caracteres 1 al 1000
- Chunk 2 -> caracteres 851 al 1850
- Chunk 3 -> caracteres 1701 al 2700
Define cuánto contenido se repite entre un chunk y el siguiente.
Aquí: Los últimos 150 caracteres del chunk anterior se copian al siguiente chunk.
Esto evita pérdida de contexto semántico.
Ejemplo:
Chunk 1:
"...Oracle Database permite trabajar con datos vectoriales y embeddings..."
Chunk 2:
"...datos vectoriales y embeddings son utilizados para búsquedas semánticas..."
La frase compartida ayuda a mantener continuidad contextual.
¿Por qué esto es importante en embeddings?
Cuando conviertes texto a embeddings:
Cada chunk se transforma en un vector independiente.
Si el corte es muy agresivo:
Si el corte es muy agresivo:
- se pierde contexto,
- disminuye precisión semántica,
- empeoran las búsquedas RAG.
¿Qué hace “RecursiveCharacterTextSplitter”?
No corta simplemente cada 1000 caracteres de forma brutal.
El algoritmo intenta dividir respetando jerarquías:
- párrafos
- saltos de línea
- oraciones
- espacios
- caracteres
Intenta mantener fragmentos semánticamente coherentes.
Ejemplo práctico
Supongamos este texto:
Oracle Database 26ai incorpora capacidades avanzadas de IA.
Las búsquedas vectoriales permiten similitud semántica.
Los embeddings pueden generarse desde texto, imágenes y audio.
Con:
chunk_size=50
chunk_overlap=10
Podría producir:
Chunk 1:
Oracle Database 26ai incorpora capacidades
Chunk 2:
capacidades avanzadas de IA.
Las búsquedas
Chunk 3:
búsquedas vectoriales permiten similitud
Observe cómo “capacidades” y “búsquedas” se repiten parcialmente.
¿Cómo elegir los tamaños correctos?
Depende del modelo de embeddings y del tipo de documento.
Valores típicos
Tipo documento chunk_sizeoverlap
- Manual técnico 800-1500 100-200
- Código fuente 300-800 50-100
- PDFs legales 1500-2500 200-400
- FAQ/chatbot 300-600 50-80
Si haces:
chunk_size=100
Puedes destruir contexto:
"Oracle Database soporta"
"vector embeddings usando"
"AI Vector Search..."
Eso genera embeddings pobres.
Riesgos de chunks demasiado grandes
Si haces:
chunk_size=10000
Puedes:
- exceder límites del modelo,
- aumentar costo,
- reducir precisión de recuperación,
- mezclar demasiados temas en un solo vector.

No hay comentarios:
Publicar un comentario
Te agradezco tus comentarios. Te esperamos de vuelta.