Consultas Avanzadas en Pinecone: De Texto a Vector y Filtros

Clase 22 de 26Curso de Embeddings y Bases de Datos Vectoriales para NLP

Resumen

¿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!