モデル・ランカーの概要Compatible with Milvus 2.6.x

従来のベクトル検索は、純粋に数学的な類似性によって結果をランク付けする。効率的ではあるが、このアプローチはしばしば真の意味的関連性を見逃してしまう。例えば、「データベース最適化のベストプラクティス」を検索してみましょう。ベクトル類似度が高く、これらの用語に頻繁に言及している文書を受け取るかもしれませんが、実際には実用的な最適化戦略を提供しているわけではありません。

Model Rankerは、クエリとドキュメント間の意味的関係を理解する高度な言語モデルを統合することで、Milvusの検索を変えます。ベクトル類似度だけに頼るのではなく、コンテンツの意味と文脈を評価し、よりインテリジェントで関連性の高い結果を提供します。

制限事項

  • モデル・ランカーはグループ化検索では使用できません。

  • モデル・ランカーに使用されるフィールドはテキスト型(VARCHAR )でなければなりません。

  • 各モデルランカーは、一度に1つのフィールド(VARCHAR )のみを評価に使用することができます。

仕組み

モデルランカーは明確に定義されたワークフローを通じて、言語モデル理解機能をMilvusの検索プロセスに統合します:

Model Ranker Overview モデルランカーの概要

  1. 最初のクエリ:お客様のアプリケーションからMilvusへクエリが送信されます。

  2. ベクトル検索Milvusは標準的なベクトル検索を行い、候補文書を特定します。

  3. 候補文書の検索ベクトル類似度に基づいて候補文書の初期セットを特定する。

  4. モデル評価モデルランカー機能はクエリと文書のペアを処理する:

    • 元のクエリと候補文書を外部のモデルサービスに送る。

    • 言語モデルがクエリと各文書の意味的関連性を評価する。

    • 各文書は意味理解に基づく関連性スコアを受け取る

  5. インテリジェントな並べ替え:文書がモデルによって生成された関連性スコアに基づいて並べ替えられる。

  6. 向上した結果:アプリケーションはベクトルの類似性だけでなく、意味的な関連性によってランク付けされた結果を受け取ります。

ニーズに合ったモデルプロバイダーを選択

Milvusは以下のリランキング用モデルサービスプロバイダをサポートしており、それぞれ特徴があります:

プロバイダ

最適

特徴

使用例

vLLM

深い意味理解とカスタマイズを必要とする複雑なアプリケーション

  • 様々な大規模言語モデルをサポート

  • 柔軟な展開オプション

  • より高い計算要件

  • より大きなカスタマイズの可能性

法律用語と判例関係を理解するドメイン固有のモデルを展開する法律研究プラットフォーム

TEI

効率的なリソース使用による迅速な実装

  • テキスト操作に最適化された軽量サービス

  • 少ないリソース要件で容易な導入

  • 最適化済みのリランキングモデル

  • インフラストラクチャーのオーバーヘッドを最小化

標準的な要件で効率的なリランキング機能を必要とするコンテンツ管理システム

コヒーレ

信頼性と統合の容易さを優先するエンタープライズ・アプリケーション

  • エンタープライズ・グレードの信頼性と拡張性

  • インフラストラクチャのメンテナンスが不要なマネージド・サービス

  • 多言語リランキング機能

  • 組み込みのレート制限とエラー処理

一貫したAPIパフォーマンスと多言語製品カタログによる高可用性検索を必要とするEコマースプラットフォーム

Voyage AI

特定のパフォーマンスとコンテキストを必要とするRAGアプリケーション

  • リランキングタスクのために特別にトレーニングされたモデル

  • 多様なドキュメント長に対応するきめ細かな切り捨て制御

  • プロダクションワークロード用に最適化された推論

  • 複数のモデルバリエーション(rerank-2、rerank-liteなど)

きめ細かなパフォーマンス制御と専門的な意味理解を必要とする、ドキュメントの長さが異なる研究用データベース

シリコンフロー

費用対効果を優先する長文のドキュメントを処理するアプリケーション

  • オーバーラップを設定できる高度なドキュメントチャンキング

  • チャンクベースのスコアリング(最もスコアの高いチャンクがドキュメントを表す)

  • 多様な再ランク付けモデルをサポート

  • 標準モデルとプロモデルのバリエーションで費用対効果に優れる

インテリジェントなセグメンテーションとオーバーラップ制御を必要とする長いマニュアルや論文を処理する技術文書検索システム

各モデルサービスの実装に関する詳細情報は、専用ドキュメントをご参照ください:

実装

Model Rankerを実装する前に、以下を確認してください:

  • 再ランクされるテキストを含むVARCHAR フィールドを持つMilvusコレクション。

  • Milvusインスタンスにアクセス可能な外部モデルサービス

  • Milvusと選択したモデルサービス間の適切なネットワーク接続性

モデルランカーは標準的なベクトル検索やハイブリッド検索操作とシームレスに統合されます。実装としては、リランキング設定を定義するFunctionオブジェクトを作成し、検索操作に渡します。

モデル・ランカーの作成

モデル・ランカーを実装するには、まず適切な設定を持つFunctionオブジェクトを定義します。この例では、サービス・プロバイダーとしてTEIを使用します:

from pymilvus import MilvusClient, Function, FunctionType

# Connect to your Milvus server
client = MilvusClient(
    uri="http://localhost:19530"  # Replace with your Milvus server URI
)

# Create a model ranker function
model_ranker = Function(
    name="semantic_ranker",  # Function identifier
    input_field_names=["document"],  # VARCHAR field to use for reranking
    function_type=FunctionType.RERANK,  # Must be set to RERANK
    params={
        "reranker": "model",  # Specify model reranker. Must be "model"
        "provider": "tei",  # Choose provider: "tei", "vllm", etc.
        "queries": ["machine learning for time series"],  # Query text
        "endpoint": "http://model-service:8080",  # Model service endpoint
        # "maxBatch": 32  # Optional: batch size for processing
    }
)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.service.vector.request.ranker.ModelRanker;

MilvusClientV2 client = new MilvusClientV2(ConnectConfig.builder()
        .uri("http://localhost:19530")
        .build());

ModelRanker ranker = ModelRanker.builder()
        .name("semantic_ranker")
        .inputFieldNames(Collections.singletonList("document"))
        .provider("tei")
        .queries(Collections.singletonList("machine learning for time series"))
        .endpoint("http://model-service:8080")
        .build();
// nodejs
// go
# restful

パラメータ

必須か?

説明

値 / 例

name

はい

検索実行時に使用する関数の識別子。

"semantic_ranker"

input_field_names

はい

再ランク付けに使用するテキストフィールドの名前。

VARCHAR タイプのフィールドでなければならない。

["document"]

function_type

はい

作成する関数のタイプを指定します。

すべてのモデルランカーに対してRERANK に設定する必要があります。

FunctionType.RERANK

params

はい

モデルベース・リランキング関数の設定を含む辞書。利用可能なパラメータ(キー)はサービスプロバイダによって異なる。

{...}

params.reranker

はい

モデルリランキングを有効にするには、"model" に設定する必要がある。

"model"

params.provider

はい

リ ラ ンキングに使用す る モデル ・ サービ ス ・ プ ロ バ イ ダー。

"tei"

params.queries

はい

リランキングモデルが関連性スコアの算出に使用するクエリ文字列のリスト。

クエリ文字列の数は、検索操作のクエリ数と正確に一致する必要があります(テキストの代わりにクエリベクタを使用する場合でも)。

["search query"]

params.endpoint

はい

モデルサービスのURL。

"http://localhost:8080"

max_client_batch_size

いいえ

1バッチで処理する文書の最大数。値が大きいほどスループットは向上しますが、より多くのメモリを必要とします。

32 (デフォルト)

モデル・ランカーを定義した後、それをrankerパラメータに渡すことで、検索操作中に適用することができる:

# Use the model ranker in standard vector search
results = client.search(
    collection_name,
    data=[your_query_vector], # Number of query vectors must match that specified in model_ranker.params["queries"] 
    anns_field="vector_field",
    limit=10,
    output_fields=["document"],  # Include the text field in outputs
    ranker=model_ranker,  # Apply the model ranker here
    consistency_level="Bounded"
)
import io.milvus.v2.common.ConsistencyLevel;
import io.milvus.v2.service.vector.request.SearchReq;
import io.milvus.v2.service.vector.response.SearchResp;
import io.milvus.v2.service.vector.request.data.EmbeddedText;

SearchReq searchReq = SearchReq.builder()
        .collectionName(COLLECTION_NAME)
        .data(Collections.singletonList(new EmbeddedText("machine learning for time series")))
        .annsField("vector_field")
        .limit(10)
        .outputFields(Collections.singletonList(document))
        .functionScore(FunctionScore.builder()
                .addFunction(ranker)
                .build())
        .consistencyLevel(ConsistencyLevel.BOUNDED)
        .build();
SearchResp searchResp = client.search(searchReq);
// nodejs
// go
# restful

Try Managed Milvus for Free

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

Get Started
フィードバック

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