始める無料で始める

製品のセマンティック検索

いよいよ 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"])
コードを編集して実行