- 1. Introducción a Semantic Kernel con C#: Construyendo tu Primera Aplicación de IA
- 2.Creando Plugins Personalizados en Semantic Kernel
- 3. Clasificación de Intenciones con LLMs en .NET
- 4. Servicios de Chat Completion con Azure OpenAI y Semantic Kernel
- 5. Vector Embeddings y Búsqueda Semántica con .NET
- 6. Prompt Engineering: Mejores Prácticas para LLMs
- 7. Integración de Azure OpenAI en Aplicaciones .NET
- 8. Configuración de Temperatura y Tokens en Modelos LLM
- 9. Estrategias de Caché para Servicios de IA
- 10. Manejo de Errores en Aplicaciones de IA con .NET
- 11. Salida JSON Estructurada con LLMs
- 12. Testing de Servicios de IA en .NET
- 13. Inyección de Dependencias con Semantic Kernel
- 14. Comprensión de Consultas con Lenguaje Natural
- 15. Sistemas de Búsqueda Semántica en Producción
- 16. Configuración de HttpClient para Servicios de IA
- 17. Guardrails y Validación en Sistemas de IA
- 18. Workflows Multi-Paso con IA
- 19. Optimización de Costos en Aplicaciones de IA
- 20. Monitoreo y Observabilidad de Servicios de IA
- 21. Arquitectura de Microservicios con IA
- 22. Seguridad en Aplicaciones de IA
- 23. Implementación de Routers Conversacionales Inteligentes
- 24. Filtrado por Relevancia Semántica en Búsquedas
- 25. Normalización y Preprocesamiento de Datos para IA
Introducción
El filtrado por relevancia semántica mejora la calidad de resultados de búsqueda eliminando matches irrelevantes. En este tutorial aprenderás a implementar filtros inteligentes que combinan similitud vectorial con lógica de negocio.
Conceptos de Relevancia
Tipos de Relevancia
- Relevancia Vectorial: Similitud coseno entre embeddings
- Relevancia Léxica: Coincidencia de palabras clave
- Relevancia de Dominio: Match entre categoría de búsqueda y negocio
- Relevancia Contextual: Considerando ubicación, horarios, etc.
Implementación de Filtros
public class SemanticRelevanceFilter
{
private const double MinVectorScore = 0.35;
private const double MinLexicalOverlap = 0.2;
public async Task<List<SearchResult>> FilterRelevantResultsAsync(
string query,
List<SearchResult> candidates,
SearchContext context)
{
var queryTokens = TokenizeQuery(query);
var filtered = new List<SearchResult>();
foreach (var candidate in candidates)
{
var relevanceScore = CalculateRelevance(
query,
queryTokens,
candidate,
context);
if (relevanceScore.IsRelevant)
{
candidate.RelevanceScore = relevanceScore.Score;
candidate.RelevanceReason = relevanceScore.Reason;
filtered.Add(candidate);
}
}
return filtered.OrderByDescending(r => r.RelevanceScore).ToList();
}
private RelevanceScore CalculateRelevance(
string query,
HashSet<string> queryTokens,
SearchResult candidate,
SearchContext context)
{
// 1. Vector score check
if (candidate.VectorScore < MinVectorScore)
{
return RelevanceScore.NotRelevant("Vector score too low");
}
// 2. Lexical overlap check
var candidateTokens = TokenizeText(candidate.Description);
var overlap = CalculateLexicalOverlap(queryTokens, candidateTokens);
if (overlap < MinLexicalOverlap)
{
return RelevanceScore.NotRelevant("Insufficient lexical overlap");
}
// 3. Domain match check
if (context.Domain != null)
{
if (!MatchesDomain(candidate, context.Domain))
{
return RelevanceScore.NotRelevant("Domain mismatch");
}
}
// Calculate final score
var finalScore = (candidate.VectorScore * 0.6) +
(overlap * 0.3) +
(DomainBonus(candidate, context) * 0.1);
return RelevanceScore.Relevant(finalScore, "Passed all checks");
}
}
Mejores Prácticas
- Combinar múltiples señales de relevancia
- Ajustar thresholds basándose en métricas de calidad
- Logging detallado para debugging
- A/B testing de configuraciones
Palabras clave: semantic relevance, filtering, search quality, vector similarity, lexical overlap
Share this content: