¿Cómo funcionan los embeddings?

1

Cómo Entender y Aplicar Embeddings en IA: De Teoría a Práctica

2

Introducción a One-Hot Encoding y TF-IDF en IA

3

Representación Vectorial de Palabras

4

Evaluación de Similitudes Semánticas: Métodos y Aplicaciones

Quiz: ¿Cómo funcionan los embeddings?

Creación de embeddings

5

Creación y entrenamiento de modelos Word2Vec con Gensim

6

Procesamiento y Limpieza de Datos para IA con Word2Vec y Gensim

7

Entrenamiento de Modelos Word2Vec con GenSim y Análisis de Similitud

8

Word2Vec: Entrenando IA para Comprender el Lenguaje

Quiz: Creación de embeddings

Usando embeddings preentrenados

9

Uso práctico de Sentence Transformers en procesamiento de textos

10

Análisis Semántico: Buscar Textos con Sentence Transformers

11

Manejo de Embeddings con OpenAI: API, Instalación y Datasets

12

Manejo y Visualización de Embeddings con OpenAI: Guía Práctica

13

Creación de un Motor de Búsqueda Semántico con Python

14

Transformación de Texto a Embeddings con Sentence Transformer

Quiz: Usando embeddings preentrenados

Bases de datos vectoriales

15

Qué es y cómo usar una base de datos vectorial

16

Gestión de Bases de Datos Vectoriales con ChromaDB: Instalación y Uso

17

Generación y manejo de embeddings en Chroma con Sentence Transformer

18

Consultas avanzadas y filtrado en bases de datos con Chroma

19

Cargar colección de Chroma previamente creada

20

Configuración y Uso de Pinecone: Desde la Instalación hasta la Inserción de Datos

21

Optimización de Ingesta de Datos en Pinecone: Procesos y Estrategias

22

Consultas Avanzadas en Pinecone: De Texto a Vector y Filtros

23

Carga de índices en Pinecone: Gestión eficiente en la nube

24

Carga de embeddings en Pinecone para búsqueda semántica

25

Creación de buscador semántico con Gradio y Sentence Transformer

Quiz: Bases de datos vectoriales

Conclusiones

26

Potenciando los LLMs: Integración de Embeddings y Datos Vectoriales

No tienes acceso a esta clase

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

Consultas Avanzadas en Pinecone: De Texto a Vector y Filtros

22/26
Recursos

¿Cómo consultar el índice y realizar búsquedas en Pinecone?

Para trabajar eficazmente con el índice creado en Pinecone, es necesario saber cómo realizar consultas. En este contexto, el objetivo es utilizar un query para buscar películas con una trama de viajes en el tiempo. El dataset de películas sirve como base, y conviene recordar que no podemos enviar el texto directamente a Pinecone.

Primero debemos convertir el texto en un vector de embeddings con Sentence Transformer, una herramienta de código abierto que transforma el texto en un formato que Pinecone puede procesar:

query_vector = model.encode(query).tolist()

Una vez obtenido el query_vector, estemos listos para enviarlo a Pinecone y obtener resultados basados en la similitud del coseno, que es la métrica de distancia implementada al crear el índice.

¿Cómo enviar la consulta a Pinecone?

Procedamos a hacer la consulta utilizando el índice creado, especificando que queremos los mejores tres resultados y que incluyan metadatos:

responses = index.query(
    vector=query_vector,
    top_k=3,
    include_metadata=True
)

Podemos visualizar las respuestas, que mostrarán las coincidencias más relevantes. Identificaremos trayectorias de personaje y elementos narrativos comunes.

¿Cómo aplicar filtros avanzados a las consultas?

En Pinecone, podemos utilizar filtros sobre la metada para refinar más las búsquedas. Los filtros son similares a consultas en las bases de datos, y utilizan sintaxis JSON para identificar las especificaciones. Por ejemplo, si deseamos filtrar por el género o el año, podemos hacerlo como sigue:

filter = {
    "genre": {"$eq": "Documentary"},
    "year": 2019
}

responses = index.query(
    vector=query_vector,
    top_k=3,
    include_metadata=True,
    filter=filter
)

En este ejemplo, únicamente se obtendrán resultadps donde el género es documental y el año es 2019.

Ejemplo de consulta con exclusión de géneros

Supongamos que queremos excluir ciertos géneros del resultado de nuestra búsqueda. Podemos utilizar operadores de filtrado como $ne (no igual) para indicar que no deseamos incluir películas de géneros como "Animation", "Adventure", o "Comedy":

filter = {
    "genre": {"$ne": ["Animation", "Adventure", "Comedy"]}
}

responses = index.query(
    vector=query_vector,
    top_k=3,
    include_metadata=True,
    filter=filter
)

Este código excluye géneros específicos del resultado. Comparando con una consulta sin filtros, podemos ver cómo los resultados cambian, refinando las opciones disponibles.

¿Cómo utilizar operadores y tipos de datos correctamente?

Al manejar operadores como $gt (mayor que), es crucial identificar el tipo de dato correcto: numéricos sí, texto no. Por ejemplo, no podríamos evaluar si un texto es mayor a otro, ya que no es un valor medible cuantitativamente. Los operadores adecuados aseguran resultados lógicos y consistentes. Entiende qué operadores soporta cada tipo de dato que gestionas en tus consultas.

En resumen, familiarizarse con la transformación de datos a vectores, el uso de filtros, y la correcta aplicación de operadores asegurarán que tus consultas Pinecone sean eficientes y precisas. Experimenta con otras características del dataset, y explora diferentes campos que puedan brindar más descubrimiento y entendimiento de los datos. Con cada consulta, mejorarás tus habilidades, permitiéndote manejar datos complejos de manera más efectiva. ¡Continúa aprendiendo!

Aportes 2

Preguntas 0

Ordenar por:

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

Hice la consulta con el mismo query, pero filtrando de que el rating de IMDB sea mayor a 9 y que el número de votos sea al menos 2 millones. El resultado de la búsqueda solo me arroja una película que al parecer es sobre un viaje, pero no en el tiempo.

query = "a history of time travel"
query_vector = model.encode(query).tolist()

response = index.query(
    vector = query_vector,
    top_k = 3,
    include_metadata = True,
    filter = {
        "IMDB_Rating": {'$gt': 9},
        "No_of_Votes": {'$gte': 2000000},
    }
)
response

Respuesta:

{'matches': [{'id': '0',
              'metadata': {'Certificate': 'A',
                           'Director': 'Frank Darabont',
                           'Genre': 'Drama',
                           'Gross': '28,341,469',
                           'IMDB_Rating': 9.3,
                           'Meta_score': 80.0,
                           'No_of_Votes': 2343110.0,
                           'Overview': 'Two imprisoned men bond over a number '
                                       'of years, finding solace and eventual '
                                       'redemption through acts of common '
                                       'decency.',
                           'Poster_Link': 'https://m.media-amazon.com/images/M/MV5BMDFkYTc0MGEtZmNhMC00ZDIzLWFmNTEtODM1ZmRlYWMwMWFmXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UX67_CR0,0,67,98_AL_.jpg',
                           'Released_Year': '1994',
                           'Runtime': '142 min',
                           'Series_Title': 'The Shawshank Redemption',
                           'Star1': 'Tim Robbins',
                           'Star2': 'Morgan Freeman',
                           'Star3': 'Bob Gunton',
                           'Star4': 'William Sadler'},
              'score': 0.178320587,
              'values': []}],
 'namespace': ''} 
Ya que tenemos los datos en pinecone como embeddings, al momento de hacer un query, también debe de ser un embedding para que pueda determinar las distancias y encontrar el resultado más acertado.