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 eminput_field_names. - O número de cadeias de caracteres em «
queries» deve ser igual ao número de consultas de pesquisa (nq).
Como funciona
Fluxo de trabalho do Hugging Face Ranker
O Hugging Face Ranker é executado após a pesquisa vetorial inicial:
- Recupera entidades candidatas. O Milvus pesquisa o campo de vetores configurado e recolhe entidades candidatas.
- Preparar o texto para a reclassificação. A função lê o texto da consulta em
params.queriese o texto das entidades candidatas no campoVARCHARespecificado eminput_field_names. - Solicitar pontuações de similaridade. O Milvus envia a consulta como
source_sentencee os textos candidatos comosentencesatravés dehf-inferencepara o pipeline «sentence-similarity» do Hugging Face. - 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
Como o Hugging Face Ranker calcula as pontuações de similaridade
O modelo do Hugging Face calcula as pontuações em três etapas:
- Preparar as entradas de texto. O Ranker lê o texto da consulta em
params.queriese o texto dos candidatos no campoVARCHARconfigurado. - Cria representações separadas do modelo. O Milvus envia a consulta como
source_sentencee os textos candidatos comosentences. O modelo codifica internamente a consulta e cada candidato separadamente. - 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-inferencepara asentence-similaritytarefa. - Uma coleção que armazena texto candidato num campo
VARCHARque 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âmetro | Obrigatório? | Descrição |
|---|---|---|
reranker | Sim | A implementação de reclassificação. Defina este valor como « model ». |
provider | Sim | O fornecedor do modelo. Defina este valor como huggingface. |
model_name | Sim | O ID do modelo Hugging Face para um modelo disponibilizado através de hf-inference para a tarefa « sentence-similarity ». |
queries | Sim | Cadeias 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_provider | Não | A rota do Provedor de Inferência do Hugging Face. O valor predefinido e único suportado no Milvus 2.6.20 é hf-inference. |
credential | Não | O 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_size | Não | O 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
- Para obter informações sobre o comportamento e os limites do classificador de modelos partilhado, consulte a Visão geral do classificador de modelos.
- Para gerar embeddings através dos Provedores de Inferência do Hugging Face hospedados, consulte Hugging Face.
- Para aplicar o classificador à pesquisa híbrida, consulte Pesquisa Híbrida Multiveatorial.