Tìm kiếm ngữ nghĩa với Pinecone

Xây dựng ứng dụng AI với Pinecone

James Chapman

Curriculum Manager, DataCamp

Công cụ tìm kiếm ngữ nghĩa

  1. Nhúng và nạp tài liệu vào chỉ mục Pinecone
  2. Nhúng truy vấn của người dùng
  3. Truy vấn chỉ mục với truy vấn đã nhúng

tìm kiếm ngữ nghĩa

Xây dựng ứng dụng AI với Pinecone

Thiết lập Pinecone và OpenAI cho tìm kiếm ngữ nghĩa

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")
Xây dựng ứng dụng AI với Pinecone

Nạp tài liệu vào chỉ mục Pinecone

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

df = pd.read_csv('squad_dataset.csv')
| id | text                                              | title             |
|----|---------------------------------------------------|-------------------|
| 1  | Về mặt kiến trúc, ngôi trường mang đậm tính Cô... | University of ... |
| 2  | Trường Cao đẳng Kỹ thuật được thành lập vào...... | University of ... |
| 3  | Sau khi Destiny's Child tan rã vào...             | Beyonce           |
| 4  | Về mặt kiến trúc, ngôi trường mang đậm tính Cô... | University of ... |
Xây dựng ứng dụng AI với Pinecone

Nạp tài liệu vào chỉ mục 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")
Xây dựng ứng dụng AI với Pinecone

Nạp tài liệu vào chỉ mục Pinecone

index.describe_index_stats()
{'dimension': 1536, 'index_fullness': 0.02,
 'namespaces': {'squad_dataset': {'vector_count': 2000}},
 'total_vector_count': 2000}
Xây dựng ứng dụng AI với Pinecone

Truy vấn với 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)
Xây dựng ứng dụng AI với Pinecone

Truy vấn với Pinecone

for result in retrieved_docs['matches']:
    print(f"{round(result['score'], 2)}: {result['metadata']['text']}")
0.41: Về mặt kiến trúc, ngôi trường mang đậm tính Công giáo. Trên mái vòm vàng
của Tòa Nhà Chính là bức tượng Đức Mẹ Maria bằng vàng...

0.3: Do bản sắc Công giáo, nhiều công trình tôn giáo nằm trong khuôn viên.
Tòa Nhà Old College đã trở thành một trong hai chủng viện...

0.29: Bên trong hình khiên trắng, năm quinas (lá chắn xanh nhỏ) với
năm đồng bezant trắng tượng trưng cho năm vết thương...
Xây dựng ứng dụng AI với Pinecone

Đến lúc xây dựng!

Xây dựng ứng dụng AI với Pinecone

Preparing Video For Download...