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.
Mejorar la calidad de los resultados de búsqueda es esencial para ofrecer una experiencia de usuario eficiente. Una forma de optimizar las búsquedas es expandiendo automáticamente los términos consultados mediante sinónimos. Esto permite interpretar las consultas de forma más amplia, cubriendo variaciones lingüísticas y así mejorando la coincidencia de resultados.
Este blog explora cómo los grandes modelos de lenguaje (LLMs) pueden usar para identificar y generar sinónimos automáticamente, permitiendo que estos términos se carguen programáticamente en la API de sinónimos de Elasticsearch.
¿Cuándo usar sinónimos?
El uso de sinónimos puede ser una solución más rápida y rentable en comparación con la búsqueda vectorial. Su implementación es más sencilla ya que no requiere un conocimiento profundo de embeddings ni un proceso complejo de ingestión vectorial.
Además, el consumo de recursos es menor, ya que la búsqueda vectorial exige mayor capacidad de almacenamiento y memoria para incrustar, indexar y recuperar.
Otro aspecto importante es la regionalización de la búsqueda. Con los sinónimos, es posible adaptar términos según el idioma y las costumbres locales. Esto es útil en situaciones donde las incrustaciones pueden no coincidir con expresiones regionales o términos específicos de cada país. Por ejemplo, algunas palabras o siglas pueden tener significados diferentes según la región, pero los usuarios locales los tratan naturalmente como sinónimos. En Brasil, esto es bastante común. "Abacaxi" y "ananás" son la misma fruta (piña), pero el segundo término se usa más comúnmente en algunas regiones del noreste. De manera similar, el conocido "pão francês" en el sudeste puede ser conocido como "pão careca" en el noreste.
¿Cómo usar los LLMs para generar sinónimos?
Para obtener sinónimos automáticamente, podemos usar LLMs, que analizan el contexto de un término y sugieren variaciones apropiadas. Este enfoque permite expandir dinámicamente los sinónimos, cerciorando una búsqueda más amplia y precisa sin depender de un diccionario fijo.
En esta demostración, emplearemos un LLM para generar sinónimos de productos de comercio electrónico. Muchas búsquedas demuestran pocos o ningún resultado debido a las variaciones en los términos consultados. Con sinónimos, podemos resolver este problema. Por ejemplo, una búsqueda de "smartphone" puede abarcar diferentes modelos de teléfonos móviles, cerciorando que los usuarios encuentren los productos que buscan.
Prerrequisitos
Antes de empezar, necesitamos configurar el entorno y definir las dependencias necesarias. Emplearemos la solución proporcionada por Elastic para ejecutar Elasticsearch y Kibana localmente en Docker. El código estará escrito en Python, v3.9.6, con las siguientes dependencias:
Creación del índice de productos
Inicialmente, crearemos un índice de productos sin soporte de sinónimos. Esto nos permitirá validar consultas y luego compararlas con un índice que incluya sinónimos.
Para crear el índice, cargamos en masa un conjunto de datos de producto usando el siguiente comando en Kibana DevTools:
Generación de sinónimos con LLM
En este paso, emplearemos un LLM para generar sinónimos dinámicamente. Para lograrlo, integraremos la API de OpenAI, definiendo un modelo y un prompt apropiados. El LLM recibirá la categoría y el nombre del producto, cerciorando que los sinónimos sean relevantes en el contexto.
A partir del índice de productos creados, recuperaremos todos los artículos de la categoría "Electrónica" y enviaremos sus nombres al LLM. La salida esperada será algo así:
Con los sinónimos generados, podemos registrarlos en Elasticsearch usando la API de Sinónimos.
Gestión de sinónimos con la API de Sinónimos
La API de Sinónimos proporciona una forma eficiente de gestionar conjuntos de sinónimos directamente dentro del sistema. Cada conjunto de sinónimos consiste en reglas de sinónimos, donde un grupo de palabras se considera equivalente en las búsquedas.
Ejemplo de creación de un conjunto de sinónimos
Esto crea un conjunto llamado "mis-sinónimos-conjunto", donde "hola" y "hola" se tratan como equivalentes, así como "adiós" y "adiós".
Implementación de la creación de sinónimos para el catálogo de productos
A continuación se muestra el método responsable de construir un conjunto de sinónimos e insertarlo en Elasticsearch. Las reglas de sinónimos se generan a partir del mapeo de sinónimos sugerido por el LLM. Cada regla tiene un ID, correspondiente al nombre del producto en formato slug, y a la lista de sinónimos calculada por el LLM.
A continuación se muestra la carga útil de la solicitud para crear el conjunto de sinónimos:
Con el conjunto de sinónimos creado en el clúster, podemos pasar al siguiente paso, que es crear un nuevo índice con soporte de sinónimos usando el conjunto definido.
El código completo en Python con los sinónimos generados por LLM y la creación de conjuntos de sinónimos definida por la API de Sinónimos es el siguiente:
Creación de un índice con soporte de sinónimos
Se creará un nuevo índice donde todos los datos del índice de products serán reindexados. Este índice usará la synonyms_filter, que aplica la products-synonyms-set creada anteriormente.
A continuación se muestra el mapeo de índices configurado para usar sinónimos:
Reindexando el índice de
Ahora, usaremos la API Reindex para migrar los datos del índice de products al nuevo índice de products_02 , que incluye soporte para sinónimos. El siguiente código se ejecutó en Kibana DevTools:
Tras la migración, el índice de products_02 estará llenado y listo para validar búsquedas usando el conjunto de sinónimos configurado.
Validación de la búsqueda con sinónimos
Comparemos los resultados de búsqueda entre los dos índices. Ejecutaremos la misma consulta en ambos índices y validaremos si los sinónimos se están empleando para obtener resultados.
Buscar en el índice de
Emplearemos a Kibana para realizar búsquedas y analizar los resultados. En el menú de Analítica > Descubrimiento, crearemos una Vista de Datos para visualizar los datos de los índices que creamos.
Dentro de Discovery, haz clic en Vista de datos y define un nombre y un patrón de índice. Para el índice de "productos", usaremos el patrón de "productos". Luego, repetiremos el proceso para crear una nueva Vista de Datos para el índice "products_02", usando el patrón "products_02".

Con las Vistas de Datos configuradas, podemos volver a Analytics > Discovery y comenzar las validaciones.

Aquí, tras seleccionar productos DataView y buscar el término "tablet", no obtenemos resultados, aunque sabemos que existen productos como "Kindle Paperwhite" y "Apple iPad Air".

Buscar en el índice de
Al realizar la misma consulta en la Vista de Datos "products_synonyms", que soporta sinónimos, los productos se recuperaron con éxito. Esto demuestra que el conjunto de sinónimos configurado funciona correctamente, cerciorando que diferentes variaciones de los términos buscados devuelvan los resultados esperados.

Podemos lograr el mismo resultado ejecutando la misma consulta directamente en Kibana DevTools. Simplemente busca en el índice de products_02 usando la API de búsqueda de Elasticsearch:

Conclusión
La implementación de sinónimos en Elasticsearch mejoró la precisión y cobertura de las búsquedas en catálogos de productos. El diferenciador clave era el uso de un LLM, que generaba sinónimos automáticamente y contextualmente, eliminando la necesidad de listas predefinidas. El modelo analizó nombres y categorías de productos, cerciorando sinónimos relevantes para el comercio electrónico.
Además, la API de Sinónimos simplificó la gestión de diccionarios, permitiendo modificar dinámicamente los conjuntos de sinónimos. Con este enfoque, la búsqueda se volvió más flexible y adaptable a diferentes patrones de consulta de usuario.
Este proceso puede mejorar continuamente con nuevos datos y ajustes de modelos, cerciorando una experiencia de investigación cada vez más eficiente.
Referencias
Ejecuta Elasticsearch localmente
https://www.elastic.co/guide/en/elasticsearch/reference/current/run-elasticsearch-locally.html
Sinónimos API
https://www.elastic.co/guide/en/elasticsearch/reference/current/synonyms-apis.html




