Búsqueda semántica con Pinecone

Bases de datos vectoriales para incrustaciones con Pinecone

James Chapman

Curriculum Manager, DataCamp

Motores de búsqueda semántica

  1. Genera embeddings e ingiere documentos en un índice de Pinecone
  2. Genera embeddings para la consulta del usuario
  3. Consulta el índice con la consulta embebida

búsqueda semántica

Bases de datos vectoriales para incrustaciones con Pinecone

Configurar Pinecone y OpenAI para búsqueda semántica

from openai import OpenAI
from pinecone import Pinecone, ServerlessSpec

client = OpenAI(api_key="OPENAI_API_KEY")
pc = Pinecone(api_key="PINECONE_API_KEY")


pc.create_index( name="semantic-search-datacamp",
dimension=1536,
spec=ServerlessSpec(cloud='aws', region='us-east-1') )
index = pc.Index("semantic-search-datacamp")
Bases de datos vectoriales para incrustaciones con Pinecone

Ingestar documentos en el índice de Pinecone

import pandas as pd
import numpy as np
from uuid import uuid4

df = pd.read_csv('squad_dataset.csv')
| id | text                                              | title             |
|----|---------------------------------------------------|-------------------|
| 1  | Arquitectónicamente, la escuela tiene un carác... | Universidad de... |
| 2  | La Facultad de Ingeniería se estableció en...     | Universidad de... |
| 3  | Tras la disolución de Destiny's Child en...       | Beyoncé           |
| 4  | Arquitectónicamente, la escuela tiene un carác... | Universidad de... |
Bases de datos vectoriales para incrustaciones con Pinecone

Ingestar documentos en el índice de Pinecone

batch_limit = 100


for batch in np.array_split(df, len(df) / batch_limit):
metadatas = [{"text_id": row['id'], "text": row['text'], "title": row['title']} for _, row in batch.iterrows()]
texts = batch['text'].tolist()
ids = [str(uuid4()) for _ in range(len(texts))]
response = client.embeddings.create(input=texts, model="text-embedding-3-small") embeds = [np.array(x.embedding) for x in response.data]
index.upsert(vectors=zip(ids, embeds, metadatas), namespace="squad_dataset")
Bases de datos vectoriales para incrustaciones con Pinecone

Ingestar documentos en el índice de Pinecone

index.describe_index_stats()
{'dimension': 1536, 'index_fullness': 0.02,
 'namespaces': {'squad_dataset': {'vector_count': 2000}},
 'total_vector_count': 2000}
Bases de datos vectoriales para incrustaciones con Pinecone

Consultar con Pinecone

query = "To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France?"

query_response = client.embeddings.create( input=query, model="text-embedding-3-small") query_emb = query_response.data[0].embedding
retrieved_docs = index.query(vector=query_emb, top_k=3, namespace=namespace, include_metadata=True)
Bases de datos vectoriales para incrustaciones con Pinecone

Consultar con Pinecone

for result in retrieved_docs['matches']:
    print(f"{round(result['score'], 2)}: {result['metadata']['text']}")
0.41: Arquitectónicamente, la escuela tiene carácter católico. En lo alto de la
cúpula dorada del Edificio Principal hay una estatua de la Virgen María...

0.3: Por su identidad católica, en el campus hay varios edificios religiosos.
El edificio Old College se ha convertido en uno de los dos seminarios...

0.29: Dentro del escudete blanco, las cinco quinas (pequeños escudos azules)
con sus cinco bezantes blancos que representan las cinco llagas...
Bases de datos vectoriales para incrustaciones con Pinecone

¡Hora de construir!

Bases de datos vectoriales para incrustaciones con Pinecone

Preparing Video For Download...