Elasticsearch está repleto de características nuevas que te ayudarán a desarrollar las mejores soluciones de búsqueda para tu caso de uso. Aprende a ponerlas en práctica en nuestro webinar práctico sobre crear una experiencia moderna de búsqueda con IA. También puedes iniciar una prueba gratuita en el cloud o prueba Elastic en tu máquina local ahora mismo.
La búsqueda semántica ha abierto un mundo de oportunidades para la relevancia en la búsqueda. Los modelos dispersos y densos de alta calidad, como ELSER, E5 y Jina Embedding v4, devuelven resultados relevantes basados en el significado de las palabras, en lugar de la coincidencia de palabras clave. Sin embargo, la búsqueda semántica a veces devuelve resultados irrelevantes al final o para búsquedas que carecen de resultados relevantes en el índice. Esta propiedad de los modelos dispersos y densos puede confundir a los usuarios o desperdiciar valiosos tokens para los modelos de lenguaje grandes (LLM).
En este artículo, aprenderás cómo puedes utilizar el parámetro de puntuación mínima para aumentar la precisión de tus resultados de búsqueda semántica. Si deseas probar los ejemplos en esta publicación de blog, ve al cuaderno de Jupyter asociado.
Antecedentes: Precisión y recuperación
En la búsqueda, la relevancia, la precisión y la recuperación son conceptos clave. Se recomienda encarecidamente a todo lector que no esté familiarizado que se interiorice sobre estos conceptos. A continuación se presenta un resumen.
- Precisión: La fracción de resultados de búsqueda devueltos que son relevantes para el usuario.
- Recuerda: La fracción de todos los documentos relevantes del corpus que se incluyen en el conjunto de resultados de búsqueda.
O, en otras palabras, la precisión está devolviendo solo resultados relevantes; y la recuperación está devolviendo todos los resultados relevantes. Como puedes imaginar, estos son, a menudo, requisitos contradictorios. La búsqueda semántica tiende a tener una recuperación muy alta, pero puede tener dificultades con la precisión. Continúa leyendo para saber cómo moverte por esta propiedad.
Introducción del parámetro de puntaje mínimo
El parámetro "min_score" nos permite mejorar la precisión al establecer una puntuación mínima, lo que truncará el conjunto de resultados y eliminará cualquier coincidencia con una puntuación inferior al umbral definido. A continuación se muestra un ejemplo sencillo:
Normalizando la puntuación.
Establecer una puntuación mínima está bien; sin embargo, no todos los modelos semánticos devuelven una puntuación adecuada para un umbral estático. ELSER, por ejemplo, devuelve una puntuación que no tiene límite. Algunas puntuaciones de un modelo denso están estrechamente agrupadas y solo tienen sentido en el contexto de la consulta específica.
Para la mayoría de los casos de búsqueda semántica, recomendamos usar un enfoque de normalización antes de aplicar el "min_score". La normalización garantiza que la puntuación del documento esté dentro de un intervalo definido. Elasticsearch ofrece dos normalizadores, "l2_norm" y "minmax". El más comúnmente usado es "minmax", ya que es fácil de entender y funciona bien en muchos escenarios. Las propiedades clave de "minmax" incluyen:
- Las puntuaciones de los documentos se distribuyen entre 0 y 1.
- El documento con la puntuación más alta siempre tiene una puntuación de 1.
- El documento con la puntuación más baja siempre tiene una puntuación de 0.
- Esto puede hacer que sea menos adecuado para la búsqueda por palabras clave. Consulta la sección “Búsqueda híbrida” para más información.
A continuación se muestra un ejemplo de una consulta semántica normalizada con min_score. El tamaño de la ventana de clasificación se ha aumentado a 500 para permitirnos devolver una lista más larga de resultados de búsqueda, comenzando en 100.
El tamaño se ha establecido en un valor más alto de lo que normalmente se ve en producción. Esto es para que podamos inspeccionar la calidad de los resultados de búsqueda y ajustar los resultados.
Búsqueda híbrida usando el retriever lineal
Para la búsqueda híbrida, el enfoque más sencillo es normalizar todos las puntuaciones, asignar ponderaciones y aplicar una puntuación mínima. Ten en cuenta que al elegir ponderaciones con una suma de 1, mantienes la puntuación total dentro de un rango de 0–1. Esto hace que sea más fácil entender las puntuaciones finales y afinar min_score. A continuación se muestra un ejemplo:
Búsqueda híbrida usando RRF.
Con BM25, a menudo controlamos la precisión por otros medios, usando, por ejemplo, el operador de AND o minimum_should_match. Además, las consultas que consisten en términos únicos, precisos y poco frecuentes naturalmente generarán resultados con pocos resultados de búsqueda, a menudo todos muy relevantes. Esto puede llevar a:
- Los resultados más lejanos en el resultado reciben una puntuación normalizada baja en el recuperador BM25, incluso si la puntuación absoluta de BM25 está cerca de las puntuaciones más altas.
- Al agregar una puntuación BM25 muy baja a la puntuación semántica, el total puede aproximarse a la puntuación semántica.
- La falta de contribución de la puntuación BM25 puede hacer que el documento sea descartado por el
min_score threshold.
Como solución, podemos utilizar la fusión de rangos recíprocos (RRF) para combinar BM25 y los resultados semánticos. RRF consigue sortear el desafío de comparar puntuaciones de diferentes algoritmos de búsqueda al colocar el foco en la posición en cada conjunto de resultados. En este escenario, la min_score solo se aplica al recuperador semántico.
Conclusión
Al usar min_score, hemos demostrado cómo podemos reducir el número de falsos positivos en nuestros conjuntos de resultados causados por la alta recuperación de algoritmos de búsqueda semántica. Para saber más sobre los recuperadores, consulta esta publicación de blog y la documentación de Elasticsearch.




