24. Filtrado por Relevancia Semántica en Búsquedas

This entry is parte 24 de 25 in the series Introducción a Microsoft Semantic Kernel

Introducción a Microsoft Semantic Kernel

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

  1. Relevancia Vectorial: Similitud coseno entre embeddings
  2. Relevancia Léxica: Coincidencia de palabras clave
  3. Relevancia de Dominio: Match entre categoría de búsqueda y negocio
  4. 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

  1. Combinar múltiples señales de relevancia
  2. Ajustar thresholds basándose en métricas de calidad
  3. Logging detallado para debugging
  4. A/B testing de configuraciones

Palabras clave: semantic relevance, filtering, search quality, vector similarity, lexical overlap

Share this content:

Introducción a Microsoft Semantic Kernel

23. Implementación de Routers Conversacionales Inteligentes 25. Normalización y Preprocesamiento de Datos para IA