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

Boost Ranker

ベクトル距離に基づいて計算された意味的類似性のみに依存するのではなく、Boost Ranker を使用することで、検索結果に有意義な影響を与えることができます。これは、メタデータフィルタリングを使用して検索結果を迅速に調整する場合に理想的です。

検索リクエストに Boost Ranker 関数が含まれている場合、Milvus は関数内のオプションのフィルタリング条件を使用して検索結果候補の中から一致するものを見つけ、指定された重みを適用してそれらのスコアを引き上げます。これにより、最終結果において一致したエンティティのランキングを促進または降格させることができます。

Boost Ranker の使用時期

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

ユースケース

Boost Ranker が効果的な理由

ビジネス主導のコンテンツ優先順位付け

  • E コマースの検索結果でプレミアム製品を強調表示する

  • ユーザーエンゲージメント指標(閲覧数、いいね、シェアなど)が高いコンテンツの可視性を高める

  • 時間制約のある検索アプリケーションで最新のコンテンツを上位に表示する

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

  • 正確なフレーズや関連性の高いキーワードに一致する結果を促進する

インデックスの再構築やベクトル埋め込みモデルの変更(これらは時間のかかる作業です)を行う必要なく、リアルタイムでオプションのメタデータフィルタを適用することにより、検索結果内の特定のアイテムを即座に促進または降格させることができます。この仕組みにより、変化するビジネス要件に容易に適応できる柔軟で動的な検索ランキングが可能になります。

戦略的なコンテンツの降格

  • 在庫が少ないアイテムの目立たせ方を減らす(ただし完全に削除はしない)

  • 検閲を行わずに、問題のある用語を含む可能性のあるコンテンツのランクを下げる

  • 技術検索ではアクセス可能にしたまま、古いドキュメントのランクを下げる

  • マーケットプレイス検索において競合他社の製品の可視性を微妙に下げる

  • 品質が低いことを示す指標(フォーマットの問題、長さ不足など)を持つコンテンツの関連性を低下させる

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

Boost Ranker の仕組み

以下の図は、Boost Ranker の主なワークフローを示しています。

Hq0awfjC7h0Ty3bvsUEcasOHncb

データを挿入すると、Zilliz Cloud はそれをセグメントに分散します。検索時には、各セグメントが一連の候補を返し、Zilliz Cloud はすべてのセグメントからこれらの候補をランキングして最終結果を生成します。検索リクエストに Boost Ranker が含まれている場合、Zilliz Cloud は精度の低下を防ぎ、再現率を向上させるために、各セグメントからの候補結果にそれを適用します。

結果を確定する前に、Milvus は Boost Ranker を使用してこれらの候補を以下のように処理します。

  1. Boost Ranker で指定されたオプションのフィルタリング式を適用して、式に一致するエンティティを特定します。

  2. Boost Ranker で指定された重みを適用して、特定されたエンティティのスコアを引き上げます。

📘Notes

Boost Ranker はマルチベクトルハイブリッド検索では使用できません。

Boost Ranker の例

以下の例は、最も関連性の高い 5 つのエンティティを返す必要があり、abstract ドキュメントタイプのエンティティのスコアに重みを追加する単一ベクトル検索における Boost Ranker の使用を示しています。

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

    以下の表は、Milvus がエンティティを 2 つのセグメント(0001 および 0002)に分散し、各セグメントが 5 つの候補を返すと仮定しています。

    ID

    DocType

    Score

    Rank

    segment

    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

    0265

    2

    0002

    561

    abstract

    0.366

    3

    0002

    344

    abstract

    0.444

    4

    0002

    276

    abstract

    0.845

    5

    0002

  2. Boost Ranker で指定されたフィルタリング式を適用します (doctype='abstract')。

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

    ID

    DocType

    Score

    Rank

    segment

    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

    0265

    2

    0002

    561

    abstract

    0.366

    3

    0002

    344

    abstract

    0.444

    4

    0002

    276

    abstract

    0.845

    5

    0002

  3. Boost Ranker で指定された重みを適用します (weight=0.5)。

    前のステップで特定されたすべてのエンティティは、Boost Ranker で指定された重数を乗算され、その結果としてランクが変更されます。

    ID

    DocType

    Score

    Weighted Score

    (= score x weight)

    Rank

    segment

    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

    📘Notes

    重みは任意に選択する浮動小数点数である必要があります。上記の例のように、スコアが小さいほど関連性が高い場合は、1 より小さい重みを使用してください。それ以外の場合は、1 より大きい重みを使用してください。

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

    ID

    DocType

    Score

    Weighted Score

    Rank

    segment

    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

Boost Ranker の使用方法

このセクションでは、Boost Ranker を使用して単一ベクトル検索の結果に影響を与える方法の例を示します。

Boost Ranker の作成

検索リクエストの reranker として Boost Ranker を渡す前に、以下のように Boost Ranker をランキング関数として適切に定義する必要があります。

from pymilvus import Function, FunctionType

rerank = Function(
name="boost",
input_field_names=[], # Must be an empty list
function_type=FunctionType.RERANK,
params={
"reranker": "boost",
"filter": "doctype == 'abstract'",
"random_score": {
"seed": 126,
"field": "id"
},
"weight": 0.5
}
)

パラメーター

必須ですか?

説明

値/例

name

はい

この関数の一意の識別子

"boost"

input_field_names

はい

関数を適用するベクトルフィールドのリスト(Boost Ranker の場合は空である必要があります)

[]

function_type

はい

呼び出す関数のタイプ。再ランキング戦略を指定するには RERANK を使用します

FunctionType.RERANK

params.reranker

はい

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

Boost Ranker を使用するには、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"}

単一の Boost Ranker を使用した検索

Boost Ranker 関数の準備が整ったら、検索リクエストでそれを参照できます。以下の例では、idvector、および doctype というフィールドを持つコレクションがすでに作成されていることを前提としています。

from pymilvus import MilvusClient

# Connect to the Milvus server
client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)

# Assume you have a collection set up

# Conduct a similarity search using the created ranker
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=rerank
)

Search with multiple Boost Rankers

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

以下の例では、0.8 から 1.2 の間の重みを適用することで、特定されたすべてのエンティティのスコアを変更する方法を示しています。

from pymilvus import MilvusClient, Function, FunctionType, FunctionScore

# Create a Boost Ranker with a fixed weight
fix_weight_ranker = Function(
name="boost",
input_field_names=[], # Must be an empty list
function_type=FunctionType.RERANK,
params={
"reranker": "boost",
"weight": 0.8
}
)

# Create a Boost Ranker with a randomly generated weight between 0 and 0.4
random_weight_ranker = Function(
name="boost",
input_field_names=[], # Must be an empty list
function_type=FunctionType.RERANK,
params={
"reranker": "boost",
"random_score": {
"seed": 126,
},
"weight": 0.4
}
)

# Create a Function Score
ranker = FunctionScore(
functions=[
fix_weight_ranker,
random_weight_ranker
],
params={
"boost_mode": "Multiply",
"function_mode": "Sum"
}
)

# Conduct a similarity search using the created Function Score
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 つの Boost Ranker があります。一方は検出されたすべてのエンティティに固定の重みを適用し、もう一方はランダムな重みを割り当てます。その後、これらの 2 つのランカーを FunctionScore で参照し、重みが検出されたエンティティのスコアにどのように影響するかを定義します。

以下の表は、FunctionScore インスタンスを作成するために必要なパラメータの一覧です。

パラメータ

必須ですか?

説明

値/例

functions

はい

対象となるランカーの名前をリストで指定します。

["fix_weight_ranker", "random_weight_ranker"]

params.boost_mode

いいえ

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

可能な値は次のとおりです。

  • Multiply

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

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

  • Sum

    重み付きの値が、一致するエンティティの元のスコアと指定された重みの和に等しいことを示します。

"Sum"

params.function_mode

いいえ

さまざまな Boost Ranker からの重み付き値をどのように処理するかを指定します。

可能な値は次のとおりです。

  • Multiply

    一致するエンティティの最終スコアが、すべての Boost Ranker からの重み付き値の積に等しいことを示します。

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

  • Sum

    一致するエンティティの最終スコアが、すべての Boost Ranker からの重み付き値の和に等しいことを示します。

"Sum"