Alejandría

Busca en Alejandría

Técnicas

Fine-tuning embedding models

Adapta representaciones vectoriales al vocabulario y las tareas de un dominio.

01

En pocas palabras

Ajustar un modelo de embeddings con ejemplos del dominio para mejorar cómo representa consultas y documentos y, por tanto, la recuperación relevante.

Qué problema resuelve

Búsquedas semánticas que no reconocen terminología especializada o confunden documentos similares pero incorrectos para la tarea.

Cuándo utilizarlo

Sistemas RAG con evidencia de fallos de recuperación y datos etiquetados suficientes. Ejemplo: entrenar con consultas de soporte y artículos pertinentes, incluyendo documentos parecidos que deben descartarse.

02

De la idea a la práctica

Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.

En el Radar compartido: Trial (valoración de la edición aportada).

Cómo funciona

El entrenamiento acerca representaciones que deben relacionarse y separa las que no. Se utilizan pares o tríos de consulta, documento relevante y documento negativo, según la función de pérdida elegida.

Ejemplo: un trío de entrenamiento

{
  "anchor": "¿Cómo renovar el certificado del servicio?",
  "positive": "Procedimiento de renovación y despliegue de certificados TLS.",
  "negative": "Procedimiento para renovar la suscripción del servicio."
}

El negativo comparte vocabulario, pero responde a otra intención. El formato y las columnas deben coincidir con el entrenador y su función de pérdida.

Cuándo merece la pena

Señal Lectura
Vocabulario propio (productos, normativa, siglas internas) El modelo genérico confunde términos del dominio
Recall@k bajo en la evaluación aunque el documento existe El problema está en la recuperación, no en el LLM
Muchas consultas cortas y ambiguas El ajuste aprende la intención típica de tus usuarios
Ya se probaron búsqueda híbrida, mejor fragmentación y reranking Agotadas las mejoras más baratas

Antes de ajustar, compara varios modelos de embeddings ya entrenados con tus consultas: a veces cambiar de modelo basta.

Datos de entrenamiento

Fuente Calidad / coste
Logs de búsqueda con clic o respuesta útil Muy buena; requiere volumen y limpieza
Preguntas frecuentes y sus respuestas Buena; suele haber pocas
Preguntas sintéticas generadas por un LLM a partir de cada fragmento Escalable; revisar una muestra
Anotación manual por expertos Excelente; cara

Los negativos difíciles (documentos parecidos pero incorrectos) son los que más enseñan; se pueden minar automáticamente buscando con el modelo base y descartando el positivo.

Ejemplo con Sentence Transformers

from datasets import Dataset
from sentence_transformers import SentenceTransformer, SentenceTransformerTrainer
from sentence_transformers.losses import MultipleNegativesRankingLoss
from sentence_transformers.evaluation import InformationRetrievalEvaluator

modelo = SentenceTransformer("intfloat/multilingual-e5-base")

entrenamiento = Dataset.from_dict({
    "anchor":   ["¿Cuánto cobran por pago tardío?", "¿Puedo adelantar cuotas?"],
    "positive": ["Intereses de mora: se aplican desde el día 4 de atraso…",
                 "Prepago: el cliente puede abonar a capital sin penalización…"],
})

evaluador = InformationRetrievalEvaluator(queries=consultas_eval, corpus=corpus, relevant_docs=relevantes,
                                          name="cartera")

trainer = SentenceTransformerTrainer(
    model=modelo,
    train_dataset=entrenamiento,
    loss=MultipleNegativesRankingLoss(modelo),   # usa los demás positivos del lote como negativos
    evaluator=evaluador,
)
trainer.train()
modelo.save_pretrained("modelos/embeddings-cartera-v1")

Funciones de pérdida habituales

Pérdida Datos Uso
MultipleNegativesRankingLoss (consulta, positivo) [+ negativo] Recuperación; la más usada
CoSENTLoss / CosineSimilarityLoss Pares con puntuación de similitud Similitud semántica graduada
TripletLoss (ancla, positivo, negativo) Separación explícita
MatryoshkaLoss (envoltorio) Cualquiera de las anteriores Embeddings truncables a menos dimensiones con poca pérdida

Puesta en producción

  1. Reindexar todo el corpus con el nuevo modelo: los vectores de modelos distintos no son comparables.
  2. Desplegar con índice paralelo y comparar en tráfico real (A/B o shadow).
  3. Versionar modelo + índice juntos y conservar el anterior para revertir.
  4. Reevaluar cuando cambie el corpus o el tipo de preguntas.

Un reranker ajustado al dominio es una alternativa o complemento: mejora el orden final sin reindexar. Ver RAG.

Criterios de implementación

Compara contra una línea base usando consultas de evaluación separadas del entrenamiento. Mide Recall@k o nDCG y el efecto en las respuestas finales. Versiona modelo e índice y evita mezclar representaciones de espacios vectoriales incompatibles, incluso si tienen la misma dimensión.

Continúa en las fuentes

Documentación oficial para verificar detalles y explorar más.