sparse_inverted_index
SPARSE_INVERTED_INDEX インデックスはMilvusがスパースベクトルを効率的に格納、検索するために使用するインデックスタイプです。このインデックス型は転置インデックスの原理を利用し、スパースデータに対して非常に効率的な検索構造を作成します。詳細についてはINVERTEDを参照してください。
インデックスの構築
MilvusでスパースベクトルフィールドにSPARSE_INVERTED_INDEX インデックスを構築するには、add_index() メソッドを使用し、index_type 、metric_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:スパース・ベクトル間の類似度を計算するために使用するメトリック。有効な値: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_MAXSCORE、DAAT_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 でインデックスを構築する際に設定できるパラメータの一覧です。
パラメータ |
説明 |
値の範囲 |
チューニングの提案 |
|---|---|---|---|
|
インデックスの構築とクエリに使用されるアルゴリズム。インデックスがどのようにクエリを処理するかを決定します。 |
|
高いk値を持つシナリオや多くの用語を持つクエリには k 値が小さいクエリや短いクエリでは コレクションの変更(avgdlなど)に対する動的な調整が必要な場合は、 |
インデックス固有の検索パラメータ
次の表は、search_params.params でインデックス検索時に設定できるパラメータの一覧です。
パラメータ |
説明 |
値の範囲 |
チューニングサジェスチョン |
|---|---|---|---|
|
検索時に無視する最小値の割合。 |
0.0から1.0の間の割合(例えば、0.2は最小値の20%を無視します)。 |
クエリベクトルのスパース性とノイズレベルに基づいて、このパラメータを調整します。 このパラメータは、検索中に取りこぼされる小さい値の割合を制御します。この値を大きくすると(例えば、 |