Compreendendo o algoritmo vizinho mais próximo aproximado (ANN)

Se você cresceu em uma época antes da estreia da Internet, vai lembrar que nem sempre foi fácil encontrar coisas novas para gostar. Descobríamos novas bandas quando as ouvíamos no rádio por acaso, víamos um novo programa de TV sem querer porque esquecíamos de mudar de canal, e encontrávamos um novo videogame favorito baseado quase que inteiramente na imagem da capa. 

Hoje em dia, as coisas são bem diferentes. O Spotify me indica artistas que combinam com meus gostos, a Netflix destaca filmes e séries que sabe que vamos gostar, e o Xbox sabe o que provavelmente vamos querer jogar em seguida. Esses sistemas de recomendação tornam muito mais fácil encontrarmos o que realmente procuramos, e são alimentados por algoritmos de vizinho mais próximo (NN). O NN analisa a vasta quantidade de informações disponíveis e identifica o que mais se aproxima de algo que você gosta ou que está procurando.

Mas os algoritmos NN têm uma falha inerente. Se a quantidade de dados que eles estiverem analisando ficar muito grande, rastrear cada opção levará uma eternidade. Isso é um problema, especialmente porque essas fontes de dados crescem cada vez mais a cada ano. É aqui que o vizinho mais próximo aproximado (ANN) pega o bastão do NN e muda o jogo.

Neste artigo, abordaremos os seguintes tópicos principais sobre ANN:

  • Definição de ANN

  • Como funciona o ANN

  • Quando usar a busca de ANN

  • Importância do ANN na busca vetorial

  • Vários tipos de algoritmos de ANN

Vizinho mais próximo aproximado — uma explicação

O vizinho mais próximo aproximado (ANN, na sigla em inglês) é um algoritmo encontra, em um conjunto de dados, um ponto de dados muito próximo do ponto de consulta fornecido, mas não necessariamente o mais próximo absoluto. Um algoritmo NN realiza uma busca exaustiva em todos os dados para encontrar a correspondência perfeita, enquanto um algoritmo de ANN se contenta com uma correspondência suficientemente próxima.

Isso pode parecer uma solução pior, mas na verdade é a chave para conseguir uma busca rápida por similaridade. O ANN usa atalhos inteligentes e estruturas de dados para navegar com eficiência no espaço de busca. Portanto, em vez de consumir enormes quantidades de tempo e recursos, ele pode identificar pontos de dados com muito menos esforço que estejam próximos o suficiente para serem úteis na maioria dos cenários práticos.

Essencialmente, é uma troca. Se você realmente precisa encontrar a melhor combinação, pode fazer isso às custas da velocidade e do desempenho com o NN. Mas se você pode tolerar uma pequena queda na precisão, o ANN é quase sempre uma solução melhor.

Como funcionam os algoritmos de vizinho mais próximo aproximado

A primeira parte de como o ANN funciona é a redução da dimensionalidade, onde o objetivo é transformar um conjunto de dados de dimensão superior em um conjunto de dimensão inferior. A meta é tornar a tarefa do modelo preditivo menos complicada e mais eficiente do que analisar todos os dados.

Esses algoritmos baseiam-se no conceito matemático de espaços métricos — onde os pontos de dados residem e as distâncias entre eles são definidas. Essas distâncias devem obedecer a regras específicas (não negatividade, identidade, simetria, desigualdade triangular), e funções comuns como distância euclidiana ou similaridade de cosseno são usadas para calculá-las. 

Para entender melhor, imagine que você esteja de férias procurando a casa que alugou. Em vez de verificar cada edifício um por um (dimensional superior), você usaria um mapa, que reduz o problema a duas dimensões (dimensional inferior). (Este é um exemplo deliberadamente simplista.) A redução da dimensionalidade não é o único método empregado pelos algoritmos de ANN para melhorar a eficiência.)

Os algoritmos de ANN também utilizam estruturas de dados inteligentes chamadas índices para melhorar a eficiência. Ao pré-processar os dados nesses índices, o ANN pode navegar pelo espaço de busca com muito mais rapidez. Pense neles como sinais de rua, ajudando você a encontrar onde você está no Maps para chegar mais rápido à sua casa de férias.

Quando usar a busca de vizinho mais próximo aproximado

No mundo acelerado da ciência de dados, a eficiência reina suprema. Embora encontrar o verdadeiro vizinho mais próximo (busca do vizinho mais próximo exato) tenha valor, muitas vezes tem um custo computacional, como já falamos. É aqui que a busca ANN se destaca, oferecendo uma compensação atraente: velocidade da luz com alta, mas não absoluta, precisão.

Mas quando exatamente você deve escolher o ANN em vez de outros métodos de busca?

O vizinho mais próximo exato pode ser lento, mas é a melhor opção quando a precisão é sua prioridade ou você está usando pequenos conjuntos de dados. Os k-vizinhos mais próximos (kNN) situa-se entre NN e ANN, oferecendo resultados mais rápidos enquanto mantém alta precisão. Porém, pode ser difícil acertar ao decidir o valor de k, e também apresenta dificuldades com dados de alta dimensionalidade.

A velocidade e a eficiência do ANN combinadas com sua alta (mas não absoluta) precisão o tornam perfeito em diversas situações:

  • Grandes conjuntos de dados: ao lidar com milhões ou mesmo bilhões de pontos de dados, a natureza exaustiva do NN exato torna-se lenta. O ANN se destaca na navegação por vastos conjuntos de dados, entregando resultados rapidamente.

  • Dados de alta dimensionalidade: à medida que as dimensões aumentam, os cálculos exatos de NN explodem. As técnicas de redução de dimensionalidade dos ANNs reduzem de forma eficaz o espaço de busca e aumentam a eficiência em dados complexos, como imagens ou texto.

  • Aplicativos em tempo real: você precisa de resultados instantaneamente? Os sistemas de recomendação, detecção de fraudes e detecção de anomalias dependem de insights em tempo real. A velocidade do ANN o torna ideal para esses cenários.

  • Aproximação aceitável: se sua aplicação puder tolerar pequenas imprecisões nos resultados, a velocidade do ANN torna-se inestimável. Por exemplo, em busca de imagens, encontrar imagens visualmente semelhantes — em vez da mais próxima em todos os aspectos — pode ser suficiente.

Importância do ANN na busca vetorial

A busca vetorial lida com dados codificados como vetores densos, capturando relações complexas e significados implícitos. Isso a torna ideal para buscar conteúdo como imagens, texto e preferências do usuário, áreas em que a busca tradicional baseada em palavras-chave geralmente falha. Mas a maldição da dimensionalidade também se aplica aqui. À medida que o número de dimensões que representam esses vetores aumenta, os métodos de busca tradicionais se tornam mais lentos e ineficientes.

O ANN resolve esse problema com uma mudança de foco, de encontrar uma correspondência exata para correspondências “suficientemente próximas”. Isso permite a recuperação rápida, ou seja, sua busca vetorial pode encontrar vetores semelhantes em enormes conjuntos de dados com uma rapidez incrível. Ele também oferece escalabilidade integrada, para que você possa aumentar seu conjunto de dados o quanto quiser, sem prejuízo da velocidade.

Essas respostas em tempo real, combinadas com maior relevância e eficiência, muitas vezes significam que o ANN pode desempenhar um papel fundamental para revelar o verdadeiro potencial da sua busca vetorial.

Tipos de algoritmos de vizinho mais próximo aproximado

Embora o conceito de ANN ofereça uma vantagem convincente de velocidade na busca, esse termo na verdade abrange uma caixa de ferramentas diversificada de algoritmos. Todos eles têm seus próprios pontos fortes e compromissos, e compreender essas nuances é fundamental ao escolher a ferramenta certa para suas necessidades específicas de dados e busca.

Árvores KD

As árvores KD organizam os pontos de dados em uma estrutura de árvore hierárquica, particionando o espaço com base em dimensões específicas. Isso permite buscas rápidas e eficientes em espaços de baixa dimensão e consultas baseadas em distância euclidiana.

Mas embora as árvores KD sejam excelentes para encontrar vizinhos mais próximos em dimensões baixas, elas sofrem da “maldição da dimensionalidade”. É aqui que, à medida que o número de dimensões aumenta, o espaço entre os pontos explode. Nessas altas dimensões, a estratégia de divisão das árvores KD com base em eixos únicos torna-se ineficaz. Isso faz com que a busca examine a maior parte dos dados, perdendo a vantagem da eficiência e aproximando-se da lentidão de uma simples varredura linear por todos os pontos.

Hashing sensível à localidade (LSH)

LSH é uma técnica poderosa de ANN que funciona “hashing” dos pontos de dados em espaços de dimensões inferiores, de forma a preservar de maneira inteligente suas relações de similaridade. Esse agrupamento os torna mais fáceis de encontrar e permite que o LSH se destaque na busca de grandes conjuntos de dados de alta dimensão, como imagens ou texto, com velocidade e escalabilidade. Ele faz tudo isso ao mesmo tempo em que retorna correspondências “suficientemente próximas” com boa precisão. Mas tenha em mente que o LSH também pode ocasionalmente produzir falsos positivos (encontrar pontos não semelhantes como semelhantes), e sua eficácia pode variar com base na métrica de distância e no tipo de dados. Existem várias famílias de LSH projetadas para trabalhar com diferentes métricas (por exemplo, distância euclidiana, similaridade de Jaccard), o que significa que o LSH permanece versátil.

Annoy

O Annoy (Approximate Nearest Neighbors Oh Yeah) não é um algoritmo único, mas uma biblioteca C++ open source que utiliza seus próprios algoritmos para construir e consultar árvores, sem implementar diretamente LSH ou árvores KD. Foi projetado para buscas rápidas e com uso eficiente de memória em espaços de alta dimensão, tornando-o adequado para consultas em tempo real. Essencialmente, é uma interface amigável que oferece flexibilidade para diferentes tipos de dados e cenários de busca. A força do Annoy está em aproveitar múltiplas abordagens de ANN sob o mesmo teto, permitindo que você escolha a que melhor se adapte às suas necessidades. Embora simplifique o processo, lembre-se de que escolher o algoritmo interno correto no Annoy é crucial para o desempenho ideal, e sua eficácia ainda depende de fatores como seus dados e requisitos de precisão. 

Algoritmo de varredura linear

Embora normalmente não seja classificada como uma técnica de ANN, vale a pena mencionar a varredura linear, pois trata-se de uma abordagem de força bruta que oferece resultados semelhantes a outros algoritmos de ANN. Ela itera por cada ponto de dados sequencialmente, calculando as distâncias entre os registros e rastreando as melhores correspondências. Devido à simplicidade do algoritmo, sua implementação é fácil e é ótima para conjuntos de dados pequenos. A desvantagem dessa abordagem mais básica é a ineficiência para grandes conjuntos de dados, a lentidão quando usada com dados de alta dimensionalidade e a inviabilidade para aplicações em tempo real.

Como escolher o ANN certo

Antes de começar a escolher um ANN, há alguns fatores que você deve considerar antes de decidir:

  • Tamanho e dimensionalidade do conjunto de dados: considere usar hashing sensível à localidade para dados grandes e de alta dimensionalidade e árvores KD para dados menores e de menor dimensionalidade.

  • Nível de precisão desejado: se a precisão absoluta for vital, a varredura linear é provavelmente a melhor opção — caso contrário, considere LSH ou Annoy para boa precisão com velocidade.

  • Recursos computacionais: o Annoy oferece flexibilidade, mas considere as limitações de memória e processamento antes de escolher um algoritmo dentro dele.

Lembre-se — não existe uma solução única para todos. Experimente diferentes algoritmos de ANN e avalie o desempenho em seus dados específicos para encontrar a combinação perfeita para suas necessidades de busca vetorial. Além dessas opções, o mundo dos algoritmos de ANN está em constante evolução, por isso também vale a pena ficar de olho para não perder alguma novidade que possa melhorar sua busca.

O ANN é o ingrediente secreto para uma melhor busca

O vasto e complexo mundo dos dados exige ferramentas eficientes para navegar em seus labirintos. É aqui que os ANNs podem ser o ingrediente secreto que eleva sua busca por similaridade de boa para excelente. Elas oferecem velocidade e escalabilidade, embora com uma pequena perda de precisão. Além disso, há pesquisas em andamento com avanços semanais, o que contribuirá para a natureza dinâmica do campo do ANN. Por exemplo, os avanços na computação quântica e no Machine Learning podem levar a novos tipos de algoritmos de ANN ainda mais rápidos e eficientes.

Exploramos diferentes algoritmos ANN, cada um com seus pontos fortes e fracos específicos. Mas, em última análise, a escolha ideal depende das suas necessidades específicas. Considere fatores como tamanho dos dados, dimensionalidade, requisitos de precisão e recursos. Experimente, explore e escolha o algoritmo certo para obter o máximo proveito de ANNs. Da busca por imagens à detecção de fraudes, esses algoritmos podem fazer uma grande diferença, revelando conexões ocultas e possibilitando insights baseados em dados rapidamente. 

Portanto, da próxima vez que você procurar a próxima música, filme ou videogame, lembre-se dos heróis silenciosos nos bastidores (os algoritmos de ANN), ligando os pontos e fazendo conexões.

O que você deve fazer a seguir

Quando estiver pronto, veja aqui quatro maneiras para ajudar você a aproveitar os insights dos dados da sua empresa:

  1. Inicie uma avaliação gratuita e veja como a Elastic pode ajudar sua empresa.

  2. Conheça nossas soluções para ver como a Elasticsearch Platform funciona e como nossas soluções atenderão às suas necessidades.

  3. Descubra como incorporar a IA generativa na empresa.

  4. Compartilhe este artigo com alguém que você conhece e que gostaria de lê-lo. Compartilhe por email, LinkedIn, X ou Facebook.

 

O lançamento e o tempo de amadurecimento de todos os recursos ou funcionalidades descritos neste artigo permanecem a exclusivo critério da Elastic. Os recursos ou funcionalidades não disponíveis no momento poderão não ser entregues ou não chegarem no prazo previsto.

Neste post do blog, podemos ter usado ou feito referência a ferramentas de IA generativa de terceiros, que pertencem a seus respectivos proprietários e são operadas por eles. A Elastic não tem nenhum controle sobre as ferramentas de terceiros e não temos qualquer responsabilidade por seu conteúdo, operação ou uso, nem por qualquer perda ou dano que possa surgir do uso de tais ferramentas. Tenha cuidado ao usar ferramentas de IA com informações pessoais, sensíveis ou confidenciais. Os dados que você enviar poderão ser usados para treinamento de IA ou outros fins. Não há garantia de que as informações fornecidas serão mantidas seguras ou confidenciais. Você deve se familiarizar com as práticas de privacidade e os termos de uso de qualquer ferramenta de IA generativa antes de usá-la. 

Elastic, Elasticsearch, ESRE, Elasticsearch Relevance Engine e marcas associadas são marcas comerciais, logotipos ou marcas registradas da Elasticsearch N.V. nos Estados Unidos e em outros países. Todos os outros nomes de empresas e produtos são marcas comerciais, logotipos ou marcas registradas de seus respectivos proprietários.