検索エンジン
k-NN検索(近傍近傍近傍近傍近傍近傍近傍近傍検索)を使用した候補生成の従来のアプローチは正確であるが、特に待機時間が非常に短い大規模なシステムでは非常に遅い。
ANN(近接近傍)検索では、インデックスをより効率的に再構築し、検索可能なベクトルの寸法を小さくするツールを使用します。このアプローチを使用することは、精度と低レイテンシのトレードオフです。k-NNでANNを活用することで、検索エンジンは、特定のクエリ文書の最も近い隣人を概算し、非常に低いレイテンシで関連候補を取得できるため、大規模なデータセットの検索レイテンシが向上します。OpenSearch 2.11は、すべてANNを実装するNMSLIB、FAISSおよびLUCENE検索エンジンをサポートしています。詳細は、フィルタを使用したk-NN検索を参照してください。
Luceneエンジン
Lucene K-NN filterは、実装でHNSWグラフを使用します。
次の例は、Luceneエンジンを使用した索引の作成を示しています。
PUT /test-index
{
"settings": {
"index": {
"knn": true,
"knn.algo_param.ef_search": 100,
"number_of_shards": 1,
"number_of_replicas": 0
}
},
"mappings": {
"properties": {
"location": {
"type": "knn_vector",
"dimension": 2,
"method": {
"name": "hnsw",
"space_type": "l2",
"engine": "lucene",
"parameters": {
"ef_construction": 100,
"m": 16
}
}
}
}
}
}
インデックスで取り込みパイプラインを使用するには、APIコールにパイプラインを追加し、次のように、取り込みパイプラインにデプロイされたモデルが、APIコールで指定されたKNNベクトルのディメンション性が同じであることを確認します。
PUT /test-lucene-index
{
"settings": {
"default_pipeline": "test-nlp-pipeline",
"index": {
"knn": true,
"knn.algo_param.ef_search": 100,
"number_of_shards": 1,
"number_of_replicas": 0
}
},
"mappings": {
"properties": {
"location": {
"type": "knn_vector",
"dimension": 2,
"method": {
"name": "hnsw",
"space_type": "l2",
"engine": "lucene",
"parameters": {
"ef_construction": 100,
"m": 16
}
}
}
}
}
}
Faissエンジン
Faissエンジンの場合、HNSWアルゴリズムまたはIVFアルゴリズムを使用してANNフィルタを実装できます。Faiss構成パラメータの詳細は、Faiss k-NNフィルタの実装を参照してください。
次の例は、Faissエンジンを使用して索引を作成する方法を示しています。
取込みパイプラインなし:
PUT /test-faiss-index
{
"settings": {
"index": {
"knn": true
}
},
"mappings": {
"properties": {
"item_vector": {
"type": "knn_vector",
"dimension": 3,
"method": {
"name": "hnsw",
"space_type": "l2",
"engine": "faiss"
}
}
}
}
}
取込みパイプラインを使用
PUT /test-faiss-index
{
"settings": {
"index": {
"knn": true
},
"default_pipeline": "test-nlp-pipeline"
},
"mappings": {
"properties": {
"item_vector": {
"type": "knn_vector",
"dimension": 3,
"method": {
"name": "hnsw",
"space_type": "l2",
"engine": "faiss"
}
}
}
}
}
NMSLIBエンジン
次の例は、nmslibエンジンを使用して索引を作成する方法を示しています。
PUT /nmslib-index
{
"settings": {
"index.knn": true,
"default_pipeline": "test-nlp-pipeline"
},
"mappings": {
"properties": {
"passage_embedding": {
"type": "knn_vector",
"dimension": 1024,
"method": {
"name":"hnsw",
"engine":"nmslib",
"space_type": "cosinesimil"
}
},
"passage_text": {
"type": "text"
}
}
}
}
空白
サポートされている各エンジンは、いくつかのヒューリスティックを使用して、ドキュメントの埋め込みを比較し、類似性を測定して最も関連性の高いドキュメントを取得します。使用する複数の目標メトリックを選択できます。選択するメトリックは、カスタム・ユース・ケース、モデルおよびデータによって異なります。選択可能なオプションを示す表などの詳細は、「スペース」を参照してください。