製品のセマンティック検索
いよいよ find_n_closest() 関数を実際に使ってみましょう。テスト用のクエリを使って、意味的に最も近い製品を5つ選び、類似度順に並べた検索結果を確認します。検索には、モデルに与えた拡張データを使用します。
前の演習で作成した 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 で学ぶ埋め込み入門
演習の手順
query_textからクエリベクトルを作成してください。find_n_closest()関数を使って、最も距離が近い5件とそれに対応するインデックスを求めてください。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"])