商品のセマンティック検索
作成した 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 ではじめる Embeddings 入門
演習の手順
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"])