En el capítulo anterior viste cómo ampliar un índice de Elasticsearch con un campo dense_vector que se llena de incrustaciones generadas por un modelo de Aprendizaje Automático. El modelo se instalaba localmente en tu computadora, y las incrustaciones se generaban a partir del código Python y se agregaban a los documentos antes de insertarlas en el índice.

En este capítulo vas a aprender sobre otro tipo de vector, el sparse_vector, que está diseñado para almacenar inferencias del modelo Elastic Learned Sparse EncodeR (ELSER). Las incrustaciones devueltas por este modelo son un conjunto de etiquetas (más apropiadamente llamadas características), cada una con un peso asignado.

En este capítulo también emplearás un método diferente para trabajar con modelos de Aprendizaje Automático, en el que el propio servicio Elasticsearch ejecuta el modelo y agrega las incrustaciones resultantes al índice a través de una canalización.

El

Al igual que el tipo de campo dense_vector que usaste en el capítulo anterior, el tipo sparse_vector puede almacenar inferencias devueltas por modelos de Aprendizaje Automático. Mientras que los vectores densos contienen un array de longitud fija de números que describen el texto fuente, un vector disperso almacena una correspondencia de características a pesos.

Vamos a agregar un campo de sparse_vector al índice. Este es un tipo que debe definir explícitamente en el mapeo de índice. A continuación puedes ver una versión actualizada del método create_index() con un nuevo campo llamado elser_embedding con este tipo.

Despliegue del modelo ELSER

Como se mencionó antes, en este ejemplo Elasticsearch tomará la propiedad del modelo y lo ejecutará automáticamente para generar incrustaciones, tanto al insertar documentos como al buscar.

El cliente Elasticsearch expone un conjunto de endpoints API para gestionar modelos de Aprendizaje Automático y sus pipelines. El siguiente método deploy_elser() en search.py sigue unos pasos para descargar e instalar el modelo ELSER v2, y para crear una tubería que lo emplee para llenar el campo de elser_embedding definido anteriormente.

Configurar ELSER para nosotros requiere varios pasos. Primero, se emplea el método ml.put_trained_model() de Elasticsearch para descargar ELSER. El argumento model_id identifica el modelo y la versión a descargar (ELSER v2 está disponible para Elasticsearch 8.11 en adelante). El campo input es la configuración requerida por este modelo.

Una vez descargado el modelo, debe desplegar. Para esto, se emplea el método ml.start_trained_model_deployment() , solo con el identificador del modelo a desplegar. Ten en cuenta que esta es una operación asincrónica, por lo que el modelo estará disponible para su uso tras un corto periodo de tiempo.

El paso final para configurar el uso de ELSER es definir una tubería para él. Se emplea una tubería para indicar a Elasticsearch cómo debe usar el modelo. A una tubería se le asigna un identificador y una o más tareas de procesamiento que realizar. La tubería creada arriba se llama elser-ingest-pipeline y tiene una única tarea de inferencia, lo que significa que cada vez que se agrega un documento, el modelo se ejecutará con en el input_field, y la salida se agregará al documento en el output_field. Para este ejemplo, el campo summary se emplea para generar las incrustaciones, como ocurre con las incrustaciones vectoriales densas del capítulo anterior. Las incrustaciones resultantes se escribirán en el elser_embedding campo vectorial disperso creado en la sección anterior.

Para facilitar la invocación de este método, agrega un comando deploy-elser a la aplicación Flask en app.py:

Ahora puedes desplegar ELSER en tu servicio Elasticsearch con el siguiente comando:

La última tarea de configuración consiste en vincular el índice con la canalización, de modo que el modelo se ejecute automáticamente cuando se insertan documentos en este índice. Esto se hace en la configuración del índice con una opción settings . Aquí tienes una actualización más del método create_index() para crear este enlace:

Con este cambio, ahora puedes regenerar el índice con soporte completo para inferencias ELSER:

¿Estás listo para crear experiencias de búsqueda de última generación?

No se logra una búsqueda suficientemente avanzada con los esfuerzos de uno. Elasticsearch está impulsado por científicos de datos, operaciones de ML, ingenieros y muchos más que son tan apasionados por la búsqueda como tú. Conectemos y trabajemos juntos para crear la experiencia mágica de búsqueda que te dará los resultados que deseas.

Pruébalo tú mismo