Semantische Suche mit Pinecone

Vektordatenbanken für Einbettungen mit Pinecone

James Chapman

Curriculum Manager, DataCamp

Semantische Suchmaschinen

  1. Dokumente einbetten und in einen Pinecone-Index laden
  2. Nutzeranfrage einbetten
  3. Mit der eingebetteten Anfrage den Index abfragen

semantische Suche

Vektordatenbanken für Einbettungen mit Pinecone

Pinecone und OpenAI für semantische Suche einrichten

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")
Vektordatenbanken für Einbettungen mit Pinecone

Dokumente in den Pinecone-Index laden

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

df = pd.read_csv('squad_dataset.csv')
| id | text                                              | title             |
|----|---------------------------------------------------|-------------------|
| 1  | Architektonisch hat die Schule einen katholisc... | University of ... |
| 2  | Das College of Engineering wurde gegründet im... | University of ... |
| 3  | Nach der Auflösung von Destiny's Child im Jahr... | Beyonce           |
| 4  | Architektonisch hat die Schule einen katholisc... | University of ... |
Vektordatenbanken für Einbettungen mit Pinecone

Dokumente in den Pinecone-Index laden

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")
Vektordatenbanken für Einbettungen mit Pinecone

Dokumente in den Pinecone-Index laden

index.describe_index_stats()
{'dimension': 1536, 'index_fullness': 0.02,
 'namespaces': {'squad_dataset': {'vector_count': 2000}},
 'total_vector_count': 2000}
Vektordatenbanken für Einbettungen mit Pinecone

Abfragen mit 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)
Vektordatenbanken für Einbettungen mit Pinecone

Abfragen mit Pinecone

for result in retrieved_docs['matches']:
    print(f"{round(result['score'], 2)}: {result['metadata']['text']}")
0.41: Architektonisch hat die Schule einen katholischen Charakter. Auf der goldenen 
Kuppel des Hauptgebäudes steht eine goldene Statue der Jungfrau Maria...

0.3: Wegen ihrer katholischen Identität gibt es auf dem Campus mehrere religiöse 
Gebäude. Das Old College ist eines von zwei Priesterseminaren...

0.29: Im weißen Schild die fünf Quinas (kleine blaue Schilde) mit 
je fünf weißen Bezants, die die fünf Wunden darstellen...
Vektordatenbanken für Einbettungen mit Pinecone

Zeit, es zu bauen!

Vektordatenbanken für Einbettungen mit Pinecone

Preparing Video For Download...