Hugging Face RankerCompatible with Milvus v2.6.20+

A pesquisa vetorial ordena os resultados por distância vetorial, mas a ordem inicial pode não refletir o quão bem o texto de cada candidato responde à consulta. O Hugging Face Ranker envia a consulta e o texto dos candidatos para os Provedores de Inferência do Hugging Face hospedados e utiliza pontuações d sentence-similarity o para reordenar os candidatos devolvidos pelo Milvus.

Esta integração utiliza o router Hugging Face alojado. Para reordenar a classificação com um serviço de Inferência de Embeddings de Texto (TEI) implementado separadamente, consulte o TEI Ranker.

Limites

  • A função deve referenciar exatamente um campo « VARCHAR » não nulo em input_field_names.
  • O número de cadeias de caracteres em « queries » deve ser igual ao número de consultas de pesquisa (nq).

Como funciona

Hugging Face Ranker workflow Fluxo de trabalho do Hugging Face Ranker

O Hugging Face Ranker é executado após a pesquisa vetorial inicial:

  1. Recupera entidades candidatas. O Milvus pesquisa o campo de vetores configurado e recolhe entidades candidatas.
  2. Preparar o texto para a reclassificação. A função lê o texto da consulta em params.queries e o texto das entidades candidatas no campo VARCHAR especificado em input_field_names.
  3. Solicitar pontuações de similaridade. O Milvus envia a consulta como source_sentence e os textos candidatos como sentences através de hf-inference para o pipeline « sentence-similarity » do Hugging Face.
  4. Reordenar os candidatos. O Hugging Face devolve uma pontuação por candidato. O Milvus ordena os candidatos da pontuação mais elevada para a mais baixa e devolve os resultados reordenados.

Como são calculadas as pontuações de similaridade

How Hugging Face Ranker calculates similarity scores Como o Hugging Face Ranker calcula as pontuações de similaridade

O modelo do Hugging Face calcula as pontuações em três etapas:

  1. Preparar as entradas de texto. O Ranker lê o texto da consulta em params.queries e o texto dos candidatos no campo VARCHAR configurado.
  2. Cria representações separadas do modelo. O Milvus envia a consulta como source_sentence e os textos candidatos como sentences. O modelo codifica internamente a consulta e cada candidato separadamente.
  3. Comparar e devolver pontuações. O modelo compara a representação da consulta com a representação de cada candidato e devolve uma pontuação de similaridade por candidato.

As incorporações ou representações utilizadas pelo modelo Hugging Face constituem um processamento intermédio do modelo. O Hugging Face devolve pontuações, não vetores. A recuperação inicial de vetores e a reclassificação do modelo utilizam, portanto, representações separadas e podem recorrer a modelos diferentes.

Antes de começar

Antes de utilizar o Hugging Face Ranker, certifique-se de que possui:

  • Milvus 2.6.20 ou posterior da linha de lançamento 2.6.
  • PyMilvus 2.6.16 ou posterior.
  • Um token de acesso de utilizador do Hugging Face capaz de chamar os fornecedores de inferência.
  • Um modelo atualmente disponibilizado pelo hf-inference para a sentence-similarity tarefa.
  • Uma coleção que armazena texto candidato num campo VARCHAR que não pode ser nulo.

O Milvus não controla se um modelo do Hugging Face permanece disponível através do hf-inference, nem se o modelo cumpre os seus requisitos de estabilidade, latência e qualidade de saída. Verifique o modelo no Hugging Face e avalie-o para a sua carga de trabalho antes de o utilizar em produção.

Os exemplos utilizam sentence-transformers/all-MiniLM-L6-v2 apenas para demonstrar a configuração. O modelo não constitui uma recomendação nem uma certificação do Milvus.

Configurar credenciais

Pode configurar o token de acesso de utilizador do Hugging Face em milvus.yaml ou através de uma variável de ambiente.

A ordem de prioridade das credenciais é:

Function credential label -> provider credential label in milvus.yaml -> environment variable

Opção 1: Ficheiro de configuração

Defina o token na secção de nível superior « credential » e, em seguida, indique ao fornecedor do classificador Hugging Face o rótulo da credencial:

# milvus.yaml
credential:
  huggingface_apikey:
    apikey: <YOUR_HUGGING_FACE_TOKEN>

function:
  rerank:
    model:
      providers:
        huggingface:
          credential: huggingface_apikey
          # url: https://router.huggingface.co

Um parâmetro « credential » ao nível da função pode substituir o rótulo ao nível do fornecedor. O seu valor deve ser um rótulo de credencial definido em milvus.yaml, e não o próprio token.

Opção 2: Variável de ambiente

Se nem a função nem a configuração do fornecedor especificarem um rótulo de credencial, defina ` MILVUS_HUGGINGFACE_API_KEY ` no ambiente do serviço Milvus:

# docker-compose.yaml
standalone:
  environment:
    MILVUS_HUGGINGFACE_API_KEY: <YOUR_HUGGING_FACE_TOKEN>

Utilizar o Hugging Face Ranker

O Hugging Face Ranker é definido e aplicado no momento da pesquisa. Pode alterar ou omitir o classificador para cada pesquisa sem alterar o esquema da coleção.

Passo 1: Preparar uma coleção

O exemplo seguinte cria uma coleção com um campo de texto para reclassificação e um campo vetorial para a recuperação inicial:

from pymilvus import DataType, Function, FunctionType, MilvusClient

client = MilvusClient(uri="http://localhost:19530")

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,
)

client.insert(
    collection_name=collection_name,
    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],
        },
    ],
)

Passo 2: Definir a função de reclassificação

Defina uma função « RERANK » que leia o texto candidato a partir de document e utilize o texto da consulta em queries:

hugging_face_ranker = Function(
    name="hugging_face_semantic_ranker",
    input_field_names=["document"],
    function_type=FunctionType.RERANK,
    params={
        "reranker": "model",
        "provider": "huggingface",
        "model_name": "sentence-transformers/all-MiniLM-L6-v2",
        "hf_provider": "hf-inference",
        "queries": ["renewable energy developments"],
        "credential": "huggingface_apikey",
        "max_client_batch_size": 32,
    },
)

Se utilizar apenas a credencial ao nível do fornecedor ou a variável de ambiente, omita « credential » dos parâmetros da função.

A tabela seguinte descreve os parâmetros do Hugging Face Ranker:

ParâmetroObrigatório?Descrição
rerankerSimA implementação de reclassificação. Defina este valor como « model ».
providerSimO fornecedor do modelo. Defina este valor como huggingface.
model_nameSimO ID do modelo Hugging Face para um modelo disponibilizado através de hf-inference para a tarefa « sentence-similarity ».
queriesSimCadeias de caracteres de consulta utilizadas para a reclassificação. Indique exatamente uma cadeia de caracteres por consulta de pesquisa, mesmo quando a recuperação inicial utiliza vetores de consulta.
hf_providerNãoA rota do Provedor de Inferência do Hugging Face. O valor predefinido e único suportado no Milvus 2.6.20 é hf-inference.
credentialNãoO rótulo de uma credencial definida na secção de nível superior « credential » de « milvus.yaml ». Este valor não é o próprio token.
max_client_batch_sizeNãoO número máximo de textos candidatos enviados numa única solicitação ao Hugging Face. O valor predefinido é 32, e o valor deve ser superior a 0.

Passo 3: Pesquisar com o classificador

Passe a função através do parâmetro ranker de search():

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,
    consistency_level="Strong",
)

print(results)

O Milvus recupera primeiro os candidatos a partir de dense e, em seguida, utiliza o texto da consulta em queries e o texto dos candidatos em document para calcular os índices de similaridade entre frases. Os candidatos devolvidos são ordenados de acordo com os índices do Hugging Face.

Resolução de problemas

O modelo não está disponível para a semelhança de frases

Abra a página do modelo no Hugging Face e verifique a secção «Inference Providers ». Confirme se hf-inference fornece o modelo para sentence-similarity. Caso contrário, selecione outro modelo que suporte a tarefa.

O número de cadeias de caracteres de consulta não corresponde ao pedido de pesquisa

O número de cadeias de caracteres em queries deve ser igual ao número de consultas de pesquisa (nq). Para uma pesquisa com um vetor de consulta, forneça exatamente uma cadeia de caracteres de consulta.

O texto do candidato está em falta ou é nulo

Certifique-se de que input_field_names contém exatamente um campo VARCHAR não nulo e que todas as entidades candidatas contêm texto nesse campo.

O Milvus reporta a falta de credenciais do Hugging Face

Confirme se o rótulo de credenciais «Function» existe em milvus.yaml, se o rótulo ao nível do fornecedor é válido ou se MILVUS_HUGGINGFACE_API_KEY está presente no ambiente de serviço do Milvus.

Próximos passos