メインコンテンツへスキップ
dbpedia データセットには、Wikipedia の 100 万件の記事と、OpenAI の text-embedding-3-large モデルで生成されたそれらのベクトル埋め込みが含まれています。 このデータセットは、ベクトル埋め込み、ベクトル類似度検索、Generative AI を理解するための入門用として最適です。このデータセットを使って、ClickHouse における近似最近傍探索と、シンプルながら強力な Q&A アプリケーションを紹介します。

データセットの詳細

このデータセットには、huggingface.co にある 26 個の Parquet ファイルが含まれています。ファイル名は 0.parquet1.parquet、…、25.parquet です。データセット内のサンプル行をいくつか確認するには、Hugging Face ページ を参照してください。

テーブルを作成

記事ID、タイトル、テキスト、埋め込みベクトルを格納する dbpedia テーブルを作成します。

テーブルを読み込む

すべてのParquetファイルからデータを読み込むには、次のシェルコマンドを実行します。
あるいは、以下に示すように各SQLステートメントを実行して、25個のParquetファイルをそれぞれ読み込むこともできます。
dbpedia テーブルに 100 万行あることを確認します:
参考資料: “Vector embeddings ” OpenAPI ガイド ベクトル埋め込みを用いたセマンティック検索 (類似検索 とも呼ばれます) では、 次の手順で行います。
  • 自然言語の検索クエリ (例: “景色のよい鉄道の旅について教えて”, “ヨーロッパを舞台にしたサスペンス小説” など) をユーザーから受け取る
  • LLM モデルを使用して、検索クエリの埋め込みベクトルを生成する
  • データセット内で、その検索クエリの埋め込みベクトルに最も近い最近傍を見つける
最近傍 とは、ユーザーのクエリに関連する結果として返されるドキュメント、画像、またはコンテンツです。 取得された結果は、Generative AI アプリケーションにおける Retrieval Augmented Generation (RAG) の重要な入力となります。 KNN (k-最近傍) 検索、つまり総当たり検索では、データセット内の各ベクトルと検索用の埋め込みベクトルとの距離を計算し、 その距離を並べ替えることで最近傍を求めます。dbpedia データセットでは、セマンティック検索を手早く視覚的に確認する方法として、 データセット自体の埋め込みベクトルを検索ベクトルとして使うことができます。たとえば、次のようになります。
Query
Response
後で ANN (ベクトル索引を使用) のクエリレイテンシと比較できるよう、クエリレイテンシを記録しておいてください。 また、実際のコンピュート使用量とストレージ帯域幅の使用量を把握するため、OS のファイルキャッシュがコールドな状態で、かつ max_threads=1 の場合のクエリレイテンシも記録してください (これを数百万ベクトル規模の本番データセットに外挿します!)

ベクトル類似度索引を構築する

次の SQL を実行して、vector カラムにベクトル類似度索引を定義し、構築します。
索引の作成と検索に関するパラメータおよびパフォーマンス上の考慮事項は、ドキュメントに記載されています。 利用可能なCPU コア数とストレージの帯域幅によっては、索引の構築と保存に数分かかることがあります。 Approximate Nearest Neighbours (ANN) とは、厳密なベクトル検索よりもはるかに高速に結果を求めるための一連の手法 (例:グラフやランダムフォレストのような特殊なデータ構造) を指します。結果の精度は、一般に実用上「十分」とされます。多くの近似手法では、結果精度と検索時間のトレードオフを調整するためのパラメーターを指定できます。 ベクトル類似度索引の構築後、ベクトル検索クエリでは自動的にこの索引が使用されます。
Query
Response

検索クエリ用の埋め込みの生成

ここまで見てきた類似検索のクエリでは、検索ベクトルとして dbpedia table 内にある既存のベクトルの 1 つを使用していました。実際のアプリケーションでは、検索ベクトルは 自然言語で入力される可能性のあるユーザーのクエリに対して生成する必要があります。検索ベクトル は、データセットの埋め込みベクトルの生成に使用したものと同じ LLM モデルを使って生成する 必要があります。 以下に、OpenAI API をプログラムから呼び出して text-embedding-3-large モデルを使用し、埋め込みベクトルを生成する方法を示す Python スクリプトの例を示します。検索用の埋め込みベクトル は、その後 SELECT クエリ内の cosineDistance() 関数に引数として渡されます。 このスクリプトを実行するには、環境変数 OPENAI_API_KEY に OpenAI API キー を設定しておく必要があります。 OpenAI API キー は、https://platform.openai.com で登録すると取得できます。

Q&A デモアプリケーション

上記の例では、ClickHouse を使用したセマンティック検索とドキュメント取得を紹介しました。次に、非常にシンプルでありながら大きな可能性を持つ Generative AI のサンプルアプリケーションを紹介します。 このアプリケーションでは、次の手順を実行します。
  1. ユーザーから トピック を入力として受け取る
  2. モデル text-embedding-3-large を指定して OpenAI API を呼び出し、トピック の埋め込みベクトルを生成する
  3. dbpedia テーブルに対してベクトル類似度検索を行い、関連性の高い Wikipedia の記事やドキュメントを取得する
  4. トピック に関連する自然言語の自由形式の質問をユーザーから受け取る
  5. OpenAI の gpt-3.5-turbo Chat API を使用して、手順 #3 で取得したドキュメント内の知識に基づいて質問に回答する。 手順 #3 で取得したドキュメントは Chat API に コンテキスト として渡され、これが Generative AI における重要なつながりとなります。
まず、Q&A アプリケーションを実行した際の対話例をいくつか以下に示し、その後に Q&A アプリケーションのコードを示します。アプリケーションを実行するには、環境変数 OPENAI_API_KEY に OpenAI API キーを設定しておく必要があります。OpenAI API キーは https://platform.openai.com で登録すると取得できます。
コード:
最終更新日 2026年7月2日