メインコンテンツまでスキップ
バージョン: User Guides (Cloud)

ブーストレランカー

ベクトル距離に基づく意味的類似性の計算のみに依存する代わりに、ブーストレランカーを使用して、検索結果に意味のある方法で影響を与えることができます。これは、メタデータフィルタリングを使用して検索結果を迅速に調整するのに理想的です。

検索リクエストにブーストレランカー関数が含まれている場合、Milvusは関数内のオプションのフィルタリング条件を使用して検索結果候補の中から一致を検索し、指定された重みを適用してそれらの一致のスコアをブーストし、最終結果で一致したエンティティのランクを促進または抑制するのに役立ちます。

ブーストレランカーの使用場面

クロスエンコーダーモデルや融合アルゴリズムに依存する他のランカーとは異なり、ブーストレランカーはオプションのメタデータ駆動ルールを直接ランキングプロセスに注入するため、以下のようなシナリオでより適しています。

使用例

ブーストレランカーがうまく機能する理由

ビジネス駆動型のコンテンツ優先順位付け

  • EC検索結果でプレミアム商品を強調表示

  • 高ユーザーエンゲージメント指標(閲覧数、いいね、共有など)を持つコンテンツの可視性を向上

  • 時間に敏感な検索アプリケーションで最近のコンテンツを優先

  • 認証済みまたは信頼できるソースからのコンテンツを優先

  • 正確なフレーズまたは高関連性キーワードに一致する結果をブースト

インデックスの再構築やベクトル埋め込みモデルの変更(時間のかかる作業)をする必要がなく、実時間でオプションのメタデータフィルターを適用して検索結果の特定のアイテムを即座に促進または抑制できます。このメカニズムにより、進化するビジネス要件に簡単に適応できる柔軟で動的な検索ランキングが可能になります。

戦略的内容のランク下げ

  • 在庫が少ないアイテムの目立たなさを減らしつつ完全に削除しない

  • 潜在的に問題のある用語を含むコンテンツのランクを検閲せずに下げる

  • 古いドキュメントを技術検索でアクセス可能にしつつランクを下げておく

  • マーケットプレース検索で競合他社の製品の目立たなさを微妙に減らす

  • 品質が低いと示唆されるコンテンツの関連性を下げる(フォーマットの問題、文章が短いなど)

複数のブーストレランカーを組み合わせて、より動的で堅牢な重みベースのランキング戦略を実装することもできます。

ブーストレランカーの仕組み

以下の図は、ブーストレランカーの主なワークフローを示しています。

Hq0awfjC7h0Ty3bvsUEcasOHncb

データを挿入する際、Zilliz Cloudはデータをセグメントに分散配置します。検索中、各セグメントは候補のセットを返し、Zilliz Cloudはこれらのすべてのセグメントの候補をランキングして最終結果を生成します。検索リクエストにブーストレランカーが含まれている場合、Zilliz Cloudは潜在的な精度損失を防ぎ、再現率を向上させるために各セグメントからの候補結果にそれを適用します。

結果を確定する前に、Milvusは以下の通りブーストレランカーでこれらの候補を処理します:

  1. ブーストレランカーで指定されたオプションのフィルタリング式を適用して、式に一致するエンティティを識別します。

  2. ブーストレランカーで指定された重みを適用して、識別されたエンティティのスコアをブーストします。

📘注意

マルチベクトルハイブリッド検索のランカーとしてブーストレランカーを使用することはできません。ただし、そのサブリクエスト(AnnSearchRequest)のいずれかのランカーとして使用することはできます。

ブーストレランカーの例

以下の例は、上位5つの最も関連性の高いエンティティを返す必要がある単一ベクトル検索でブーストレランカーを使用する方法を示しています。また、abstract doc typeのエンティティのスコアに重みを追加します。

  1. セグメントで検索結果候補を収集します。

    以下の表は、Milvusがエンティティを2つのセグメント(00010002)に分散配置し、各セグメントが5つの候補を返すことを想定しています。

    ID

    DocType

    スコア

    ランク

    セグメント

    117

    abstract

    0.344

    1

    0001

    89

    abstract

    0.456

    2

    0001

    257

    body

    0.578

    3

    0001

    358

    title

    0.788

    4

    0001

    168

    body

    0.899

    5

    0001

    46

    body

    0.189

    1

    0002

    48

    body

    0.265

    2

    0002

    561

    abstract

    0.366

    3

    0002

    344

    abstract

    0.444

    4

    0002

    276

    abstract

    0.845

    5

    0002

  2. ブーストレランカーで指定されたフィルタリング式 (doctype='abstract') を適用します。

    以下の表のDocTypeフィールドで示されているように、Milvusはdoctypeabstractに設定されたすべてのエンティティを後続処理のためにマークします。

    ID

    DocType

    スコア

    ランク

    セグメント

    117

    abstract

    0.344

    1

    0001

    89

    abstract

    0.456

    2

    0001

    257

    body

    0.578

    3

    0001

    358

    title

    0.788

    4

    0001

    168

    body

    0.899

    5

    0001

    46

    body

    0.189

    1

    0002

    48

    body

    0.265

    2

    0002

    561

    abstract

    0.366

    3

    0002

    344

    abstract

    0.444

    4

    0002

    276

    abstract

    0.845

    5

    0002

  3. ブーストレランカーで指定された重み (weight=0.5) を適用します。

    前のステップで識別されたすべてのエンティティは、ブーストレランカーで指定された重みで乗算され、そのランクが変化します。

    ID

    DocType

    スコア

    加重スコア

    (= スコア x 重み)

    ランク

    セグメント

    117

    abstract

    0.344

    0.172

    1

    0001

    89

    abstract

    0.456

    0.228

    2

    0001

    257

    body

    0.578

    0.578

    3

    0001

    358

    title

    0.788

    0.788

    4

    0001

    168

    body

    0.899

    0.899

    5

    0001

    561

    abstract

    0.366

    0.183

    1

    0002

    46

    body

    0.189

    0.189

    2

    0002

    344

    abstract

    0.444

    0.222

    3

    0002

    48

    body

    0.265

    0.265

    4

    0002

    276

    abstract

    0.845

    0.423

    5

    0002

    📘注意

    重みは選択した浮動小数点数でなければなりません。上記の例のような場合、スコアが小さいほど関連性が高いことを示す場合は、1未満の重みを使用してください。それ以外の場合は、1より大きい重みを使用してください。

  4. すべてのセグメントから重み付きスコアに基づいて候補をアグリゲートし、結果を確定します。

    ID

    DocType

    スコア

    加重スコア

    ランク

    セグメント

    117

    abstract

    0.344

    0.172

    1

    0001

    561

    abstract

    0.366

    0.183

    2

    0002

    46

    body

    0.189

    0.189

    3

    0002

    344

    abstract

    0.444

    0.222

    4

    0002

    89

    abstract

    0.456

    0.228

    5

    0001

ブーストレランカーの使用法

このセクションでは、単一ベクトル検索の結果に影響を与えるためにブーストレランカーを使用する方法の例を見ていきます。

ブーストレランカーの作成

ブーストレランカーを検索リクエストの再ランカーとして渡す前に、以下のように再ランク付け関数として適切に定義する必要があります:

from pymilvus import Function, FunctionType

ranker = Function(
name="boost",
input_field_names=[], # 空のリストでなければなりません
function_type=FunctionType.RERANK,
params={
"reranker": "boost",
"filter": "doctype == 'abstract'",
"random_score": {
"seed": 126,
"field": "id"
},
"weight": 0.5
}
)

パラメータ

必須?

説明

値/例

name

はい

この関数の一意の識別子

"boost"

input_field_names

はい

関数を適用するベクトルフィールドのリスト(ブーストレランカーの場合は空のリストでなければなりません)

[]

function_type

はい

呼び出す関数のタイプ;再ランク付け戦略を指定するには RERANK を使用

FunctionType.RERANK

params.reranker

はい

再ランカーのタイプを指定します。

ブーストレランカーを使用するには boost に設定する必要があります。

"boost"

params.weight

はい

元の検索結果で一致したエンティティのスコアにかけられる重みを指定します。

値は浮動小数点数である必要があります。

  • 一致したエンティティの重要性を強調するには、スコアをブーストする値に設定します。

  • 一致したエンティティを低くするには、このパラメータにスコアを下げさせる値を割り当てます。

1

params.filter

いいえ

検索結果エンティティの中からエンティティを一致させるために使用されるフィルター式を指定します。 フィルタリングの説明で言及されている有効な基本フィルター式を使用できます。

注意: ==>、または<などの基本演算子のみを使用してください。text_matchphrase_matchなどの高度な演算子を使用すると検索パフォーマンスが低下します。

"doctype == 'abstract'"

params.random_score

いいえ

0から1の間の値をランダムに生成するランダム関数を指定します。以下の2つのオプション引数があります:

  • seed (数値) 擬似乱数生成器(PRNG)を開始するために使用される初期値を指定します。

  • field (文字列) 乱数生成において乱数のランダム要素として使用される値のフィールド名を指定します。一意の値を持つフィールドで十分です。

    同じシード値とフィールド値を使用することにより、生成間での一貫性を確保するには、seedfield の両方を設定することをお勧めします。

{"seed": 126, "field": "id"}

単一ブーストレランカーによる検索

ブーストレランカー関数が準備できたら、検索リクエストで参照できます。以下の例では、すでに以下のフィールドを持つコレクションが作成されていると想定しています:idvector、およびdoctype

from pymilvus import MilvusClient

# Milvusサーバーに接続
client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)

# コレクションが設定されていると想定

# 作成されたランカーを使用した類似性検索を実行
client.search(
collection_name="my_collection",
data=[[-0.619954382375778, 0.4479436794798608, -0.17493894838751745, -0.4248030059917294, -0.8648452746018911]],
anns_field="vector",
params={},
output_field=["doctype"],
ranker=ranker
)

複数ブーストレランカーによる検索

単一の検索で複数のブーストレランカーを組み合わせて検索結果に影響を与えることができます。これを行うには、複数のブーストレランカーを作成し、それらをFunctionScoreインスタンスで参照し、検索リクエストのランカーとしてFunctionScoreインスタンスを使用します。

以下の例では、0.8から1.2の間の重みを適用することによりすべての識別されたエンティティのスコアを修正する方法を示しています。

from pymilvus import MilvusClient, Function, FunctionType, FunctionScore

# 固定重みのブーストレランカーを作成
fix_weight_ranker = Function(
name="boost",
input_field_names=[], # 空のリストでなければなりません
function_type=FunctionType.RERANK,
params={
"reranker": "boost",
"weight": 0.8
}
)

# 0と0.4の間でランダムに生成された重みのブーストレランカーを作成
random_weight_ranker = Function(
name="boost",
input_field_names=[], # 空のリストでなければなりません
function_type=FunctionType.RERANK,
params={
"reranker": "boost",
"random_score": {
"seed": 126,
},
"weight": 0.4
}
)

# 関数スコアを作成
ranker = FunctionScore(
functions=[
fix_weight_ranker,
random_weight_ranker
],
params={
"boost_mode": "Multiply",
"function_mode": "Sum"
}
)

# 作成された関数スコアを使用した類似性検索を実行
client.search(
collection_name="my_collection",
data=[[-0.619954382375778, 0.4479436794798608, -0.17493894838751745, -0.4248030059917294, -0.8648452746018911]],
anns_field="vector",
params={},
output_field=["doctype"],
ranker=ranker
)

具体的には、2つのブーストレランカーがあります:1つはすべての見つかったエンティティに固定重みを適用し、もう1つはそれらにランダムな重みを割り当てます。次に、これらの2つのランカーをFunctionScoreで参照し、見つかったエンティティのスコアに重みがどのように影響するかを定義します。

以下の表は、FunctionScoreインスタンスを作成するために必要なパラメータを示しています。

パラメータ

必須?

説明

値/例

functions

はい

ターゲットランカーの名前をリストで指定します。

["fix_weight_ranker", "random_weight_ranker"]

params.boost_mode

いいえ

指定された重みが一致したエンティティのスコアにどのように影響するかを指定します。

可能な値は以下の通りです:

  • Multiply

    加重値が一致したエンティティの元のスコアに指定された重みをかけた値に等しいことを示します。

    これがデフォルト値です。

  • Sum

    加重値が一致したエンティティの元のスコアと指定された重みの合計に等しいことを示します

"Sum"

params.function_mode

いいえ

さまざまなブーストレランカーから得られた加重値がどのように処理されるかを指定します。

可能な値は以下の通りです:

  • Multiply

    一致したエンティティの最終スコアがすべてのブーストレランカーからの加重値の積に等しいことを示します。

    これがデフォルト値です。

  • Sum

    一致したエンティティの最終スコアがすべてのブーストレランカーからの加重値の合計に等しいことを示します。

"Sum"