メインコンテンツまでスキップ

Hugging Face Ranker

Public Preview

ベクトル検索では、結果はベクトル距離に基づいて並べられますが、初期の順序は、各候補のテキストがクエリにどれだけ適切に回答しているかを反映しない場合があります。Hugging Face モデルプロバイダー統合 を使用すると、Hugging Face Ranker は、Hugging Face の sentence-similarity タスクによるスコアを使用して、ベクトル検索で返された候補を並べ替えます。

仕組み​

Hugging Face Ranker は、ベクトル検索後に候補エンティティを再ランク付けします。次の図は、アプリケーション、Zilliz Cloud、Hugging Face の間の一般的なワークフローを示しています。

KDOBw9YpBhRHkJbwjL3cmZfWnvf

一般的なワークフローは、次の 4 つのステップで構成されます。

  1. 候補エンティティを取得します。 Zilliz Cloud は、設定されたベクトルフィールドに対してベクトル検索を実行し、候補エンティティを返します。

  2. 再ランク付け用のテキストを準備します。 Ranker は、params.queries からクエリテキストを読み取り、input_field_names で指定された null を許容しない VARCHAR フィールドから候補テキストを読み取ります。

  3. 再ランク付けスコアをリクエストします。 Zilliz Cloud はクエリと候補テキストを Hugging Face に送信し、候補ごとに新しく計算された類似度スコアを受け取ります。

  4. 結果を再ランク付けして返します。 Zilliz Cloud はスコアを候補エンティティにマッピングし、スコアの高い順に並べ替えて、再ランク付けされた結果を返します。

再ランク付けスコアの計算方法

上記の一般的なワークフローは、再ランク付けが行われる場所を示しています。次のプロセスでは、Hugging Face が候補ごとに新しい類似度スコアを計算する方法を説明します。

L1jQwyef6hP51bb9EYjc6pV6nTd

  1. テキスト入力を準備します。 Ranker は、params.queries からクエリテキストを読み取り、input_field_names で指定された VARCHAR フィールドから空でない候補テキストを読み取ります。

  2. 埋め込みを作成します。 Zilliz Cloud は、クエリテキストを source_sentence として、候補テキストを sentences として、hf-inference を介して Hugging Face に送信し、Sentence Similarity タスクを実行します。モデルは概念的には、クエリ埋め込みと候補テキスト用の個別の埋め込みを作成します。

  3. スコアを計算して返します。 モデルはクエリ埋め込みを各候補の埋め込みと比較し、候補ごとに 1 つの類似度スコアを返します。

図に示されている埋め込みはモデル処理の中間結果であり、Hugging Face API は類似度スコアのみを返します。ベクトル検索と再ランク付けでは、別々の表現とスコアが使用されます。Hugging Face Ranker は、候補ベクトルや検索スコアを再利用しません。検索ベクトルの作成に使用される埋め込みモデルと、再ランク付けに使用される Hugging Face モデルは独立しており、異なる場合があります。

事前に計算されたベクトルを挿入する場合は、再ランク付け中に Hugging Face Ranker が読み取れるよう、元の候補テキストも VARCHAR フィールドに保存してください。

事前準備​

Hugging Face Ranker を使用する前に、以下を確認してください。

Notes

Zilliz Cloud は、hf-inference を介して Hugging Face に接続し、Hugging Face Ranker に sentence-similarity タスクを使用します。Zilliz Cloud は、特定のモデルが現在 hf-inference によって提供されているか、引き続き利用可能か、または安定性、レイテンシ、出力品質に関する要件を満たしているかを制御できません。選択したモデルを Hugging Face で確認し、本番環境で使用する前にワークロードに対して評価してください。

  • Hugging Face モデルプロバイダー統合を作成し、その統合 ID をコピーすること。手順については、モデルプロバイダーとの統合 を参照してください。

  • モデルの Hugging Face ページを開き、Inference Providers セクションを確認すること。hf-inference が現在、sentence-similarity タスク用にそのモデルを提供していることを確認してください。

  • コレクションが、null を許容しない VARCHAR フィールドに候補テキストを保存していること。再ランク関数は、input_field_names 内のそのようなフィールドを正確に 1 つ参照する必要があります。コレクションには他のテキストフィールドを含めることができます。

Hugging Face Ranker の使用​

Hugging Face Ranker は、検索時に定義および適用されます。コレクションスキーマを変更せずに、検索リクエストごとに Ranker を有効化、無効化、または変更できます。

準備​

次の設定では、3 つのフィールドを持つコレクションを作成します。id は主キー、document は再ランク付けに使用する候補テキストを保存する VARCHAR フィールド、dense は最初の検索に使用するベクトルフィールドです。また、検索と再ランク付けの例に使用するサンプルデータも挿入します。

サンプルデータを含むコレクションを準備する
python
from pymilvus import DataType, MilvusClient
from pymilvus import Function, FunctionType

client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN",
)

collection_name = "hugging_face_rerank_demo"

schema = client.create_schema()

schema.add_field("id", DataType.INT64, is_primary=True, auto_id=False)
schema.add_field("document", DataType.VARCHAR, max_length=1000)
schema.add_field("dense", DataType.FLOAT_VECTOR, dim=4)

index_params = client.prepare_index_params()

index_params.add_index(
field_name="dense",
index_type="AUTOINDEX",
metric_type="COSINE",
)

client.create_collection(
collection_name=collection_name,
schema=schema,
index_params=index_params,
)

data = [
{
"id": 1,
"document": "Recent renewable energy developments include improved solar efficiency.",
"dense": [0.10, 0.20, 0.30, 0.40],
},
{
"id": 2,
"document": "Climate policy and carbon markets have evolved rapidly in recent years.",
"dense": [0.11, 0.19, 0.28, 0.39],
},
{
"id": 3,
"document": "New battery technology helps stabilize wind and solar power generation.",
"dense": [0.90, 0.10, 0.05, 0.02],
},
{
"id": 4,
"document": "Vector databases support similarity search for machine learning applications.",
"dense": [0.01, 0.02, 0.03, 0.04],
},
]

client.insert(collection_name=collection_name, data=data)

再ランク関数を定義する​

ベクトル検索で返された候補を再ランク付けするために、document に保存されたテキストを使用する RERANK 関数を定義します。この関数では、クエリテキスト、Hugging Face モデル、およびモデルプロバイダー統合も指定します。

python
hugging_face_ranker = Function(
name="hugging_face_semantic_ranker",
# Use the text stored in the "document" VARCHAR field for reranking.
input_field_names=["document"],
function_type=FunctionType.RERANK,
params={
"reranker": "model",
"provider": "huggingface",
"model_name": "sentence-transformers/all-MiniLM-L6-v2",
"queries": ["renewable energy developments"],
"integration_id": "YOUR_INTEGRATION_ID",
"max_client_batch_size": 32,
},
)

この例では、構成を説明する目的でのみ sentence-transformers/all-MiniLM-L6-v2 を使用しています。このモデルは、Zilliz Cloud による推奨または認定を示すものではありません。

次の表では、Hugging Face Ranker の params でユーザーが構成可能なすべてのエントリについて説明します。

パラメーター必須説明
rerankerはい再ランク付けの実装です。この値には model を設定します。
providerはいZilliz Cloud のモデルプロバイダーです。この値には huggingface を設定します。
model_nameはいsentence-similarity タスク用に hf-inference を介して現在提供されているモデルの Hugging Face モデル ID です。
queriesはい再ランク付けに使用するクエリテキストのリストです。最初の検索でクエリベクトルを使用する場合でも、検索クエリ(nq)ごとに 1 つの文字列を指定します。
integration_idはいHugging Face モデルプロバイダー統合の ID です。手順については、モデルプロバイダーとの統合 を参照してください。
max_client_batch_sizeいいえ1 回のリクエストで Hugging Face に送信する候補テキストの最大数です。デフォルト値は 32 です。値は 0 より大きい必要があります。

関数定義に Hugging Face の認証情報を含めないでください。

再ランク関数を使用した検索​

ranker パラメーターを介して関数を search() に渡します。

python
query_vector = [0.12, 0.21, 0.29, 0.41]

results = client.search(
collection_name=collection_name,
data=[query_vector],
anns_field="dense",
limit=3,
output_fields=["document"],
ranker=hugging_face_ranker,
)

print(results)

検索では、まず dense ベクトルフィールドから候補エンティティを取得します。次に、Hugging Face Ranker は、queries のクエリテキストと各候補の document テキストを使用して、sentence-similarity タスクを通じて類似度スコアを計算します。Zilliz Cloud は、スコアの降順で候補を返します。

トラブルシューティング​

sentence-similarity タスクでモデルを利用できない場合​

Hugging Face でモデルページを開き、Inference Providers セクションを確認します。hf-inference が現在そのモデルを提供しており、モデルが sentence-similarity をサポートしていることを確認してください。いずれかの要件が満たされていない場合は、別のモデルを選択し、そのモデルページで確認してください。Zilliz Cloud は、Hugging Face モデルのサポート対象モデルカタログを維持していません。

クエリテキストの数が検索リクエストと一致しない​

queries 内の文字列の数は、検索クエリ(nq)の数と等しくなければなりません。1 つのクエリベクトルを使用する検索では、クエリ文字列を正確に 1 つ指定してください。

次のステップ​

Hugging Face Ranker は、ハイブリッド検索でも使用できます。検索とハイブリッド検索では、同じ方法で Ranker が適用されます。検索時に、ranker パラメーターを介して再ランク関数を渡します。

詳細については、Multi-ベクトル Hybrid Search を参照してください。