Elastic Search: Crear una experiencia de búsqueda semántica
Visión general
Introducción a Elastic Search
Familiarízate con Elasticsearch mediante una visión general sobre cómo ingestar, y también ve tus datos con Elastic Cloud.
A medida que avanzas en Elastic y das los primeros pasos con la búsqueda de vectores, ten en cuenta que existen dos formas de búsqueda de vectores: "densa" (también conocida como búsqueda de vectores kNN) y "dispersa", como Learned Sparse Encoder de Elastic (ELSER).
Elastic ofrece una variedad de técnicas, comenzando con BM25, el estándar de la industria para la búsqueda textual. Proporciona correspondencia precisa para búsquedas específicas, buscando coincidencias exactas de palabras clave, y mejora con ajustes.
Elastic también ofrece el modelo Learned Sparse Encoder listo para usar para búsqueda semántica. Este modelo es superior en una variedad de sets de datos, como datos financieros, registros del clima y pares de pregunta-respuesta, entre otros. El modelo se desarrolló para brindar una relevancia excelente en todos los dominios, sin necesidad de ajustes adicionales.
Echa un vistazo a esta demostración interactiva para ver cómo los resultados de búsqueda son más relevantes cuando pruebas el modelo Learned Sparse Encoder de Elastic con el algoritmo BM25 textual de Elastic.
Además, Elastic también brinda soporte para vectores densos a fin de implementar la búsqueda por similitud en datos no estructurados más allá del texto, como videos, imágenes y audio.
La ventaja de la búsqueda semántica y búsqueda de vectores es que estas tecnologías permiten a los clientes usar lenguaje intuitivo en sus consultas de búsqueda. Por ejemplo, si desearas buscar directrices del lugar de trabajo sobre segundas fuentes de ingresos, podrías buscar "trabajo secundario", que es un término que no es probable que veas en un documento formal de Recursos Humanos.
En esta guía, demostraremos cómo crear una cuenta de Elastic Cloud, ingestar datos con el rastreador web de Elastic e implementar la búsqueda semántica con solo unos clics.
Incorpora tus datos
Crear una cuenta de Elastic Cloud
Comienza con una prueba de 14 días. Dirígete a cloud.elastic.co y crea una cuenta, luego sigue los pasos a continuación para conocer cómo iniciar tu primer stack de Elastic en cualquiera de las más de 50 regiones de todo el mundo en las que ofrecemos soporte.
Si haces clic en Edit settings (Editar configuración), puedes elegir un Proveedor Cloud, incluidos AWS, Microsoft Azure o Google Cloud. Una vez que selecciones tu Proveedor Cloud, podrás elegir la región relevante. A continuación, tienes la opción de elegir entre varios perfiles de hardware distintos para poder personalizar mejor el despliegue a fin de que se adapte a tus necesidades. Además, la versión más reciente de Elastic ya se preseleccionó por ti.
Mientras se está creando tu despliegue, se te dará un usuario y una contraseña. Asegúrate de copiar y descargar esto, lo necesitarás al instalar las integraciones.
Ingestar datos con el rastreador web de Elastic
Ahora que creaste tu despliegue, es momento de ingresar los datos en Elastic. Hagámoslo usando el rastreador web de Elastic. Primero, selecciona el mosaico Build a semantic search experience (Crear una experiencia de búsqueda semántica).
Luego, para configurar la búsqueda semántica, verás una página en la que puedes dar los primeros pasos en cualquiera de las opciones siguientes:
- Elastic Learned Sparse Encoder
- Búsqueda de vectores
- Enriquecimiento de NLP
Todas estas capacidades, y más, son parte de Elasticsearch Relevance Engine (ESRE).
A los fines de esta guía, veremos cómo configurar la búsqueda semántica con ambas: Elastic Learned Sparse Encoder y Vector Search.
NOTA: Si estás dando los primeros pasos con la búsqueda semántica y deseas buscar texto, prueba primero la guía Elastic Learned Sparse Encoder. La guía Búsqueda de vectores kNN puede ser más adecuada para los usuarios que cumplen con estos criterios:
- Tienen acceso a ciencia de datos o un conjunto de habilidades de ciencia de datos.
- Determinaron que el modelo de búsqueda semántica integrado Elastic Learned Sparse Encoder no cubrirá sus casos de uso.
- Tienen experiencia en la comparación de modelos de incrustación y, potencialmente, en el ajuste de modelos de ML.
- Saben que la búsqueda kNN rápida puede requerir importantes recursos de RAM.
Si estás listo para comenzar, selecciona tu método de preferencia para desarrollar una aplicación impulsada por la búsqueda de AI.
En ambos métodos, comenzarás por seleccionar Create an index (Crear un índice). Desde aquí, puedes seleccionar el rastreador web para comenzar a ingestar los datos.
Para configurar el rastreador web, echa un vistazo a este recorrido guiado o sigue las instrucciones a continuación:
Ahora crea un índice. A los fines de esta guía, estamos ingestando blogs de todo elastic.co.
Una vez que asignas un nombre a tu índice, selecciona Create index (Crear índice). A continuación, usa Validate Domain (Validar dominio) y luego selecciona Add domain (Agregar dominio).
Luego de agregar el domino, en la parte inferior derecha seleccionarás Edit (Editar) para poder agregar un subdominio, si es necesario.
Después, seleccionarás Crawl rules (Reglas de rastreo) y agregarás las reglas de rastreo como se muestra abajo.*
A continuación, cuando selecciones tu campo más adelante, algunos campos exceden el conteo de 512 tokens, como body_content. Debes aprovechar Extraction rules (Reglas de extracción) para filtrar solo las partes relevantes de los blogs.
Cuando seleccionas Extraction rules (Reglas de extracción), haz clic en Add content extraction rule (Agregar regla de extracción de contenido).
Luego, en Rule description (Descripción de la regla), asígnale un nombre que ayude a los demás a entender qué datos extraerá esta regla. A los fines de esta guía, llamémosla "main" (principal).
Ahora selecciona Apply to all URLs (Aplicar a todas las URL), luego Add content fields (Agregar campos de contenido) y aparecerá un elemento flotante. Completa y selecciona los criterios siguientes cuando aparezca el elemento flotante.
- Document field (Campo de documento):
- Field name (Nombre de campo): main (principal)
- Source (Fuente):
- Extract content from (Extraer contenido de): HTML element (Elemento HTML)
- CSS selector or XPath expression (Selector CSS o expresión XPath): main (principal)
- Content (Contenido)
- Use content from (Usar contenido de): Extracted Value (Valor extraído)
- Store extracted content as (Almacenar contenido extraído como): A string (Una cadena)
Una vez que hayas completado estos criterios, haz clic en Save (Guardar) y luego en Save rule (Guardar regla).
Trabaja con Elasticsearch y ESRE
Ingestar y buscar en los datos con Elastic Learned Sparse Encoder
Si revisaste el criterio recomendado anterior para dar los primeros pasos con la búsqueda de vectores y es tu método de preferencia, navega a Search your data using kNN vector search (Buscar en los datos con búsqueda de vectores kNN) a la izquierda y sigue las instrucciones.
De lo contrario, si prefieres usar Elastic Learned Sparse Encoder, el modelo de búsqueda semántica listo para usar de Elastic, echa un vistazo a las instrucciones siguientes.
Para hacerlo, seleccionarás Pipelines y Unlock your custom pipelines (Liberar tus pipelines personalizados) seleccionando Copy and customize (Copiar y personalizar) en la parte superior. A continuación, en Machine Learning Inference Pipelines, (Pipelines de inferencia de machine learning), selecciona Deploy (Desplegar) para descargar el modelo e instalarlo en tu despliegue de Elasticsearch.
Una vez que se despliega, selecciona Start single-threaded (Iniciar subproceso único) y luego + Add inference Pipeline (+ Agregar pipeline de inferencia). A continuación, harás lo siguiente:
- Seleccionar un pipeline nuevo o existente
- Asignarle un nombre
- Por último, en el menú desplegable Select trained ML Model (Seleccionar modelo de ML entrenado), seleccionar ELSER Text Expansion (Expansión de texto ELSER) y hacer clic en Continue (Continuar)
Ahora, debes seleccionar los campos en los que aplicarás la expansión de texto ELSER. Selecciona "title" (título) y "main" (principal) como campos de origen, y luego Add (Agregar).
A continuación, haz clic en Continue (Continuar).
Omite el paso Test your pipeline results (Probar los resultados del pipeline) haciendo clic en Continue (Continuar), luego usa Create pipeline (Crear pipeline).
Ahora que creaste tu pipeline, selecciona Crawl (Rastrear) en la esquina superior derecha y luego Crawl all domains on this index (Rastrear todos los dominios en este índice).
Ahora es momento de buscar la información que necesitas. Hay dos maneras recomendadas de hacerlo:
- Usando las herramientas de desarrollo
- Aprovechando la funcionalidad Search Application (Aplicación de búsqueda) como un endpoint para tu aplicación
Cuándo usar cada una:
- Si eres un desarrollador que está implementando la búsqueda (es decir, para tu aplicación web), debes usar las herramientas de desarrollo para probar y refinar los resultados de búsqueda desde tus datos de indexación.
- Si deseas crear un endpoint de búsqueda al que puedas enviar solicitudes de búsqueda desde tu propia aplicación y en el que puedas devolver los resultados de búsqueda, debes usar la funcionalidad Search Application (Aplicación de búsqueda).
Echa un vistazo a estos dos breves videos a continuación para ver un recorrido rápido que te mostrará cómo aprovechar las herramientas de desarrollo y la funcionalidad Search Application (Aplicación de búsqueda). También puedes aprender cómo hacerlo explorando este recorrido guiado.
Ingestar y buscar en los datos con búsqueda de vectores kNN
Al aprovechar Elastic, puedes utilizar la búsqueda de vectores kNN en todo tu entorno. Como se mencionó antes, la búsqueda de vectores kNN te permite buscar en otros datos además de texto, como imágenes o audio.
Una vez que hayas ingestado los datos con el rastreador web, deberás cargar un modelo de incrustación en Elasticsearch para generar vectores para tus datos. Echa un vistazo al video siguiente para aprender a hacerlo.
Para hacerlo, seleccionarás Pipelines y Unlock your custom pipelines (Liberar tus pipelines personalizados) seleccionando Copy and customize (Copiar y personalizar) en la parte superior. A continuación, en Machine Learning Inference Pipelines, (Pipelines de inferencia de machine learning), selecciona Deploy (Desplegar) para descargar el modelo e instalarlo en tu despliegue de Elasticsearch.
Una vez que se despliega, selecciona Start single-threaded (Iniciar subproceso único) y luego + Add inference Pipeline (+ Agregar pipeline de inferencia). A continuación, harás lo siguiente:
- Seleccionar un pipeline nuevo o existente
- Asignarle un nombre
- Por último, en el menú desplegable Select trained ML Model (Seleccionar modelo de ML entrenado), seleccionar Dense Vector Text Embedding (Incrustación de texto de vectores densos) y hacer clic en Continue (Continuar)
Ahora, debes seleccionar los campos en los que aplicarás la extensión de vectores densos. Como usas el rastreador web, tendrás campos que podrás seleccionar de manera predeterminada. A los fines de esta guía, seleccionemos title (título) para comenzar para un campo nuevo y luego Continue (Continuar).
A continuación, selecciona Continue (Continuar) y Create pipeline (Crear pipeline).
Ahora tendrás que actualizar el mapeo del campo dense_vector. (Nota: Con Elasticsearch versión 8.8+, este paso debería ser automático).
- En el menú de navegación, haz clic en Dev Tools (Herramientas de desarrollo). Es posible que debas hacer clic en Dismiss (Desestimar) en el elemento flotante, si es la primera vez que abres las herramientas de desarrollo.
- En Dev Tools (Herramientas de desarrollo), en la pestaña Console (Consola), actualiza el mapeo de nuestro campo objetivo de vectores kNN con el código siguiente. Simplemente debes pegarlo en el cuadro de código y hacer clic en la flechita hacia la derecha en la línea 1.
POST search-blogs/_mapping
{
"properties": {
"title-vector": {
"type": "dense_vector",
"dims": 768,
"index": true,
"similarity": "dot_product"
}
}
}
Asegúrate de reemplazar "search-blogs" con el nombre que le asignaste a tu índice. Además, "title-vector" es el nombre del campo en el que se almacenarán los vectores.
Ahora que creaste tu pipeline, selecciona Crawl (Rastrear) en la esquina superior derecha y luego Crawl all domains on this index (Rastrear todos los dominios en este índice).
Por último, es hora de ejecutar una búsqueda de vectores kNN para encontrar la información que necesitas. Para hacerlo, debes aprovechar las herramientas de desarrollo. Echa un vistazo al video siguiente para saber cómo hacerlo.
Pasos siguientes
Gracias por tomarte el tiempo de configurar la búsqueda semántica para tus datos con Elastic Cloud. A medida que inicias tu trayectoria con Elastic, debes comprender algunos componentes operativos, de seguridad y de datos que deberías gestionar como usuario al desplegar en todo el entorno.