Generar incrustaciones

En esta sección vas a conocer una de las opciones más convenientes disponibles para generar incrustaciones de texto, que se basa en el framework SentenceTransformers .

Trabajar con SentenceTransformers es la opción recomendada mientras exploras y te familiarizas con el uso de embeddings, ya que los modelos disponibles bajo este marco pueden instalar en tu computadora, funcionan razonablemente bien sin GPU y son gratis de usar.

Instalar SentenceTransformers

El framework SentenceTransformers se instala como un paquete en Python. Cerciórate de que tu entorno virtual en Python esté activado y luego ejecuta el siguiente comando en tu terminal para instalar este framework:

Como siempre, cada vez que agregas nuevas dependencias a tu proyecto es buena idea actualizar tu archivo de requisitos:

Selección de un modelo

La siguiente tarea es decidir qué modelo de aprendizaje automático usar para la generación de incrustaciones. Hay una lista de modelos preentrenados en la documentación. Como SentenceTransformers es un framework muy popular, también existen modelos compatibles creados por investigadores no directamente asociados con el framework. Para ver la lista completa de modelos que se pueden usar, puedes consultar la etiqueta SentenceTransformers en HuggingFace.

Para los fines de este tutorial no hay necesidad de darle demasiadas vueltas a la selección de modelos, ya que cualquier modelo es suficiente. La documentación de SentenceTransformers incluye la siguiente nota respecto a sus modelos preentrenados:

"Los modelos totalmente* se capacitaron con todos los datos de entrenamiento disponibles (más de 1.000 millones de pares de entrenamiento) y están diseñados como modelos de propósito general. El modelo totalmente mpnet base v2 ofrece la mejor calidad, mientras que el MiniLM-L6-v2 es cinco veces más rápido y sigue ofreciendo buena calidad."

Esto parece sugerir que su modelo all-MiniLM-L6-v2 es una buena opción que ofrece un buen compromiso entre velocidad y calidad, así que usemos este modelo. Localiza este modelo en la tabla y haz clic en el icono de "información" para ver algo de información sobre él.

Un detalle interesante que es bueno tener en cuenta sobre el modelo elegido es la longitud que tienen los embejos generados, o en otras palabras, cuántos números o dimensiones tendrán los vectores resultantes. Esto es importante porque afecta directamente a la cantidad de almacenamiento que necesitarás. En el caso de all-MiniLM-L6-v2, los vectores generados tienen 384 dimensiones.

Cargando el modelo

El siguiente código en Python demuestra cómo se carga el modelo. Puedes probar esto en un shell de Python.

La primera vez que hagas esto, el modelo se descargará e instalará en tu entorno virtual, por lo que la llamada puede tardar en regresar. Una vez instalado el modelo, instanciarlo no debería llevar mucho tiempo.

Generación de incrustaciones

Con el modelo instanciado, ya estás listo para generar una incrustación. Para ello, pasa el texto fuente al método model.encode() :

El resultado es un array con todos los números que componen la incrustación. Como recordarás, las incrustaciones generadas por el modelo elegido tienen 384 dimensiones, así que esta es la longitud del arreglo embedding .

¿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