La integración de LEMUR en txtai aborda un problema práctico de los modelos de recuperación de interacción tardía: estos modelos conservan un vector por cada token de la consulta o del documento, lo que les proporciona detalles más precisos que representar cada texto con un único vector, pero dificulta su uso con los índices tradicionales de búsqueda densa. txtai ofrece una vía que convierte esta representación multivectorial en un vector de dimensión fija que puede buscarse mediante el mismo tipo de índices, junto con una opción configurable llamada centrado en la media para aprovechar mejor las diferencias direccionales de los vectores de tokens cuando son muy similares entre sí.
El material, publicado el 13 de agosto de 2026 en el blog de Hugging Face como artículo comunitario escrito por Morgan Carr, presenta la motivación del cambio, los resultados de experimentos concretos y el procedimiento para entrenar y cargar un artefacto de LEMUR en txtai. No presenta el resultado como una clasificación general entre técnicas de recuperación, ya que las comparaciones se limitaron a un modelo, tres conjuntos de datos, un dispositivo y una búsqueda exacta.
De varios vectores a un vector indexable
En la búsqueda de interacción tardía, todos los tokens de la consulta se comparan con los tokens del documento mediante MaxSim; se conserva la coincidencia más fuerte para cada token de la consulta y después se suman esos valores. LEMUR, o Learned Multi-Vector Retrieval, aprende una codificación de dimensión fija que intenta aproximar el resultado de esta interacción manteniendo la posibilidad de utilizar un índice de vectores tradicional.
El artefacto de LEMUR en txtai consta de un codificador de características, estadísticas para normalizar las salidas y una muestra de vectores de tokens. Durante la inferencia, la consulta se convierte en una suma de características aprendidas, mientras que el documento se representa mediante un conjunto de pesos de mínimos cuadrados ordinarios sobre la muestra almacenada. El producto interno entre los dos vectores de tamaño fijo se convierte en una aproximación del resultado original de la interacción tardía.
El artefacto resultante es específico del conjunto de datos utilizado durante el entrenamiento y debe entrenarse antes de cargar un índice de embeddings en txtai. El artefacto también se guarda como config.json y model.safetensors. El ajuste epochs=100 utiliza la ruta MLP orientada a la calidad, mientras que epochs=0 selecciona características ELM aleatorias deterministas como alternativa de menor coste.
La selección de los datos de entrenamiento fue un factor decisivo
Un experimento de ablación en el conjunto nfcorpus mostró que la distribución de vectores utilizada para aprender el mapa de características influye más que algunas de las demás decisiones de entrenamiento. Cuando el MLP se entrenó con vectores del codificador de datos, alcanzó un NDCG@10 de 0.15870, inferior al resultado de 0.19187 del ELM sin entrenar. Al utilizar vectores del codificador de consultas, el resultado subió a 0.24868 y llegó a 0.25534 después de seleccionar el número de épocas mediante validación.
Según el análisis incluido en el material, la selección de la distribución de aprendizaje explicó el 93% de la mejora medida entre el experimento con vectores de datos y el resultado final, mientras que la selección de épocas contribuyó con el 7% restante. Por ello, LemurTrainer establece query como valor predeterminado de learncategory, aunque permite elegir data o proporcionar un conjunto de aprendizaje separado.
¿Qué mostró la prueba comparativa?
La comparación utilizó el modelo colbert-ir/colbertv2.0, una NVIDIA GeForce RTX 4080 SUPER, torch 2.13.0+cu130 y una búsqueda exacta de Faiss mediante IDMap,Flat. Se compararon la versión predeterminada de MUVERA con una anchura de 10.240 dimensiones, una versión de MUVERA reducida a 2.048 dimensiones y LEMUR con una codificación MLP de 2.048 dimensiones.
- En nfcorpus, LEMUR obtuvo 0.25524, frente a 0.16299 de MUVERA con el mismo tamaño y 0.23544 de MUVERA con el tamaño predeterminado.
- En scifact, LEMUR obtuvo 0.54910, frente a 0.36757 de MUVERA reducida y 0.50021 de la versión predeterminada.
- En arguana, LEMUR obtuvo 0.42556, frente a 0.26280 de MUVERA reducida y 0.34614 de la versión predeterminada.
Esto equivale a una mejora sobre MUVERA del mismo tamaño del 56.6% en nfcorpus, del 49.4% en scifact y del 61.9% en arguana. En comparación con el vector predeterminado de MUVERA, la mejora fue del 8.4%, el 9.8% y el 22.9%, respectivamente. Además, los índices de LEMUR utilizados en la medición ocuparon una quinta parte del espacio de los índices predeterminados de MUVERA, porque la anchura del vector se redujo de 10.240 a 2.048 dimensiones.
Sin embargo, el alcance de estas cifras es importante: no se completaron los experimentos de fiqa y scidocs con el conjunto de datos requerido, y las mediciones se basaron en un único modelo, un único dispositivo y una búsqueda exacta. txtai utiliza la búsqueda exacta hasta 5.000 filas y después cambia a un índice IVF. En el experimento de scifact, el IVF predeterminado redujo el NDCG@10 de LEMUR un 43% frente a la búsqueda exacta, en comparación con una reducción del 25% para MUVERA. Por ello, no puede suponerse que el resultado de la búsqueda exacta se mantenga al escalar o utilizar una búsqueda aproximada.
¿Por qué se añadió el centrado en la media?
Al pasar de ColBERTv2 a lightonai/LateOn, la prueba constató que los vectores de tokens presentaban una similitud direccional muy elevada. En una muestra de 5.000 pares, la similitud media del coseno entre los vectores fue de 0.9508 y la dispersión de MaxSim fue de 0.0559. Después de restar la media del conjunto y renormalizar, la similitud descendió a 0.0033 y la dispersión de MaxSim aumentó a 0.4772. Esto no constituye una métrica de recuperación por sí misma, pero indica que el centrado proporcionó al codificador de dimensión fija un espacio direccional más amplio que capturar.
Las pruebas de recuperación confirmaron que el beneficio depende del modelo. En la matriz de LateOn, el centrado a nivel de lote fue más eficaz que desactivarlo o utilizar la media del conjunto en las cuatro celdas medidas. Por ejemplo, el resultado de LEMUR en nfcorpus aumentó de 0.00000 sin centrado a 0.33309 con centrado del lote, mientras que en scifact subió de 0.04985 a 0.69016. Sin embargo, los experimentos con ColBERTv2 mostraron que el centrado puede ser neutro o perjudicar a MUVERA, por lo que no se presentó como una opción universal incondicional.
La regla predeterminada en los cambios integrados activa el centrado del lote cuando el modelo cargado contiene más de una capa lineal de torch.nn.Linear. Los modelos con cero o una capa conservan su comportamiento anterior, aunque la decisión puede anularse manualmente. El centrado se realiza después de normalizar los vectores de tokens y antes de LEMUR o MUVERA, seguido de otra normalización. Puede elegirse el ámbito document, batch o collection, y el ámbito collection también acepta una media integrada o un archivo Safetensors que contenga center.mean.
¿Qué cambia en la práctica para el usuario?
El uso de LEMUR requiere un paso de entrenamiento independiente antes de crear el índice, y los ajustes de los vectores durante el entrenamiento deben ser coherentes con los ajustes de carga. El ejemplo publicado muestra el uso de center: true con un artefacto de LEMUR y la fijación de Faiss en IDMap,Flat cuando la búsqueda exacta resulta práctica. La versión más reciente de txtai publicada en el material es v9.12.0, mientras que los cambios integrados están dirigidos a v9.13.0; para probar el código fuente anterior a la versión, puede instalarse la versión master del repositorio de GitHub en un entorno aislado.
La conclusión práctica no es que LEMUR o el centrado sean superiores en todos los casos, sino que txtai ofrece ahora dos herramientas separadas para dos problemas distintos: LEMUR para reducir la representación de la interacción tardía a un vector fijo, y el centrado para abordar una geometría inadecuada de los vectores de tokens en algunos modelos. Sigue siendo necesario realizar pruebas más amplias con distintos modelos, conjuntos de datos e índices aproximados configurados antes de generalizar los resultados.