상품을 위한 시맨틱 검색
이제 find_n_closest() 함수를 직접 써 볼 시간이에요! 테스트 쿼리로 시맨틱 상품 검색을 실행해 보고, 모델에 제공한 보강된 데이터를 바탕으로 의미상 가장 비슷한 다섯 가지 상품을 정렬된 목록으로 구해 보세요.
이전 연습 문제에서 만들었던 find_n_closest() 함수를 다시 보여 드릴게요:
def find_n_closest(query_vector, embeddings, n=3):
distances = []
for index, embedding in enumerate(embeddings):
distance = spatial.distance.cosine(query_vector, embedding)
distances.append({"distance": distance, "index": index})
distances_sorted = sorted(distances, key=lambda x: x["distance"])
return distances_sorted[0:n]
앞서 만든 create_embeddings() 함수도 사용할 수 있어요. 이 함수는 텍스트를 받아 각 텍스트에 대한 임베딩이 담긴 리스트의 리스트를 반환한다는 점을 기억하세요. 이전에 생성한 products 딕셔너리와 product_embeddings도 이미 로드되어 있어요.
이 연습은 강의의 일부입니다
OpenAI API로 시작하는 임베딩 Introduction
연습 안내
query_text에서 쿼리 벡터를 생성하세요.find_n_closest()함수를 사용해 가장 가까운 다섯 개의 거리와 해당 인덱스를 찾으세요.hits를 순회하며hits목록의 각'index'에 있는 상품을 추출하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# Create the query vector from query_text
query_text = "computer"
query_vector = ____[0]
# Find the five closest distances
hits = ____
print(f'Search results for "{query_text}"')
for hit in hits:
# Extract the product at each index in hits
product = products[____]
print(product["title"])