Elastic
Jina AI
Modelos
API
keyboard_arrow_down
Lector
Lea las URL y busque en la web para obtener una base más sólida para su LLM.
Incrustaciones
Incrustaciones multimodales y multilingües.
reclasificador
Reclasificador para maximizar la relevancia de los resultados de búsqueda.
Elastic Inference Service
Ejecuta modelos Jina de forma nativa dentro de Elasticsearch.
MCP terminalCLIarticlellms.txtsmart_toyAgentesdata_objectEsquemamenu_bookDocumentos



Acceso
login
Selección de texto a través de la optimización submodular
Reordenación de pasajes a través de la optimización submodular
Conclusiones
star
Presentado
Blog de tecnología
julio 14, 2025

Optimización submodular para la selección de texto, el reordenamiento de pasajes y la ingeniería de contexto

Mientras que otros confían en el ajuste de *prompts* y esperan lo mejor, tú deberías aprender optimización submodular, que proporciona un marco de trabajo con principios y garantías teóricas para una mejor ingeniería de contexto.
Han Xiao • 11 minutos de lectura
GitHub - jina-ai/submodular-optimization: Submodular optimization for diverse query generation
Submodular optimization for diverse query generation - jina-ai/submodular-optimization
GitHubjina-ai

Todas las implementaciones de la serie de submodularidad se pueden encontrar en este repositorio de Github.

Después de mi artículo anterior sobre la optimización submodular para consultas fan-out en DeepResearch, recibí excelentes comentarios solicitando una inmersión más profunda en la submodularidad y sus aplicaciones en la recuperación de información y la búsqueda agentic. Hoy, presentaré dos aplicaciones más de la optimización submodular: la selección de texto y el reordenamiento de pasajes. Ambos abordan el mismo desafío central: la selección óptima de subconjuntos, que todo sistema similar a DeepResearch debe resolver.

Los documentos del mundo real contienen redundancia semántica: no todas las oraciones tienen la misma importancia para el razonamiento de un LLM. Imagina que tienes un documento extenso y necesitas extraer la información más representativa sin exceder el límite de tokens. Esto es la selección de texto: elegir contenido que capture la esencia del documento bajo restricciones de cardinalidad. Queremos selecciones que sean ortogonales entre sí: minimizar la información compartida y maximizar la cobertura total. Esto se aplica en múltiples niveles: seleccionar oraciones de documentos o tokens de oraciones. También se puede considerar la selección de texto como optimización o compresión del contexto. Reducimos el consumo de tokens del LLM mientras preservamos la riqueza semántica necesaria para el razonamiento.

Una ilustración de la selección de texto de un documento minimizando la información compartida y maximizando la cobertura total.

El reordenamiento de pasajes ordena los pasajes candidatos por su relevancia semántica para una consulta de usuario. En Jina AI, hemos creado reordenadores especializados para esto (jina-reranker-m0, jina-reranker-v2-multilingual-base), aunque nuestros modelos de embeddings también pueden resolver el problema. Pero aquí está la limitación: la mayoría de los reordenadores, incluidos los nuestros, funcionan de forma puntual. Califican pares individuales de (query, document) de forma independiente. No consideran la información compartida entre los pasajes: si el pasaje 1 y el pasaje 7 obtienen una puntuación alta, pero contienen información en su mayoría idéntica, ¿no sería suficiente seleccionar solo uno de ellos?

Una ilustración de la tarea de reordenamiento de pasajes. Si bien la selección de texto optimiza la diversidad pura dentro de un documento, el reordenamiento de pasajes debe equilibrar la diversidad con la relevancia de la consulta.

En DeepResearch, esto se vuelve crucial. Cuando los agentes llaman a las herramientas de búsqueda y recopilan fragmentos web, debemos determinar qué fragmentos merecen el precioso espacio de la ventana de contexto para el siguiente paso de razonamiento. La selección sigue el mismo principio de "minimizar la superposición, maximizar la cobertura" que la selección de texto, pero con un objetivo adicional: la relevancia para la consulta original debe tener prioridad.

Muchos investigadores reconocen la creciente importancia de la ingeniería de contexto, donde necesitamos construir, optimizar y "empaquetar las ventanas de contexto de la manera correcta" (de Andrej Karpathy) para construir flujos de trabajo agentic más efectivos. Sin embargo, muchos simplemente usan *prompts* de LLM para resolver estos problemas "suavemente": sin garantías, sin fundamento teórico, efectividad cuestionable. Podemos hacerlo mucho mejor.

En este artículo, mostraré que tanto la selección de texto como el reordenamiento de pasajes ceden a la optimización submodular, que proporciona soluciones rigurosas. Si no estás familiarizado con las funciones submodulares, piensa en "rendimientos decrecientes". Comenzamos con un conjunto vacío e incrementamos agregando texto o pasajes seleccionados. Cada adición proporciona valor, pero el beneficio marginal disminuye, capturando la intuición de que las selecciones diversas y no redundantes son más valiosas. Formalmente, una función fff es submodular si para cualquier conjunto A⊆BA \subseteq BA⊆B y elemento i∉Bi \notin Bi∈/B:

f(A∪i)−f(A)≥f(B∪i)−f(B)f(A \cup {i}) - f(A) \geq f(B \cup {i}) - f(B)f(A∪i)−f(A)≥f(B∪i)−f(B)

Esta formulación captura nuestra intuición perfectamente: queremos que los elementos seleccionados cubran colectivamente el espacio semántico de todo el documento, a medida que seleccionamos más unidades, es menos probable que cada nueva unidad cubra el espacio semántico previamente no cubierto.

tagSelección de texto a través de la optimización submodular

0:00
/1:04

Primero usé la función multi-vector de jina-embeddings-v4 para extraer los *embeddings* a nivel de *token* de un pasaje, luego apliqué la optimización submodular para seleccionar los *tokens* que proporcionan la mejor cobertura, finalmente llamé al tokenizador y convertí las selecciones de nuevo a las cadenas en sus posiciones originales. Piense en ello como una forma de "compresión"; puede ajustar el control deslizante superior k para marcar diferentes "tasas de compresión". ¿Todavía le encuentra sentido al texto comprimido?

Google Colab

Implementación de la selección de texto con optimización submodular.

Comencemos resolviendo el problema de la selección de texto, ya que es esencial para comprender la submodularidad y sirve como un paso preliminar para la reordenación de pasajes. El problema es el siguiente:

Dado un documento DDD con nnn elementos (tokens o frases), queremos seleccionar un subconjunto S⊆1,2,…,nS \subseteq {1, 2, \ldots, n}S⊆1,2,…,n con ∣S∣=k|S| = k∣S∣=k que maximice la función de cobertura:

f(S)=∑i=1nmax⁡j∈Ssimijf(S) = \sum_{i=1}^{n} \max_{j \in S} \text{sim}_{ij}f(S)=i=1∑n​j∈Smax​simij​

donde simij\text{sim}_{ij}simij​ representa la similitud coseno entre los vectores modelo del elemento iii y jjj. Tenga en cuenta que la función de cobertura fff es submodular porque satisface la propiedad de rendimientos decrecientes. La operación max asegura que estamos midiendo qué tan bien está representado cada elemento por la unidad seleccionada más cercana, evitando contar doble información redundante.

tagObtener vectores modelo a nivel de token/pasaje

Para la selección a nivel de token, aprovechamos la nueva capacidad de vector modelo múltiple de jina-embeddings-v4. Establecer return_multivector=True devuelve un vector modelo por token, lo que permite nuestra selección a nivel de subpalabra.

Para la selección a nivel de pasaje, simplemente dividimos los documentos por puntuación o nuevas líneas e incrustamos cada pasaje de forma independiente. Alternativamente, también se puede llamar a nuestra API con la fragmentación tardía para obtener vectores modelo de pasaje contextuales, lo que generalmente conduce a un mejor rendimiento en las tareas posteriores.

Fragmentación tardía en modelos de vectores modelo de contexto largo
Fragmentar documentos largos mientras se preserva la información contextual es un desafío. Introducimos la "Fragmentación tardía" que aprovecha los modelos de vectores modelo de contexto largo para generar vectores modelo de fragmentos contextuales para mejores aplicaciones de recuperación.
Jina AIMichael Günther, Han Xiao

Vale la pena señalar que, dado que estamos midiendo la similitud semántica dentro de un conjunto homogéneo de elementos, todos sirviendo la misma función en lugar de comparar elementos heterogéneos como consultas con documentos (como veremos en la reordenación de pasajes), invocamos jina-embeddings-v4 con el adaptador LoRA text-matching habilitado.

Jina Embeddings v4: Vectores modelo universales para la recuperación multimodal multilingüe
Jina Embeddings v4 es un modelo de vector modelo universal de 3.8 mil millones de parámetros para la recuperación multimodal y multilingüe que admite salidas de vector modelo único y vector modelo múltiple.
Jina AIJina AI

Desde jina-embeddings-v3, nuestros modelos de vectores modelo han sido equipados con LoRA optimizado para tareas. Lea más sobre LoRA disponibles en nuestros vectores modelo v4.

tagAlgoritmo Greedy Perezoso

Como en el artículo anterior, utilizamos el algoritmo greedy perezoso para resolver el problema de optimización. Para las funciones submodulares monótonas, este algoritmo alcanza una garantía de aproximación de (1−1/e)≈0.632(1 - 1/e) \approx 0.632(1−1/e)≈0.632, un límite que es demostrablemente ajustado. La optimización greedy perezosa explota dos propiedades fundamentales de las funciones submodulares: rendimientos decrecientes y la preservación del orden relativo entre las ganancias marginales a través de las iteraciones. El algoritmo funciona de la siguiente manera:

  1. Inicialización: Calcule las ganancias marginales iniciales para todos los elementos y almacénelas en una cola de prioridad
  2. Evaluación perezosa: En cada iteración, extraiga el elemento con la ganancia almacenada en caché más alta
  3. Validación: Si la ganancia de este elemento se calculó en la iteración actual, selecciónelo inmediatamente
  4. Recálculo: De lo contrario, vuelva a calcular su ganancia marginal actual y vuelva a insertarlo en la cola

Este algoritmo greedy perezoso reduce drásticamente la sobrecarga computacional, especialmente cuando las ganancias marginales exhiben una varianza sustancial entre los elementos.

tagReordenación de pasajes a través de la optimización submodular

Google Colab

La tarea de reordenación de pasajes extiende la selección de texto agregando un nuevo objetivo: el subconjunto seleccionado debe ser relevante para la consulta dada. Mientras que la selección de texto optimiza la diversidad pura dentro de un documento, la reordenación de pasajes debe equilibrar la diversidad con la relevancia de la consulta. Estas son las notaciones clave:

  • S⊆{1,2,…,P}S \subseteq \{1, 2, \ldots, P\}S⊆{1,2,…,P} es el subconjunto seleccionado de índices de pasaje del conjunto candidato de PPP pasajes: todo el contenido o los recuerdos en el sistema DeepResearch en un paso dado. SSS representa el subconjunto cuidadosamente seleccionado que queremos llevar al siguiente paso de razonamiento. Tenemos QQQ consultas y PPP pasajes candidatos. En la búsqueda tradicional, ∣Q∣=1|Q|=1∣Q∣=1, pero en DeepResearch, donde las consultas se reformulan y generan con frecuencia, podemos tener varias consultas a mano.
  • sijs_{ij}sij​ es la similitud entre los pasajes iii y jjj. Esto utiliza la similitud coseno de jina-embeddings-v4 con la tarea "text-matching" LoRA habilitada para todos los pasajes como lo hicimos en la tarea de selección de texto.
  • rqir_{qi}rqi​ es la puntuación de relevancia entre la consulta qqq y el pasaje iii. Esto se calcula como la similitud coseno utilizando jina-embeddings-v4 con task="retrieval", prompt_name="query" para las consultas y task="retrieval", prompt_name="passage" para los pasajes, lo que permite el LoRA de recuperación asimétrica y produce vectores modelo heterogéneos.

Ahora podemos formular esto utilizando dos funciones submodulares diferentes, cada una capturando una compensación distinta entre relevancia y diversidad.

tagFormulación de ubicación de instalaciones

Cada pasaje es "cubierto" por su pasaje seleccionado más similar, ponderado por cuán relevante es ese pasaje seleccionado para cada consulta. Esta formulación selecciona pasajes que son relevantes para la consulta Y representativos de muchos otros pasajes.

fFL(S)=∑q=1Q∑i=1Pmax⁡j∈Srqj⋅sijf_{FL}(S) = \sum_{q=1}^{Q} \sum_{i=1}^{P} \max_{j \in S} r_{qj} \cdot s_{ij}fFL​(S)=q=1∑Q​i=1∑P​j∈Smax​rqj​⋅sij​

La interacción multiplicativa entre la relevancia de la consulta (rqjr_{qj}rqj​) y la similitud del pasaje (sijs_{ij}sij​) crea "centros": pasajes que sirven para propósitos duales como respuestas relevantes y representantes diversos. Un pasaje altamente relevante puede cubrir muchos pasajes similares, mientras que un pasaje menos relevante proporciona cobertura solo si no existe un mejor representante.

tagFormulación de cobertura saturada

Para cada pasaje, recibe crédito igual al mínimo de su relevancia de consulta o qué tan bien está cubierto por su mejor representante seleccionado. Esto fomenta la selección de pasajes que pueden "saturar" la relevancia de muchos otros pasajes.

fSC(S)=∑q=1Q∑i=1Pmin⁡(rqi,max⁡j∈Ssij)f_{SC}(S) = \sum_{q=1}^{Q} \sum_{i=1}^{P} \min(r_{qi}, \max_{j \in S} s_{ij})fSC​(S)=q=1∑Q​i=1∑P​min(rqi​,j∈Smax​sij​)

La operación min crea un techo de relevancia: no puede obtener más crédito de cobertura que la relevancia inherente de un pasaje para la consulta. Esta formulación es más conservadora, evitando la selección excesiva de pasajes diversos pero irrelevantes.

Ambas funciones son monótonas y submodulares, lo que permite el mismo algoritmo greedy perezoso con garantías de aproximación de (1−1/e)(1-1/e)(1−1/e).

tagResultados del experimento

En nuestra implementación, utilizamos Jina Reader para obtener el texto sin formato de nuestras publicaciones de blog anteriores y evaluar diferentes consultas utilizando la reordenación de pasajes. Recomiendo encarecidamente que los lectores experimenten con nuestro cuaderno de Google Colab utilizando sus propios artículos: el contenido con el que estén más familiarizados proporcionará los conocimientos más significativos.

En nuestros experimentos, seleccionamos los 10 pasajes principales de cada documento. Tenga en cuenta que los tres algoritmos (solo relevancia de la consulta, ubicación de la instalación y cobertura saturada) exhiben la monotonicidad: seleccionar un kkk más grande no cambia la clasificación de los primeros k−1k-1k−1 elementos. Por ejemplo, al comparar k=9k=9k=9, k=10k=10k=10 o k=11k=11k=11, los 9 pasajes principales siguen siendo idénticos en todos los valores. Los resultados se muestran a continuación.

Aquí hay algunas observaciones clave. Primero, los algoritmos de optimización submodular siguen vagamente las puntuaciones de relevancia de la consulta, pero introducen reordenamientos estratégicos: los pasajes "suben y bajan" en las clasificaciones. Este comportamiento se alinea con nuestras expectativas, ya que estos algoritmos optimizan la minimización de la redundancia en lugar de la relevancia pura. Las clasificaciones resultantes demuestran una gran calidad.

Algunos lectores pueden notar que en el primer, segundo y cuarto ejemplos, los resultados de la optimización submodular parecen "saturarse" temprano, simplemente generando los pasajes ordenados 0, 1, 2, etc. Esto no es un fallo algorítmico, sino que revela una de las características más valiosas de la optimización submodular que ningún **Reranker** existente puede prometer.

Para comprender mejor este comportamiento de saturación, trazamos los valores de la función submodular para todos los tamaños de conjunto posibles kkk de 1 al número máximo de pasajes en el documento. Esto revela la propiedad de rendimientos decrecientes en acción.

Documento=https://jina.ai/news/submodular-optimization-for-diverse-query-generation-in-deepresearch Consulta="qué son los rendimientos decrecientes". Las líneas punteadas rojas marcan los puntos de saturación prácticos. Más allá de estos puntos, las ganancias marginales se vuelven insignificantes.
Documento=https://jina.ai/news/jina-embeddings-v4-universal-embeddings-for-multimodal-multilingual-retrieval Consulta="cuántos adaptadores lora tiene v4". Las líneas punteadas rojas marcan los puntos de saturación prácticos. Más allá de estos puntos, las ganancias marginales se vuelven insignificantes.

Los gráficos anteriores muestran cómo se comportan las funciones de Ubicación de Instalaciones y Cobertura Saturada a medida que aumentamos el tamaño de la selección. Ambos exhiben el patrón submodular clásico:

  • Crecimiento inicial rápido: Las ganancias más pronunciadas ocurren en las primeras selecciones
  • Rendimientos decrecientes: Cada pasaje adicional proporciona un beneficio marginal progresivamente menor
  • Meseta de saturación: Los valores de la función se aplanan, lo que indica un beneficio mínimo de adiciones adicionales

Más allá de estos puntos, las ganancias marginales se vuelven insignificantes. Esto explica por qué nuestros experimentos de clasificación anteriores mostraron ordenamiento secuencial (0, 1, 2, ...): los algoritmos identificaron correctamente que los pasajes adicionales contribuyen con un valor mínimo.

Este comportamiento manifiesta directamente la propiedad matemática de la submodularidad. Las ganancias marginales decrecientes que observamos no son artefactos algorítmicos, sino características fundamentales de las funciones de cobertura. Cuando el valor de la función se estabiliza, hemos llegado al punto en que:

Δi(S)=f(S∪{i})−f(S)≈0\Delta_i(S) = f(S \cup \{i\}) - f(S) \approx 0Δi​(S)=f(S∪{i})−f(S)≈0

para todos los pasajes restantes i∉Si \notin Si∈/S.

tagConclusiones

La ingeniería de contexto ha surgido como una palabra de moda en la IA, y con frecuencia se la aclama como un cambio de paradigma hacia la construcción de sistemas agenticos que seleccionan la información más relevante para llenar la ventana de contexto de un **LLM**, y esto a menudo comienza con la recuperación de datos externos a través de RAG.

La selección de texto y el reordenamiento de pasajes son componentes integrales de la ingeniería de contexto, particularmente en los procesos de selección, recuperación y compresión de contexto de la base de conocimiento. El reordenamiento de pasajes luego refina esto reordenando esos textos seleccionados en función de la relevancia de la consulta para garantizar que el **LLM** reciba primero la información más útil, evitando la sobrecarga y mejorando la calidad de la salida.

La optimización submodular ofrece tres ventajas convincentes sobre los enfoques tradicionales para la selección de texto y el reordenamiento de pasajes:

tagRigor Teórico con Eficiencia Computacional

A diferencia de los métodos heurísticos, la optimización submodular proporciona garantías demostrables. El algoritmo codicioso perezoso se ejecuta en tiempo O(nklog⁡n)O(nk \log n)O(nklogn) —en comparación con (nk)\binom{n}{k}(kn​) combinaciones para la búsqueda exhaustiva— mientras se logra una aproximación de (1−1/e)≈0.632(1-1/e) \approx 0.632(1−1/e)≈0.632 a la solución óptima. Esto significa que nuestra solución tiene la garantía matemática de ser al menos un 63% tan buena como la mejor selección teóricamente posible. Ninguna heurística basada en **Prompt** puede prometer este nivel de garantía de rendimiento.

tagCriterios de Detención Inteligentes

El comportamiento de saturación que observamos proporciona un mecanismo de detención automático: cuando las ganancias marginales se acercan a cero, sabemos que debemos dejar de agregar elementos. Esta capacidad es inalcanzable con los **Reranker** existentes punto a punto o por lista, que operan independientemente en cada elemento sin comprender los rendimientos decrecientes a nivel de conjunto. La función en sí misma nos dice cuándo hemos capturado suficiente cobertura.

tagExtensión Multi-Consulta

El marco se extiende naturalmente a escenarios de múltiples consultas, comunes en DeepResearch, donde las consultas se reescriben y reformulan con frecuencia. Los mismos fundamentos teóricos y algoritmos codiciosos perezosos se aplican sin problemas. Los enfoques basados en **Prompt** carecen de esta extensibilidad sistemática y, a menudo, requieren soluciones ad hoc para cada nuevo escenario.

Estos beneficios provienen de los fundamentos matemáticos de la submodularidad en lugar de trucos de ingeniería. Mientras que otros confían en el ajuste de **Prompt** y esperan buenos resultados, usted debería aprender la optimización submodular, que proporciona un marco basado en principios con garantías formales: una ventaja crucial al construir una ingeniería de contexto confiable y escalable.

Categorías:
star
Presentado
Blog de tecnología
rss_feed

Leer más
marzo 11, 2026 • 7 minutos de lectura
Generación de embeddings de audio a partir de LLM multimodales
Han Xiao
Abstract illustration of a sound wave or heartbeat, formed by blue, orange, and gray dots on a white background.
marzo 06, 2026 • 6 minutos de lectura
Identificación de modelos de embeddings a partir de valores numéricos brutos
Han Xiao
Fingerprint illustration made from numbers, showcasing digital and high-tech design on a light background.
septiembre 09, 2025 • 11 minutos de lectura
Vectores multimodales en Llama.cpp y GGUF
Andrei Ungureanu
Alex C-G
Cartoon llama in the center of a white background, emitting laser-like beams from its eyes. The illustration creates a playfu
Idioma / tema actual
Search Foundation
Lector
Incrustaciones
reclasificador
Obtener la clave API de Jina
Límite de velocidad
Sobre nosotros
Noticias
Descargar el logotipo de Jina
open_in_new
Descargar el logotipo de Elastic
open_in_new
Estado de la API
Elastic © 2026.SeguridadTérminos y condicionesPrivacidadAdministrar cookiesNo venda ni comparta mi información personal.
Este sitio web y todo su contenido, software, productos y servicios asociados están destinados exclusivamente al uso profesional. No se permite ni se recomienda su uso por parte de consumidores.