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égia | Unidade de recuperação de candidatos | O que resolve | Melhor ajuste | Principal compromisso |
|---|---|---|---|---|
tokenann | Vetores individuais dentro de cada linha | Manté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. |
muvera | Um vetor codificado por linha | Comprime 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. |
lemur | Um vetor aprendido por linha | Aprende 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_repeatsemuvera_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_seedelemur_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égia | Item de configuração | Fase | Padrão | Quando alterar |
|---|---|---|---|---|
tokenann | emb_list_strategy="tokenann" | Criação do índice | tokenann | Utilize explicitamente quando pretender o comportamento de indexação padrão do vetor de elementos ou quando for utilizado o DiskANN. |
muvera | emb_list_strategy="muvera" | Criação do índice | tokenann | Utilize quando pretender uma recuperação codificada ao nível da linha sem necessidade de treino. |
muvera | muvera_num_projections | Criação do índice | 4 | Controla 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. |
muvera | muvera_num_repeats | Criação do índice | 7 | Controla 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. |
muvera | muvera_seed | Criação do índice | 42 | Definir para projeções aleatórias reproduzíveis, especialmente em testes e comparações de benchmark. |
lemur | emb_list_strategy="lemur" | Criação do índice | tokenann | Utilizar quando se espera que a compressão aprendida ao nível da linha funcione melhor do que a projeção aleatória fixa. |
lemur | lemur_hidden_dim | Criação do índice | 256 | Controla o tamanho da representação comprimida. Aumente para obter mais capacidade; diminua para reduzir o consumo de memória e acelerar a recuperação. |
lemur | lemur_num_train_samples | Criação do índice | 20000 | Aumente 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. |
lemur | lemur_num_epochs | Criação do índice | 50 | Aumente se o treino não tiver convergido; reduza quando o tempo de construção for a principal restrição. |
lemur | lemur_batch_size | Construção do índice | 512 | Ajuste em função do rendimento do treino e da utilização de memória. |
lemur | lemur_learning_rate | Construção do índice | 0.001 | Ajuste quando o treino estiver instável ou convergir demasiado lentamente. |
lemur | lemur_seed | Criação do índice | 42 | Defina para execuções de treino reprodutíveis. |
lemur | lemur_num_layers | Criação do índice | 2 | Aumente apenas quando o corpus necessitar de um extrator de características mais expressivo e puder suportar o custo adicional de treino. |
| Todas as estratégias | retrieval_ann_ratio | Pesquisa | 3.0 | Aumente para recuperar mais candidatos na primeira fase e melhorar a taxa de recuperação; diminua para reduzir a latência. |
| Todas as estratégias | emb_list_rerank | Pesquisa | true | Mantenha 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âmetro | Fase | Padrão | Significado |
|---|---|---|---|
emb_list_strategy | Construção do índice | tokenann | Seleciona a forma como os candidatos da EmbeddingList são indexados e recuperados. |
retrieval_ann_ratio | Pesquisa | 3.0 | Fator de expansão dos candidatos para a primeira ronda da ANN. |
emb_list_rerank | Pesquisa | true | Se 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.
| Pergunta | Sinal | Ponto 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
Comece com
tokenanncomo referência de qualidade, quando o tamanho do conjunto de dados o permitir.Execute as mesmas consultas com
muverae compare a taxa de recuperação, o nDCG, a latência e o tamanho do índice.Experimente o
lemurquando a lista de embeddings for grande, o espaço de embeddings for ruidoso ou a carga de trabalho for visual ou multimodal.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.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_ratioeemb_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.