• Milvusについて
  • スタート
  • コンセプト
  • ユーザーガイド
    • コレクション
    • スキーマとデータフィールド
    • 挿入と削除
    • インデックス
    • 検索
    • エンベッディングとリランキング
    • ストレージの最適化
  • データインポート
  • AIツール
  • 管理ガイド
  • ツール
  • 統合
  • チュートリアル
  • よくあるご質問
  • API Reference

sparse_inverted_index

SPARSE_INVERTED_INDEX インデックスはMilvusがスパースベクトルを効率的に格納、検索するために使用するインデックスタイプです。このインデックス型は転置インデックスの原理を利用し、スパースデータに対して非常に効率的な検索構造を作成します。詳細についてはINVERTEDを参照してください。

インデックスの構築

MilvusでスパースベクトルフィールドにSPARSE_INVERTED_INDEX インデックスを構築するには、add_index() メソッドを使用し、index_typemetric_type 、そしてインデックスの追加パラメータを指定します。

from pymilvus import MilvusClient

# Prepare index building params
index_params = MilvusClient.prepare_index_params()

index_params.add_index(
    field_name="your_sparse_vector_field_name", # Name of the vector field to be indexed
    index_type="SPARSE_INVERTED_INDEX", # Type of the index to create
    index_name="sparse_inverted_index", # Name of the index to create
    metric_type="IP", # Metric type used to measure similarity
    params={"inverted_index_algo": "DAAT_MAXSCORE"}, # Algorithm used for building and querying the index
)

この構成では

  • index_type:構築するインデックスのタイプ。この例では、SPARSE_INVERTED_INDEX に設定します。

  • metric_type:スパース・ベクトル間の類似度を計算するために使用するメトリック。有効な値:

    • IP (内積):ドット積を使用して類似度を測定します。

    • BM25:通常、テキストの類似性に重点を置いた全文検索に使用される。

      詳細は「メトリックタイプと 全文検索」を参照。

  • params.inverted_index_algo:インデックスの構築とクエリに使用されるアルゴリズム。有効な値:

    • "DAAT_MAXSCORE" (デフォルト):MaxScoreアルゴリズムを使用した最適化されたDocument-at-a-Time(DAAT)クエリ処理。MaxScoreは、高いk値や多くの用語を含むクエリに対して、影響が最小と思われる用語やドキュメントをスキップすることで、より優れたパフォーマンスを提供します。MaxScoreは、最大インパクトスコアに基づいて用語を必須グループと非必須グループに分割し、トップkの結果に貢献できる用語に焦点を当てることでこれを実現する。

    • "DAAT_WAND":WANDアルゴリズムを使用したDAATクエリ処理の最適化。WANDは非競合文書をスキップするために最大インパクトスコアを活用することで、より少ないヒット文書を評価する。このため、WANDはk値が小さいクエリや短いクエリではスキップがより効率的である。

    • "TAAT_NAIVE":Basic Term-at-a-Time (TAAT)クエリー処理。DAAT_MAXSCOREDAAT_WAND と比較すると遅いが、TAAT_NAIVE にはユニークな利点がある。グローバル収集パラメータ(avgdl)の変更に関係なく静的なままキャッシュされた最大影響スコアを使用するDAATアルゴリズムとは異なり、TAAT_NAIVE 、そのような変更に動的に適応する。

    SPARSE_INVERTED_INDEX インデックスで利用可能な構築パラメータについては、インデックス構築パラメータを参照。

インデックス・パラメータを構成したら、create_index() メソッドを直接使用するか、create_collection メソッドでインデックス・パラメータを渡してインデックスを作成できます。詳細は、コレクションの作成 を参照してください。

インデックスでの検索

インデックスが構築され、エンティティが挿入されると、インデックスで類似検索を実行できます。

# Prepare the query vector
query_vector = [{1: 0.2, 50: 0.4, 1000: 0.7}]

res = MilvusClient.search(
    collection_name="your_collection_name", # Collection name
    anns_field="vector_field",  # Vector field name
    data=query_vector,  # Query vector
    limit=3,  # TopK results to return
)

SPARSE_INVERTED_INDEX インデックスで使用できる検索パラメータについては、「インデックス固有の検索パラメータ」を参照してください。

インデックスパラメータ

このセクションでは、インデックスを構築し、インデックス上で検索を実行するために使用されるパラ メータの概要を説明します。

インデックス構築パラメータ

以下の表は、paramsインデックスを構築する際に設定できるパラメータの一覧です。

パラメータ

説明

値の範囲

チューニングの提案

inverted_index_algo

インデックスの構築とクエリに使用されるアルゴリズム。インデックスがどのようにクエリを処理するかを決定します。

"DAAT_MAXSCORE" (デフォルト),"DAAT_WAND""TAAT_NAIVE"

高いk値を持つシナリオや多くの用語を持つクエリには"DAAT_MAXSCORE" 、競合しない文書をスキップすることで利益を得ることができます。

k 値が小さいクエリや短いクエリでは"DAAT_WAND" を選択し、より効率的なスキップを活用します。

コレクションの変更(avgdlなど)に対する動的な調整が必要な場合は、"TAAT_NAIVE"

インデックス固有の検索パラメータ

次の表は、search_params.paramsインデックス検索時に設定できるパラメータの一覧です。

パラメータ

説明

値の範囲

チューニングサジェスチョン

drop_ratio_search

検索時に無視する最小値の割合。

0.0から1.0の間の割合(例えば、0.2は最小値の20%を無視します)。

クエリベクトルのスパース性とノイズレベルに基づいて、このパラメータを調整します。

このパラメータは、検索中に取りこぼされる小さい値の割合を制御します。この値を大きくすると(例えば、0.2 )、ノイズが減少し、より重要な成分に検索が集中するため、精度と効率が向上します。しかし、より多くの値を削除すると、潜在的に関連性のあるシグナルを除外することになり、リコールが低下する可能性もあります。作業負荷に応じて、リコールと精度のバランスが取れた値を選択してください。

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
フィードバック

このページは役に立ちましたか ?