Pinecone로 의미 기반 검색

Pinecone로 AI 애플리케이션 구축하기

James Chapman

Curriculum Manager, DataCamp

의미 기반 검색 엔진

  1. 문서를 임베딩하여 Pinecone 인덱스에 적재
  2. 사용자 질의를 임베딩
  3. 임베딩된 질의로 인덱스 조회

semantic search

Pinecone로 AI 애플리케이션 구축하기

의미 검색을 위한 Pinecone과 OpenAI 설정

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로 AI 애플리케이션 구축하기

Pinecone 인덱스로 문서 적재

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

df = pd.read_csv('squad_dataset.csv')
| id | text                                              | title             |
|----|---------------------------------------------------|-------------------|
| 1  | 건축적으로, 이 학교는 가톨릭적 성격을 가집니다... | University of ... |
| 2  | 공학 대학은 ...에 설립되었습니다...                 | University of ... |
| 3  | 데스티니스 차일드 해체 이후...                      | Beyonce           |
| 4  | 건축적으로, 이 학교는 가톨릭적 성격을 가집니다... | University of ... |
Pinecone로 AI 애플리케이션 구축하기

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")
Pinecone로 AI 애플리케이션 구축하기

Pinecone 인덱스로 문서 적재

index.describe_index_stats()
{'dimension': 1536, 'index_fullness': 0.02,
 'namespaces': {'squad_dataset': {'vector_count': 2000}},
 'total_vector_count': 2000}
Pinecone로 AI 애플리케이션 구축하기

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)
Pinecone로 AI 애플리케이션 구축하기

Pinecone으로 질의하기

for result in retrieved_docs['matches']:
    print(f"{round(result['score'], 2)}: {result['metadata']['text']}")
0.41: 건축적으로, 이 학교는 가톨릭적 성격을 갖습니다. 본관의 황금 돔 
꼭대기에는 성모 마리아의 금빛 동상이 있습니다...

0.3: 가톨릭 정체성으로 인해 캠퍼스에는 여러 종교 건물이 있습니다. 구 칼리지 
건물은 두 개의 신학교 중 하나가 되었습니다...

0.29: 흰 방패 안의 다섯 개 퀴나스(작은 파란 방패)와 그 위의 다섯 개 흰 베전트는 
다섯 상처를 나타냅니다...
Pinecone로 AI 애플리케이션 구축하기

이제 만들어 봅시다!

Pinecone로 AI 애플리케이션 구축하기

Preparing Video For Download...