This entry is part 24 of 25 in the series Introducción a Microsoft Semantic Kernel

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

3. Implementación de Routers Conversacionales Inteligentes 5. Normalización y Preprocesamiento de Datos para IA

por David Cantón Nadales

David Cantón Nadales, ingeniero de software de Sevilla, España, es autor del bestseller Build Your own Metaverse with Unity. Reconocido como Microsoft MVP y Top Voices en Aplicaciones Móviles de LinkedIn. Con más de 20 años de experiencia, David ha liderado cientos proyectos a lo largo de su carrera, incluyendo videojuegos y aplicaciones de realidad virtual y aumentada con Oculus, Hololens, HTC Vive, DayDream y LeapMotion. Ha trabajado como Tech Lead en importantes multinacionales como Grupo Viajes El Corte Inglés y actualmente en SCRM Lidl del Grupo Schwarz. Fue embajador de la comunidad Samsung Dev Spain y organizador del Google Developers Group Sevilla. Durante el confinamiento por COVID-19, destacó como emprendedor social con la creación de Grita, una red social que facilitaba el apoyo psicológico entre personas. En 2022, ganó los Samsung Top Developers Awards.