Wyszukiwanie semantyczne produktów
Czas wykorzystać funkcję find_n_closest() w praktyce! Przetestujesz semantyczne wyszukiwanie produktów na przykładowym zapytaniu – obliczysz posortowaną listę pięciu produktów o największym podobieństwie semantycznym, bazując na wzbogaconych danych przekazanych modelowi.
Poniżej przypomnienie funkcji find_n_closest(), którą utworzyłeś w poprzednim ćwiczeniu:
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]
Dostępna jest również funkcja create_embeddings() utworzona wcześniej. Przyjmuje ona tekst i zwraca listę list zawierających osadzenia (embeddings) dla każdego fragmentu tekstu. Wczytane zostały także słownik products oraz product_embeddings utworzone w poprzednich ćwiczeniach.
To ćwiczenie jest częścią kursu
Wprowadzenie do osadzeń z OpenAI API
Instrukcje do ćwiczenia
- Utwórz wektor zapytania na podstawie
query_text. - Znajdź pięć najbliższych odległości wraz z odpowiadającymi im indeksami, używając funkcji
find_n_closest(). - Przejdź pętlą po
hitsi dla każdego elementu wyodrębnij produkt spod klucza'index'z listyhits.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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"])