Want to Become a Sponsor? Contact Us Now!🎉

vector-database
Qdrantとは?このベクトル検索エンジンを理解するための究極のガイド

Qdrantとは?このベクトル検索エンジンを理解するための究極のガイド

Published on

ベクトル検索エンジンについての話は聞いたことがあるかもしれませんが、その中で1つが他と比べて際立っているのは何でしょうか?それはQdrantです。Qdrantは高次元データ検索の世界でのゲームチェンジャーです。この記事では、Qdrantが何であり、どのように動作するか、そしてなぜそれが重要なのかを解説します。

データサイエンティスト、開発者、または最新の検索技術の進化に興味を持つ人であれば、このガイドはあなたに向けています。技術的な側面に深く立ち入り、Faissなど他のエンジンと比較し、インストールと使用方法についても案内します。さあ、始めましょう!

最新のLLMニュースを知りたいですか?最新のLLMリーダーボードをチェックしてください!

Qdrantとは何ですか?

Qdrantとは技術的には何ですか?

Qdrantは、高次元データを扱うために設計されたオープンソースのベクトル検索エンジンです。Hierarchical Navigable Small World(HNSW)グラフやProduct Quantizationなどの高度なアルゴリズムを採用しています。これらのアルゴリズムにより、非常に効率的にベクトルのインデックス付けと検索が行えます。大規模なデータセットを扱っている場合でも、迅速に関連する結果を見つけることができます。

  • HNSWグラフ:効率的なインデックス付けに使用されます。高次元データを素早く処理することができ、関連する結果を見つけるまでの時間を短縮します。

  • Product Quantization:ベクトルの圧縮に使用される技術です。高速だけでなく、メモリ効率も確保します。

Qdrantとは簡単な言葉で言えば?

Qdrantは、デジタルコンテンツのスーパースマートな整理者と考えてください。たとえば、大量の写真、記事、または曲のコレクションを持っているとしましょう。この山の中で特定のものを見つけることは、ハヤスタックの中の針を探すようなものです。Qdrantは、あなたが探しているものを素早く見つけるための「スマートさ」を持っています。あなた自身よりもあなたのコレクションを知っている、あるいはそれ以上でもある個人アシスタントのような存在です。

Qdrantをユニークにする要素

  • HNSWグラフ:これらのグラフはデータ構造の形態であり、高次元データを効率的にインデックス付けするためのものです。計算の複雑性を低減させることで、検索プロセスを高速化します。

  • Product Quantization:この技術により、データベース内のベクトルが圧縮されます。ファイルの圧縮(ZIP化)のようなもので、内容は同じですが、より少ないスペースを使用します。これは、速度に妥協することなく大規模なデータセットを処理するために重要です。

  • 意味検索:クエリの文脈とニュアンスを理解する能力です。

従来の検索エンジンは、キーワードに基づく検索に限定されています。しかし、Qdrantは意味検索を用いています。つまり、使用する言葉だけでなく、クエリの背後にある意味を理解することができます。

たとえば、「Apple」と検索すると、キーワードに基づく検索では果物やテクノロジー企業に関連する結果が表示されるかもしれません。意味検索では、文脈を理解し、より関連性の高い結果を表示します。

Qdrantは以下の点で他とは異なります:

  • オープンソース:オープンソースであるため、誰でも開発に貢献することができます。これにより、革新と透明性を促進するコミュニティ主導の環境が生まれます。

  • 効率性:Qdrantは高速かつ正確な検索結果を提供するように設計されています。高度なアルゴリズムの使用により、速度と信頼性の面で際立っています。

Qdrant vs Faiss:ベンチマーク比較

ベクトル検索エンジンの領域では、QdrantとFaissがよく並べて評価されます。ただし、統一されたベンチマークがないため、明確な比較をすることは困難となっています。この分析では、QdrantとFaiss、および他の競合他社間の比較について、技術的かつデータに基づいた視点を提供します。

以下の表は、ベンチマークテストからの主要なパフォーマンス指標を示しています。テストは「deep-image-96-angular」というデータセット上で実施され、各エンジンは異なる設定で構築されました。

エンジンセットアップ名データセットアップロード時間(秒)アップロード+インデックス時間(秒)P95(秒)RPSパラレルP99(秒)レイテンシー(秒)正解率エンジンパラメーター
Qdrantqdrant-rps-m-64-ef-512deep-image-96-angular845.788959.440.0551541.861000.0630.0240.96{"search_params":{"hnsw_ef":64}}
Weaviateweaviate-m-16-ef-128deep-image-96-angular8922.258922.250.35507.331000.410.190.94{"vectorIndexConfig":{"ef":256}}
Milvusmilvus-m-16-ef-128deep-image-96-angular364.462116.900.22339.441000.230.170.97{"params":{"ef":128}}
Elasticelastic-m-16-ef-128deep-image-96-angular5252.686069.671.1195.901001.670.920.97{"num_candidates":128}

パラメータの解説:

  1. アップロード時間:Qdrantのアップロード時間は845.78秒で、Weaviateよりは速く、Milvusよりは遅いです。

  2. インデックス時間:Qdrantのアップロードおよびインデックスにかかる総時間は8959.44秒で、テストされたエンジンの中で最も長い時間です。

  3. レイテンシー:Qdrantはわずか0.024秒のレイテンシーで優れており、他のエンジンを大幅に上回っています。

  4. 秒間リクエスト数(RPS):QdrantはRPSが1541.86でトップを走っており、スループットが高いことを示しています。

  5. 精度: QdrantとMilvusの両方とも高い精度スコアを持っています。Qdrantは0.96、Milvusは0.97です。

  6. P95とP99レイテンシ: Qdrantは最も低いP95およびP99レイテンシを持ち、より一貫したパフォーマンスを示しています。

データから得られる技術的なインサイト

  • Qdrantは hnsw_ef パラメータを64に設定したHNSW(Hierarchical Navigable Small World)グラフを使用しており、検索パフォーマンスを最適化しています。

  • Weaviateは異なる ef パラメータを256に設定しているため、より高いレイテンシと低いRPSを説明する可能性があります。

  • Milvusも ef パラメータを128で設定していますが、0.97の高い精度スコアを達成しています。

データに基づいて、Qdrantはレイテンシとスループット(RPS)の面で強力なパフォーマンスを示しており、アップロードとインデックス作成には時間がかかりますが、高い精度スコアもあり、類似検索タスクにおいて信頼性のある選択肢となります。

Qdrantのインストール方法: 包括的なガイド

Dockerを使用したQdrantのインストール

Dockerはコンテナ化のための人気のあるプラットフォームであり、Qdrantを簡単に起動する方法の1つです。以下に手順を示します:

  1. Dockerのインストール: Dockerがまだマシンにインストールされていない場合、公式ウェブサイトからダウンロードしてインストールします。

  2. Qdrantイメージの取得: ターミナルを開き、以下のコマンドを実行して最新のQdrantイメージをDocker Hubから取得します。

    docker pull qdrant/qdrant
  3. Qdrantコンテナの実行: 取得したイメージを基に新しいコンテナを起動するには、次のコマンドを実行します。

    docker run -p 6333:6333 qdrant/qdrant
  4. インストールの確認: Qdrantが実行されていることを確認するために、新しいターミナルを開き、次のコマンドを実行します。

    curl http://localhost:6333

    JSONのレスポンスが返ってきた場合、Qdrantのインストールが成功しています。

クラウド上でのQdrantのインストール

Qdrant Cloudは、インフラストラクチャを扱うことを好まないユーザー向けに管理されたサービスを提供しています。以下は、始める方法です:

  1. サインアップ: Qdrant Cloudのウェブサイトにアクセスし、アカウントを作成します。

  2. インスタンスの作成: 画面の指示に従って新しいQdrantインスタンスを設定します。

  3. APIキー: インスタンスが作成されると、APIキーとエンドポイントが提供されます。これらを安全に保存します。

  4. インスタンスのテスト: APIキーを使用してテストクエリを行います。成功したレスポンスはクラウドインスタンスが稼働していることを示します。

Pythonを使用したQdrantのインストール

Python開発者向けに、QdrantはPythonクライアントライブラリを提供しています。以下はインストール方法です:

  1. Pythonとpipのインストール: まだインストールされていない場合、Pythonとpipをダウンロードしてインストールします。

  2. Qdrantクライアントのインストール: ターミナルを開き、次のコマンドを実行します。

    pip install qdrant-client
  3. Pythonスクリプト: Qdrantとの対話には、以下のサンプルコードを使用できます。

    from qdrant_client import QdrantClient
    client = QdrantClient(host='localhost', port=6333)

Qdrantチュートリアル: Qdrantを使用した質問応答システムの構築

ステップ1: 変数の初期化とライブラリのインポート

コードに入る前に、変数を初期化し、必要なライブラリをインポートします。

import openai
from qdrant_client.http.models import PointStruct
 
points = []
i = 1

ステップ2: テキストチャンクのループ

テキストチャンクごとに反復処理し、埋め込みを生成します。テキストチャンクは事前に作成され、chunksというリストに格納されている必要があります。

for chunk in chunks:
    i += 1

ステップ3: 埋め込みの生成

ループ内で、各テキストチャンクに対してOpenAIのada002モデルを呼び出し、埋め込みを作成します。

    response = openai.Embedding.create(
        input=chunk,
        model="text-embedding-ada-002"
    )
    embeddings = response['data'][0]['embedding']

ステップ4: 埋め込みの保存

埋め込みを生成した後、IDと元のテキストと一緒にリストに保存します。

    points.append(PointStruct(id=i, vector=embeddings, payload={"text": chunk}))

なぜada002を使用するのですか?

ada002モデルは、テキストの意味の微妙なニュアンスを捉えるように設計されており、セマンティックサーチやQ&Aシステムなどのアプリケーションに最適です。テキストチャンクを入力として受け取り、そのテキストの意味をカプセル化した数値ベクトルを出力します。

ステップ5: Qdrantクライアントの初期化

まず、適切なホストとAPIキーでQdrantクライアントを初期化します。

from qdrant_client import QdrantClient
 
qdrant_client = QdrantClient(
    host="<HOSTNAME>", 
    api_key="<API_KEY>",
)

ステップ6: コレクションの作成または再作成

Qdrantで新しいコレクションを作成し、埋め込みを保存するためのコレクションがすでに存在する場合は再作成できます。

qdrant_client.recreate_collection(
    collection_name="mycollection",
    vectors_config=models.VectorParams(size=1536, distance=models.Distance.COSINE),
)

ステップ7: 埋め込みのインデックス作成

今、作成したコレクションに埋め込みをインデックスします。

operation_info = qdrant_client.upsert(
    collection_name="mycollection",
    wait=True,
    points=points
)

なぜインデックス作成にQdrantを使用するのですか?

Qdrantは、拡張フィルターサポートを備えた堅牢な本番向けサービスを提供しています。そのAPIは、この場合埋め込みとなるポイントを格納、検索、管理するのに便利です。Qdrantで埋め込みをインデックス化することで、後でユーザーの入力に基づいた効率的な類似検索を実行できます。

結論

要約すると、データに基づく分析から、Qdrantはレイテンシ、RPS、精度などの主要なパフォーマンス指標で優れています。データのアップロードとインデックス作成には時間がかかるかもしれませんが、その代わりに高スループット、低レイテンシのエンジンで正確な結果を提供します。これらの特性により、Qdrantはベクトル検索エンジンの要件で検索パフォーマンスと結果の正確性を重視する組織にとって魅力的な選択肢となります。

よくある質問(FAQ)

  1. QdrantはレイテンシとRPSの面でどのように優れていますか? Qdrantは、低遅延と高RPSに貢献する最適化された階層型ナビゲーション可能な小世界(HNSW)グラフを使用しています。特に、hnsw_efを64に設定したエンジンパラメータは、このパフォーマンスを達成するために微調整されています。

  2. なぜQdrantのデータのアップロードとインデックス作成には時間がかかるのですか?

    Qdrantでのデータのアップロードとインデックス作成にかかる時間の延長は、検索クエリでの高いパフォーマンスとのトレードオフです。エンジンは最適化されたインデックス構造の作成に重点を置いており、時間を要するものの、後でより速く正確な検索結果をもたらします。

  3. Qdrantの精度は他のエンジンと比較してどうですか?

    Qdrantの精度スコアは0.96であり、Milvusの0.97に匹敵します。これは、Qdrantが類似性検索タスクにおいて非常に信頼性の高い結果を返し、ほとんどの場合に正確な結果を提供することを示しています。

  4. Qdrantは大規模展開に適していますか?

    高いRPSと低遅延を持つため、Qdrantは高スループットと迅速な応答時間が重要な大規模展開に適しています。ただし、データパイプラインの計画を立てる際には、より長いアップロード時間とインデックス作成時間を考慮する必要があります。

最新のLLMニュースを知りたいですか?最新のLLMリーダーボードをチェックしてください!

Anakin AI - The Ultimate No-Code AI App Builder