Escolher uma estratégia de pesquisa EmbeddingList

As estratégias de pesquisa da EmbeddingList determinam a forma como o Milvus constrói um índice aproximado de candidatos para a pesquisa da EmbeddingList. A estratégia predefinida é « tokenann ». Pode mudar para « muvera » ou « lemur » quando a lista de embeddings for grande, o TokenANN for demasiado dispendioso ou uma representação aprendida/comprimida ao nível da linha for mais adequada. O resultado final continua a ser produzido pelo reclassificação do MaxSim quando a opção « emb_list_rerank » está ativada.

Por que razão existem estratégias de pesquisa

A EmbeddingList foi concebida para linhas que contêm vários vetores, tais como embeddings de tokens num documento de texto, embeddings de patches num documento visual ou embeddings de clipes num vídeo. Em vez de comparar um vetor de consulta com um vetor de linha, o MaxSim compara uma lista de embeddings de consulta com uma lista de embeddings de documento e agrega as melhores correspondências.

Isto proporciona um melhor poder de representação, mas o MaxSim exato é dispendioso em grande escala. Uma pesquisa MaxSim por força bruta teria de comparar os vetores de consulta com todos os vetores em todas as linhas candidatas. Isso é normalmente demasiado lento para uma pesquisa em produção.

### Problema - Cada linha pode conter muitos vetores. - A aplicação exata do MaxSim em todas as linhas é dispendiosa. - O tamanho do índice e a latência de pesquisa podem aumentar rapidamente.### Estratégia - Utilizar um método de recuperação aproximado na primeira fase. - Recuperar mais candidatos do que os topK solicitados. - Reordenar os candidatos com o MaxSim exato.

Neste sentido, o « emb_list_strategy » é principalmente uma estratégia de construção de índices e de recuperação de candidatos. É configurado durante a construção do índice e determina como é produzido o conjunto de candidatos da ANN na primeira fase. Parâmetros de tempo de pesquisa, tais como « retrieval_ann_ratio » e « emb_list_rerank », controlam então quantos candidatos são recuperados e se a reclassificação por MaxSim é aplicada.


Estratégias disponíveis

EstratégiaUnidade de recuperação de candidatosO que resolveMelhor ajustePrincipal compromisso
tokenannVetores individuais dentro de cada linhaMantém os vetores originais e evita perdas de compressão.Pesquisa com prioridade na qualidade, listas de embeddings curtas ou médias, embeddings de alta discriminação.Índice maior e custo de recuperação de candidatos mais elevado.
muveraUm vetor codificado por linhaComprime uma lista de embeddings numa representação FDE de dimensão fixa sem necessidade de treino.Documentos mais longos, embeddings de alta discriminação, casos em que o TokenANN é demasiado pesado.A projeção aleatória introduz perda por aproximação; a dimensão do FDE afeta a latência.
lemurUm vetor aprendido por linhaAprende uma compressão específica do corpus a partir de listas de embeddings para vetores de linha de dimensão fixa.Incorporações de baixa discriminação, recuperação multimodal ou de documentos visuais, listas de incorporações extensas.Requer treino e pode ser sensível à distribuição do corpus e ao viés do comprimento dos documentos.

TokenANN

tokenann indexa todos os vetores da lista de embeddings. Durante a pesquisa, cada vetor de consulta realiza uma recuperação ANN, os vetores correspondentes são agregados de volta às suas linhas e as linhas candidatas resultantes são reclassificadas com o MaxSim.

Utilize o TokenANN quando a qualidade for a principal prioridade. É a aproximação mais próxima do cálculo original do MaxSim, uma vez que mantém todos os vetores disponíveis no índice da primeira fase.

  • Adequado para: fragmentos de texto curtos, linhas com um número pequeno ou moderado de vetores, forte separação semântica ao nível dos tokens, linhas de base sensíveis à qualidade.

  • Menos adequado: documentos muito longos, páginas visuais com milhares de vetores de patch, restrições rigorosas de memória ou latência.

  • Comportamento ao nível do elemento: o TokenANN pode recuperar candidatos a partir de vetores individuais antes de os agregar novamente em linhas. O resultado final da pesquisa na EmbeddingList continua a ser ao nível da linha após a pontuação do MaxSim.

O MUVERA

muvera codifica cada lista de incorporação num vetor de dimensão fixa utilizando projeções aleatórias. Isto transforma a recuperação da primeira fase numa pesquisa vetorial padrão ao nível da linha. Os candidatos são então reclassificados com o MaxSim.

Utilize o MUVERA quando o TokenANN for demasiado pesado, mas não pretender uma etapa de treino. É um meio-termo prático entre qualidade e custo.

  • Ideal para: documentos de texto longos, espaços de embedding de alta discriminação, cargas de trabalho que necessitam de um índice de menor dimensão do que o TokenANN.

  • Menos adequado: espaços de incorporação de baixa discriminação ou casos em que a representação FDE se torna demasiado multidimensional para o orçamento de latência.

  • Parâmetros importantes:muvera_num_projections, muvera_num_repeats e muvera_seed.

O LEMUR

lemur treina um modelo para comprimir cada lista de embeddings numa representação de dimensão fixa. A pesquisa ANN da primeira fase é executada nos vetores aprendidos ao nível da linha, e os candidatos são reclassificados com o MaxSim.

Utilize o LEMUR quando a compressão aprendida justificar o custo de treino. Pode funcionar bem para espaços de incorporação de baixa discriminação e recuperação multimodal, mas deve ser validado em relação ao corpus-alvo, uma vez que pode ser sensível à distribuição do comprimento dos documentos.

  • Adequado para: pesquisa de documentos visuais, embeddings de patches multimodais, espaços de embedding de baixa discriminação, grandes listas de embeddings onde o TokenANN não é prático.

  • Menos adequado: corpora em constante mudança, embeddings de alta discriminação com comprimentos de documentos altamente assimétricos, cargas de trabalho em que o custo de treino é inaceitável.

  • Parâmetros importantes:lemur_hidden_dim, lemur_num_train_samples, lemur_num_epochs, lemur_batch_size, lemur_learning_rate, lemur_seed e lemur_num_layers.


Comportamento e configuração por predefinição

A estratégia EmbeddingList predefinida no Knowhere é tokenann. Se não especificar emb_list_strategy, o Knowhere utiliza o TokenANN. Os valores predefinidos no momento da pesquisa incluem retrieval_ann_ratio=3.0 e emb_list_rerank=true.

Itens de configuração por estratégia

A tabela seguinte enumera os itens de configuração específicos de cada estratégia. No Milvus, os itens de compilação são normalmente passados no mapa params ao criar um índice. Se necessitar de valores predefinidos do lado do servidor, estes devem ser definidos no ficheiro de configuração do Milvus, na secção knowhere.

EstratégiaItem de configuraçãoFasePadrãoQuando alterar
tokenannemb_list_strategy="tokenann"Criação do índicetokenannUtilize explicitamente quando pretender o comportamento de indexação padrão do vetor de elementos ou quando for utilizado o DiskANN.
muveraemb_list_strategy="muvera"Criação do índicetokenannUtilize quando pretender uma recuperação codificada ao nível da linha sem necessidade de treino.
muveramuvera_num_projectionsCriação do índice4Controla o número de projeções do SimHash. Valores mais elevados criam mais buckets e podem melhorar a qualidade da codificação, mas aumentam a dimensionalidade codificada.
muveramuvera_num_repeatsCriação do índice7Controla o número de codificações FDE independentes que são concatenadas. Valores mais elevados podem melhorar a robustez, mas aumentam o custo do índice/pesquisa.
muveramuvera_seedCriação do índice42Definir para projeções aleatórias reproduzíveis, especialmente em testes e comparações de benchmark.
lemuremb_list_strategy="lemur"Criação do índicetokenannUtilizar quando se espera que a compressão aprendida ao nível da linha funcione melhor do que a projeção aleatória fixa.
lemurlemur_hidden_dimCriação do índice256Controla o tamanho da representação comprimida. Aumente para obter mais capacidade; diminua para reduzir o consumo de memória e acelerar a recuperação.
lemurlemur_num_train_samplesCriação do índice20000Aumente quando o corpus for diversificado e a compressão aprendida não se ajustar adequadamente; reduza apenas para testes de pequena dimensão ou construções mais rápidas.
lemurlemur_num_epochsCriação do índice50Aumente se o treino não tiver convergido; reduza quando o tempo de construção for a principal restrição.
lemurlemur_batch_sizeConstrução do índice512Ajuste em função do rendimento do treino e da utilização de memória.
lemurlemur_learning_rateConstrução do índice0.001Ajuste quando o treino estiver instável ou convergir demasiado lentamente.
lemurlemur_seedCriação do índice42Defina para execuções de treino reprodutíveis.
lemurlemur_num_layersCriação do índice2Aumente apenas quando o corpus necessitar de um extrator de características mais expressivo e puder suportar o custo adicional de treino.
Todas as estratégiasretrieval_ann_ratioPesquisa3.0Aumente para recuperar mais candidatos na primeira fase e melhorar a taxa de recuperação; diminua para reduzir a latência.
Todas as estratégiasemb_list_rerankPesquisatrueMantenha ativado para o reclassificação do MaxSim. Desative apenas em experiências controladas em que a qualidade da ANN da primeira fase esteja a ser medida diretamente.

Configurar a estratégia no Milvus

No Milvus, a estratégia é passada como um parâmetro de índice ao criar um índice num campo EmbeddingList, tal como um subcampo vetorial StructArray.

index_params = client.prepare_index_params()
index_params.add_index(
    field_name="clips[clip_embedding]",
    index_type="HNSW",
    metric_type="MAX_SIM_COSINE",
    params={
        "M": 16,
        "efConstruction": 96,
        "emb_list_strategy": "muvera",
        "muvera_num_projections": 4,
        "muvera_num_repeats": 7,
        "muvera_seed": 42,
    },
)

Para o LEMUR, forneça os parâmetros de treino do LEMUR no mesmo mapa « params ».

params={
    "M": 16,
    "efConstruction": 96,
    "emb_list_strategy": "lemur",
    "lemur_hidden_dim": 256,
    "lemur_num_train_samples": 20000,
    "lemur_num_epochs": 50,
    "lemur_batch_size": 512,
    "lemur_learning_rate": 0.001,
    "lemur_seed": 42,
    "lemur_num_layers": 2,
}

Configurar os valores predefinidos do lado do servidor no Milvus

O Milvus também pode preencher parâmetros de índice a partir de milvus.yaml. A secção relevante é knowhere. Os parâmetros são organizados por tipo de índice e fase, utilizando o padrão knowhere.<INDEX_TYPE>.<stage>.<parameter>. Os parâmetros de índice fornecidos pelo utilizador têm precedência sobre estes valores predefinidos.

knowhere:
  enable: true
  HNSW:
    build:
      emb_list_strategy: muvera
      muvera_num_projections: 4
      muvera_num_repeats: 7
      muvera_seed: 42
    search:
      retrieval_ann_ratio: 3.0
      emb_list_rerank: true

Dê preferência aos parâmetros por índice para a seleção de estratégias. Um valor predefinido do ficheiro de configuração do Milvus aplica-se de forma geral aos índices desse tipo e fase. Utilize os parâmetros de create_index quando diferentes coleções ou campos necessitarem de estratégias EmbeddingList diferentes.

Configurar a recuperação de candidatos no momento da pesquisa

A estratégia determina como o índice é construído. No momento da pesquisa, utilize retrieval_ann_ratio para controlar quantos candidatos da primeira fase são recuperados antes da reclassificação do MaxSim. Valores mais elevados geralmente melhoram a recuperação, mas aumentam a latência.

results = client.search(
    collection_name=collection_name,
    data=[query_embedding_list],
    anns_field="clips[clip_embedding]",
    search_params={
        "metric_type": "MAX_SIM_COSINE",
        "params": {
            "ef": 64,
            "retrieval_ann_ratio": 3.0,
            "emb_list_rerank": True,
        },
    },
    limit=10,
)
ParâmetroFasePadrãoSignificado
emb_list_strategyConstrução do índicetokenannSeleciona a forma como os candidatos da EmbeddingList são indexados e recuperados.
retrieval_ann_ratioPesquisa3.0Fator de expansão dos candidatos para a primeira ronda da ANN.
emb_list_rerankPesquisatrueSe os candidatos recuperados devem ser reclassificados com o MaxSim.

Notas de compatibilidade: O MUVERA e o LEMUR suportam atualmente dados fp32 no Knowhere. O DiskANN suporta a EmbeddingList apenas com a estratégia TokenANN. Se utilizar tipos de vetores que não sejam fp32 ou o DiskANN, verifique o suporte da estratégia antes de alterar o valor predefinido.


Como escolher uma estratégia

Não existe uma estratégia universalmente melhor. Escolha com base no comprimento da lista de incorporação, na discriminação do espaço de incorporação, no orçamento de latência, no tamanho do índice e na possibilidade de realizar uma etapa de treino.

PerguntaSinalPonto de partida recomendado
Precisa de uma linha de base de alta qualidade?Pretende medir a melhor aproximação prática antes de otimizar o custo.tokenann
As linhas têm um número reduzido ou moderado de vetores?Cada linha contém um número reduzido de vetores de token, patch ou clip.tokenann
O TokenANN é demasiado grande ou demasiado lento?O tamanho do índice ou a latência de recuperação na primeira fase constituem o estrangulamento.muvera
Pretende compressão sem treino?Precisa de um modelo operacional mais simples e de uma codificação reprodutível.muvera
O espaço de incorporação tem baixa discriminação?As ANN a nível de token apresentam ruído, e a projeção aleatória não preserva sinal suficiente.lemur
A carga de trabalho é visual ou multimodal?As linhas contêm muitos vetores de patch, e a TokenANN é demasiado dispendiosa.lemur ou muvera
O comprimento dos documentos apresenta grande assimetria?Algumas linhas contêm muito mais vetores do que outras.Comece com muvera; valide cuidadosamente lemur.

Fluxo de trabalho de avaliação sugerido

  1. Comece com tokenann como referência de qualidade, quando o tamanho do conjunto de dados o permitir.

  2. Execute as mesmas consultas com muvera e compare a taxa de recuperação, o nDCG, a latência e o tamanho do índice.

  3. Experimente o lemur quando a lista de embeddings for grande, o espaço de embeddings for ruidoso ou a carga de trabalho for visual ou multimodal.

  4. Ajuste o parâmetro « retrieval_ann_ratio » antes de alterar demasiados parâmetros de compilação. Aumente-o se a taxa de recuperação for baixa; reduza-o se a latência for demasiado elevada.

  5. Valide sempre com consultas representativas e distribuições de comprimento de documentos. Uma estratégia que funciona com texto curto pode não funcionar com documentos visuais ou corpora de cauda longa.

### Qualidade em primeiro lugar Comece com o ` tokenann`. Utilize-o como referência para a qualidade da aproximação do MaxSim.### Equilibrado Experimente muvera quando precisar de um custo mais baixo sem adicionar um pipeline de treino.### Comprimido Experimente lemur quando for provável que a compressão aprendida ao nível da linha tenha um desempenho superior à projeção aleatória fixa.

Referências utilizadas neste rascunho

  • Testes do Milvus para emb_list_strategy, retrieval_ann_ratio e emb_list_rerank.

  • Tratamento do ficheiro de configuração do Milvus para os valores predefinidos do índice do lado do servidor na secção « knowhere ».

  • Definições de parâmetros do Knowhere para valores predefinidos e nomes de estratégias suportadas.

  • Verificações de compatibilidade do Knowhere para o suporte exclusivo a fp32 do MUVERA/LEMUR e ao suporte exclusivo ao TokenANN do DiskANN.

  • Notas de avaliação interna que comparam o TokenANN, o MUVERA e o LEMUR para a recuperação de candidatos no MaxSim.

Nota de publicação: Antes de publicar externamente, verifique quais os parâmetros oficialmente suportados na versão do Milvus de destino e se o produto pretende expor todos os parâmetros de baixo nível do Knowhere ou apenas um subconjunto mais reduzido e documentado.