No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Búsqueda Vectorial con Embeddings en Azure OpenAI Service

12/21
Recursos

¿Qué es la búsqueda vectorial y para qué se utiliza?

La búsqueda vectorial representa una metodología avanzada para encontrar similitudes entre textos. En lugar de hacer coincidir palabras textualmente, utiliza una métrica vectorial. Al emplear el servicio Azure OpenAI y su modelo ADA, podemos generar representaciones vectoriales de textos, facilitando encontrar similitudes aun cuando las palabras específicas no coincidan. Este enfoque es revolucionario para consultas o exploraciones en datos propios, permitiendo así identificar textos similares con un enfoque más intuitivo y eficiente.

¿Cómo se configura la búsqueda vectorial con el modelo ADA?

Para implementar la búsqueda vectorial, se necesita configurar adecuadamente el modelo ADA en Azure, un modelo que no está disponible en todas las regiones. Se sugiere desplegarlo en la región este de los Estados Unidos. A partir de ahí, el proceso de configuración incluye los siguientes pasos:

  1. Setup de librerías y paquetes requeridos: Se cargan y configuran las librerías necesarias para operar con Azure y OpenAI.
  2. Carga de variables de entorno: Asegura que todas las credenciales y configuraciones se mantengan seguras.
  3. Consulta del dataset: Para fines de esta tutorial, se utiliza un dataset que contiene recetas de cocina, específico para generar representaciones vectoriales aplicando embeddings.

¿Cómo se lleva a cabo el proceso de tokenización y embeddings?

Una parte crucial del proceso es tokenizar el dataset para manejar eficazmente el texto completo. Esta tokenización se realiza con la librería TickToken. Una vez tokenizado, se procede a generar embeddings:

  • Tokenización: Fragmenta el texto en componentes manejables.
  • Embeddings de textos: Una función recibe el texto para transformarlo en una representación vectorial. Este vector sirve como base para la búsqueda vectorial.
# Ejemplo de un código para generar embeddings
def generar_embeddings(texto):
    # función que tokeniza y genera la representación vectorial del texto
    tokens = tokenizar(texto)
    embedding_vector = modelo_ada.generar_embedding(tokens)
    return embedding_vector

¿Cómo se aplica el modelo en el dataset?

Una vez que se ha generado la representación vectorial para el conjunto de datos, el siguiente paso implica realizar búsquedas vectoriales reales. Este proceso incluye:

  • Generación de embeddings para todo el dataset: Se convierte cada línea del dataset en un vector.
  • Guardado de representaciones vectoriales: Estas se almacenan en un archivo .csv para futuras consultas.

Se tiene entonces un dataset enriquecido con representaciones vectoriales que permite generar búsquedas de similitudes entre consultas y datos.

¿Cómo realizar búsquedas y evaluar similitudes textuales?

Puedes implementar una función que, dado un texto de entrada, genera una representación vectorial y la compara con cada uno de los elementos del dataset. Esta comparación revela qué textos o recetas son más similares al texto de entrada.

# Ejemplo de función para buscar similitudes
def buscar_similitudes(texto_entrada, dataset_vectorial):
    vector_entrada = generar_embeddings(texto_entrada)
    resultados = []
    for vector in dataset_vectorial:
        similitud = calcular_similitud(vector_entrada, vector)
        if coincidencia_similitud(similitud):
            resultados.append(vector)

    return resultados

Este proceso ayuda a encontrar, por ejemplo, recetas que más se parecen a "chocolate and berries" sin que en las recetas se deba mencionar específicamente esas palabras.

Recomendaciones y motivación para la implementación de búsqueda vectorial

Llevar a cabo implementaciones de búsqueda vectorial abre un abanico de posibilidades para el análisis de datos y la búsqueda de información relevante. Implementar la búsqueda vectorial en tus propios proyectos permite:

  • Exploración rica de datos: Aprovechar patrones y similitudes más allá del texto literal.
  • Consultas más humanas: Emplear lenguaje natural para consultas.
  • Aumento en la precisión: Encontrar información relevante utilizando el vector de forma más eficiente.

Experimenta con tus propios datos y descubre el poder de las búsquedas vectoriales. ¡Sigue aprendiendo e innovando con herramientas que transforman el análisis de información!

Aportes 6

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Para los que usen la biblioteca de la API de OpenAI Python 1.x les recomiendo ajustar su código según esta documentación:
1.- https://learn.microsoft.com/es-es/azure/ai-services/openai/tutorials/embeddings?tabs=python-new%2Ccommand-line&pivots=programming-language-python.

2.- https://github.com/openai/openai-python/discussions/742

**Introducción:** La inteligencia artificial ha revolucionado nuestra forma de interactuar con la información. En este texto, argumentaremos cómo la búsqueda vectorial, utilizando el modelo Hada disponible en Europa NI service, cambia la forma en que evaluamos la similitud entre textos. **Definición de Búsqueda Vectorial:** La búsqueda vectorial es una herramienta que permite explorar y buscar datos propios. En lugar de buscar coincidencias de palabras, la búsqueda vectorial genera representaciones vectoriales de nuestros datos para encontrar textos similares basándose en medidas vectoriales. **El Modelo Hada:** El modelo Hada es un algoritmo de inteligencia artificial que genera representaciones vectoriales de textos. Este modelo está disponible en Europa NI service y se utiliza para procesar grandes volúmenes de texto, generando un dataset basado en representaciones vectoriales. Es importante mencionar que el modelo Hada no está disponible en todas las regiones, por lo que para este ejemplo, se ha desplegado un modelo en la región este de los Estados Unidos. **Implementación de la Búsqueda Vectorial:** El proceso de implementación de la búsqueda vectorial comienza con la tokenización del texto, seguido de la generación de representaciones vectoriales utilizando el modelo Hada. Una vez obtenida la representación vectorial, se puede hacer una comparación con otros textos del dataset. **Ejemplo de Búsqueda Vectorial:** Un ejemplo práctico de la búsqueda vectorial es la receta de cocina. Se puede generar una representación vectorial de una receta y luego buscar recetas similares en el dataset. La búsqueda vectorial permite encontrar recetas que pueden ser consideradas similares sin necesidad de que coincidan las palabras. **Conclusión:** La búsqueda vectorial, con la ayuda del modelo Hada, es una herramienta poderosa para la exploración y búsqueda de datos. A través de la generación de representaciones vectoriales, podemos encontrar textos similares basados en medidas vectoriales en lugar de coincidencias de palabras. Esto nos permite hacer consultas en lenguaje natural y obtener resultados precisos y relevantes.
### Utilización de Embeddings para Búsquedas Vectoriales Los embeddings son representaciones numéricas de datos que capturan la semántica o el significado del texto, imágenes u otros tipos de datos. Estos embeddings pueden ser utilizados para realizar búsquedas vectoriales, que son búsquedas basadas en la similitud semántica en lugar de coincidencias exactas de palabras clave. Aquí te explico cómo se utilizan los embeddings para búsquedas vectoriales y algunas aplicaciones prácticas. ### Proceso de Búsqueda Vectorial 1. **Vectorización de Datos**: * Los datos (texto, imágenes, etc.) son convertidos en vectores numéricos utilizando modelos de embeddings. Por ejemplo, puedes usar el modelo `text-embedding-ada-002` de Azure OpenAI para convertir texto en vectores. 2. **Creación de un Índice de Búsqueda**: * Los vectores generados se almacenan en un índice de búsqueda vectorial. Este índice permite realizar búsquedas eficientes basadas en la similitud de vectores. Puedes usar técnicas como HNSW (Hierarchical Navigable Small World) para indexar los embeddings y facilitar la búsqueda de vecinos más cercanos. 3. **Consulta y Recuperación**: * Cuando se realiza una consulta, el texto de la consulta también se convierte en un vector utilizando el mismo modelo de embeddings. Luego, se busca en el índice para encontrar los vectores más similares al vector de la consulta. La similitud se puede medir utilizando métricas como la similitud coseno o la distancia Euclidiana. ### Aplicaciones de Búsquedas Vectoriales 1. **Búsqueda Semántica**: * Permite buscar documentos que son semánticamente similares a una consulta, incluso si no contienen las mismas palabras clave exactas. Esto es especialmente útil en sistemas de búsqueda avanzados como Google. 2. **Recomendaciones de Productos**: * Los sistemas de recomendación pueden utilizar embeddings para analizar las preferencias de los usuarios y sugerir productos similares. Por ejemplo, Amazon utiliza embeddings para recomendar productos basados en compras y comportamientos de navegación previos. 3. **Análisis de Sentimientos**: * Los embeddings pueden ayudar a codificar el tono emocional del texto, lo que permite a los modelos determinar si el contenido es positivo, negativo o neutral. Esto es útil para analizar opiniones en redes sociales. 4. **Clasificación de Texto**: * Los embeddings convierten el texto en vectores numéricos, lo que permite una clasificación eficiente en categorías predefinidas. Por ejemplo, Gmail utiliza clasificación de texto para ordenar correos electrónicos en categorías como primario, social y promociones. 5. **Búsqueda Multimodal**: * Puedes combinar embeddings de texto e imágenes para realizar búsquedas en un espacio de embeddings que incluye ambos tipos de contenido. Esto es útil para aplicaciones que requieren búsqueda de contenido visual y textual. ### Ejemplo Práctico Aquí tienes un ejemplo de cómo usar embeddings de Azure OpenAI con una biblioteca de búsqueda vectorial en .NET: ```c# using OpenAI; using Build5Nines.SharpVector.OpenAI; // Configura la conexión con Azure OpenAI var openAIKey = "xxxxxxxxxx"; var modelName = "text-embedding-ada-002"; var openAIClient = new OpenAIClient(openAIKey); var embeddingClient = openAIClient.GetEmbeddingClient(modelName); // Inicializa la base de datos vectorial en memoria con el cliente de embeddings var vectorDatabase = new BasicOpenAIMemoryVectorDatabase(embeddingClient); // Agrega datos al índice vectorDatabase.Add("This is an example sentence."); vectorDatabase.Add("Sentence embeddings help in capturing the meaning of sentences."); // Realiza una consulta de búsqueda var query = "What are sentence embeddings?"; var results = vectorDatabase.Search(query, topK: 2); foreach (var result in results) { Console.WriteLine(result.Text); } ````using OpenAI;` `using Build5Nines.SharpVector.OpenAI;` `// Configura la conexión con Azure OpenAI` `var openAIKey = "xxxxxxxxxx";` `var modelName = "text-embedding-ada-002";` `var openAIClient = new OpenAIClient(openAIKey);` `var embeddingClient = openAIClient.GetEmbeddingClient(modelName);` `// Inicializa la base de datos vectorial en memoria con el cliente de embeddings` `var vectorDatabase = new BasicOpenAIMemoryVectorDatabase(embeddingClient);` `// Agrega datos al índice` `vectorDatabase.Add("This is an example sentence.");` `vectorDatabase.Add("Sentence embeddings help in capturing the meaning of sentences.");` `// Realiza una consulta de búsqueda` `var query = "What are sentence embeddings?";` `var results = vectorDatabase.Search(query, topK: 2);` `foreach (var result in results)` `{` ` Console.WriteLine(result.Text);` `}` Este ejemplo utiliza el modelo `text-embedding-ada-002` de Azure OpenAI para generar embeddings de texto y luego realiza una búsqueda en una base de datos vectorial en memoria. ### Conclusión Los embeddings son una herramienta poderosa para realizar búsquedas vectoriales, permitiendo la recuperación de datos basada en similitud semántica. Esta capacidad es esencial para aplicaciones que requieren una comprensión profunda del contexto y el significado, como búsqueda semántica, recomendaciones y análisis de sentimientos.
![](https://static.platzi.com/media/user_upload/image-9a04042e-6da6-437a-b7d0-f3dab2e0611d.jpg)
Errrrr! ![](https://static.platzi.com/media/user_upload/image-bedbb495-0037-4840-8dd4-85ce998f3f59.jpg)
Es importante tener en cuenta que no siempre el ENGINE tiene el nombre de text-embedding-ada-002, siempre depende del nombre de la implementación en azure, si la implementación (que esta configurada desde azure con text-embedding-ada-002) se llama PEPITO, debe ir de la siguiente forma: ![](https://static.platzi.com/media/user_upload/image-49688889-5715-4765-9cee-a4198235c66e.jpg)