A integração do LEMUR ao txtai aborda um problema prático dos modelos de recuperação por interação tardia: esses modelos mantêm um vetor para cada token da consulta ou do documento, o que lhes proporciona detalhes mais precisos do que representar cada texto por um único vetor, mas dificulta seu uso com índices tradicionais de pesquisa densa. O txtai oferece um caminho que converte essa representação multivetorial em um vetor de dimensão fixa que pode ser pesquisado pelo mesmo tipo de índice, com a adição de uma opção ajustável chamada mean centering para melhorar o aproveitamento das diferenças direcionais nos vetores de tokens quando eles são muito semelhantes.
O material, publicado em 13 de agosto de 2026 no blog do Hugging Face como um artigo comunitário escrito por Morgan Carr, apresenta a motivação por trás da mudança, resultados de experimentos específicos e o método para treinar e carregar um artefato LEMUR no txtai. Ele não apresenta o resultado como um ranking geral entre técnicas de recuperação, pois as comparações se limitaram a um modelo, três conjuntos de dados, um dispositivo e uma pesquisa exata.
De vários vetores a um vetor indexável
Na pesquisa por interação tardia, cada token da consulta é comparado aos tokens do documento usando MaxSim; o maior valor de correspondência para cada token da consulta é mantido e, em seguida, esses valores são somados. Já o LEMUR, ou Learned Multi-Vector Retrieval, aprende uma codificação de dimensão fixa que tenta aproximar o resultado dessa interação, mantendo a possibilidade de usar um índice de vetores tradicional.
O artefato LEMUR no txtai consiste em um codificador de características, estatísticas para normalizar as saídas e uma amostra de vetores de tokens. Durante a inferência, a consulta é convertida em uma soma de características aprendidas, enquanto o documento é representado por um conjunto de pesos de mínimos quadrados ordinários sobre a amostra armazenada. O produto interno entre os dois vetores fixos torna-se uma aproximação do resultado original da interação tardia.
O artefato resultante é específico do conjunto de dados usado no treinamento e deve ser treinado antes de carregar um índice de embeddings no txtai. O artefato é salvo como config.json e model.safetensors. A configuração epochs=100 utiliza o caminho MLP orientado à qualidade, enquanto epochs=0 seleciona características ELM aleatórias determinísticas como uma alternativa de menor custo.
A escolha dos dados de treinamento foi um fator decisivo
Um experimento de ablação no conjunto nfcorpus mostrou que a distribuição dos vetores usada para aprender o mapa de características influencia mais do que algumas outras escolhas de treinamento. Quando o MLP foi treinado com vetores de tokens do codificador de documentos, o NDCG@10 atingiu 0.15870, valor inferior ao resultado não treinado do ELM, de 0.19187. Ao usar vetores do codificador de consultas, o resultado subiu para 0.24868 e chegou a 0.25534 após a escolha do número de épocas com base na validação.
De acordo com a análise apresentada no material, a escolha da distribuição de aprendizado explicou 93% da melhoria medida entre o experimento com vetores de documentos e o resultado final, enquanto a escolha das épocas contribuiu com os 7% restantes. Por isso, o LemurTrainer define learncategory como query por padrão, permitindo selecionar data ou passar um conjunto de aprendizado separado.
O que o teste comparativo mostrou?
A comparação utilizou o modelo colbert-ir/colbertv2.0, uma NVIDIA GeForce RTX 4080 SUPER, torch 2.13.0+cu130 e uma pesquisa exata do Faiss por meio de IDMap,Flat. Foram comparadas a versão padrão do MUVERA, com largura de 10.240 dimensões, uma versão do MUVERA reduzida para 2.048 dimensões e o LEMUR com codificação MLP de 2.048 dimensões.
- No nfcorpus, o LEMUR registrou 0.25524, contra 0.16299 do MUVERA com o mesmo tamanho e 0.23544 do MUVERA com o tamanho padrão.
- No scifact, o LEMUR registrou 0.54910, contra 0.36757 do MUVERA reduzido e 0.50021 da versão padrão.
- No arguana, o LEMUR registrou 0.42556, contra 0.26280 do MUVERA reduzido e 0.34614 da versão padrão.
Isso equivale a uma melhoria sobre o MUVERA de mesmo tamanho de 56.6% no nfcorpus, 49.4% no scifact e 61.9% no arguana. Em comparação com o vetor padrão do MUVERA, a melhoria foi de 8.4%, 9.8% e 22.9%, respectivamente. Os índices LEMUR usados na medição também ocuparam um quinto do espaço dos índices MUVERA padrão, pois a largura do vetor caiu de 10.240 para 2.048 dimensões.
Mas o escopo desses números é importante: os experimentos com fiqa e scidocs não foram concluídos com o conjunto de dados solicitado, e as medições utilizaram um único modelo, um único dispositivo e uma pesquisa exata. O txtai usa pesquisa exata até 5.000 linhas e, depois, passa para um índice IVF. No experimento com scifact, o IVF padrão reduziu o NDCG@10 do LEMUR em 43% em comparação com a pesquisa exata, contra uma redução de 25% para o MUVERA. Portanto, não se pode presumir que o resultado da pesquisa exata permanecerá igual ao ampliar a escala ou usar uma pesquisa aproximada.
Por que o mean centering foi adicionado?
Ao passar do ColBERTv2 para o lightonai/LateOn, o teste constatou que os vetores de tokens eram muito semelhantes direcionalmente. Em uma amostra de 5.000 pares, a similaridade média de cosseno entre os vetores foi de 0.9508, e a dispersão do MaxSim foi de 0.0559. Após subtrair a média do conjunto e renormalizar, a similaridade caiu para 0.0033 e a dispersão do MaxSim subiu para 0.4772. Isso não constitui, por si só, uma métrica de recuperação, mas indica que o centralização permitiu ao codificador de dimensão fixa dispor de um espaço direcional maior para capturar.
Os testes de recuperação confirmaram que o benefício depende do modelo. Na matriz LateOn, o centralização no nível do lote foi mais forte do que desativá-lo ou usar a média do conjunto nas quatro células medidas. Por exemplo, o resultado do LEMUR no nfcorpus subiu de 0.00000 sem centralização para 0.33309 com centralização do lote, enquanto no scifact subiu de 0.04985 para 0.69016. No entanto, os experimentos com ColBERTv2 mostraram que a centralização pode ser neutra ou prejudicar o MUVERA; por isso, ela não foi apresentada como uma opção universal e incondicional.
A regra padrão nas mudanças integradas ativa a centralização do lote quando o modelo carregado contém mais de uma camada linear de torch.nn.Linear. Modelos com zero ou uma camada preservam seu comportamento anterior, com a possibilidade de substituir manualmente a decisão. A centralização ocorre após a normalização dos vetores de tokens e antes do LEMUR ou MUVERA, seguida por outra operação de normalização. É possível escolher o escopo document, batch ou collection; o escopo collection também aceita uma média incorporada ou um arquivo Safetensors contendo center.mean.
O que muda na prática para o usuário?
O uso do LEMUR exige uma etapa de treinamento separada antes da criação do índice, e as configurações dos vetores durante o treinamento devem ser consistentes com as configurações de carregamento. O exemplo publicado usa center: true com um artefato LEMUR e fixa o Faiss em IDMap,Flat quando a pesquisa exata é prática. A versão mais recente publicada do txtai no material é a v9.12.0, enquanto as mudanças integradas têm como alvo a v9.13.0; para experimentar o código-fonte anterior à versão, é possível instalar a versão master do repositório do GitHub em um ambiente isolado.
A conclusão prática não é que o LEMUR ou a centralização superem todas as alternativas em todos os casos, mas que o txtai passou a oferecer duas ferramentas separadas para dois problemas diferentes: o LEMUR para reduzir a representação da interação tardia a um vetor fixo, e a centralização para tratar a geometria inadequada dos vetores de tokens em alguns modelos. Ainda são necessários testes mais amplos com diferentes modelos, conjuntos de dados e índices aproximados configurados antes que os resultados possam ser generalizados.