Pinecone ile anlamsal arama

Pinecone ile Vektör Veritabanları ve Embeddings

James Chapman

Curriculum Manager, DataCamp

Anlamsal arama motorları

  1. Belgeleri gömle ve Pinecone indeksine al
  2. Kullanıcı sorgusunu göm
  3. Gömülü sorgu ile indeksi sorgula

anlamsal arama

Pinecone ile Vektör Veritabanları ve Embeddings

Anlamsal arama için Pinecone ve OpenAI kurulumu

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")
Pinecone ile Vektör Veritabanları ve Embeddings

Belgeleri Pinecone indeksine alma

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

df = pd.read_csv('squad_dataset.csv')
| id | text                                              | title             |
|----|---------------------------------------------------|-------------------|
| 1  | Mimari olarak, okul Katolik bir ka...            | University of ... |
| 2  | Mühendislik Fakültesi ...                         | University of ... |
| 3  | Destiny's Child'ın dağılmasının ardından...       | Beyonce           |
| 4  | Mimari olarak, okul Katolik bir ka...            | University of ... |
Pinecone ile Vektör Veritabanları ve Embeddings

Belgeleri Pinecone indeksine alma

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")
Pinecone ile Vektör Veritabanları ve Embeddings

Belgeleri Pinecone indeksine alma

index.describe_index_stats()
{'dimension': 1536, 'index_fullness': 0.02,
 'namespaces': {'squad_dataset': {'vector_count': 2000}},
 'total_vector_count': 2000}
Pinecone ile Vektör Veritabanları ve Embeddings

Pinecone ile sorgulama

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)
Pinecone ile Vektör Veritabanları ve Embeddings

Pinecone ile sorgulama

for result in retrieved_docs['matches']:
    print(f"{round(result['score'], 2)}: {result['metadata']['text']}")
0.41: Mimari olarak, okul Katolik bir karaktere sahiptir. Ana Bina'nın
altın kubbesinin tepesinde Meryem Ana'nın altın bir heykeli vardır...

0.3: Katolik kimliği nedeniyle kampüste çok sayıda dinî yapı bulunur.
Old College binası iki seminariyeden biri olmuştur...

0.29: Beyaz kalkan içinde, beş beyaz bezantlı beş quina (küçük mavi kalkan)
İsa'nın beş yarasını temsil eder...
Pinecone ile Vektör Veritabanları ve Embeddings

Hadi inşa edelim!

Pinecone ile Vektör Veritabanları ve Embeddings

Preparing Video For Download...