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.
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
- Reindexar todo el corpus con el nuevo modelo: los vectores de modelos distintos no son comparables.
- Desplegar con índice paralelo y comparar en tráfico real (A/B o shadow).
- Versionar modelo + índice juntos y conservar el anterior para revertir.
- 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.