24 pontos por GN⁺ 2024-04-18 | 1 comentários | Compartilhar no WhatsApp

Guia de uso de embeddings para desenvolvedores de apps

  • Embeddings vetoriais são eficazes para medir similaridade entre diferentes entradas, por isso são adequados para recursos de busca e recomendação. Também funcionam bem em outros idiomas, como francês e japonês.
  • pgvector é uma extensão do Postgres que permite armazenar e consultar embeddings, sendo poderosa por possibilitar a combinação da lógica em SQL com operações de embedding sem adicionar um novo serviço.
  • Diferentemente dos LLMs, usar embeddings dá uma sensação parecida com a de código determinístico tradicional.

Desenvolvimento de um projeto de busca e recomendação de ícones

  • Após configurar o pgvector, foi criada uma estratégia para codificar dados de ícones em vetores de embedding.
  • Uso do modelo text-embedding-3-small da OpenAI.
  • Medição da similaridade entre o termo de busca e o embedding de cada ícone com similaridade de cosseno.
  • Combinação da busca por embeddings com lógica de negócio, como filtragem de conjuntos de ícones.
  • Apresenta um exemplo de algoritmo de ranking que utiliza dados de cliques em ícones para um termo de busca.
  • Uso da comparação de embeddings para recomendar ícones semelhantes ao ícone selecionado.

Resumo da abordagem de implementação

  • Escolha de pgvector/Postgres como banco de vetores. Há outras opções, como MongoDB.
  • Desenvolvimento em Typescript com uso de drizzle-orm. Também há várias bibliotecas para outras linguagens e frameworks.
  • O app é hospedado na Neon. Também é possível usar serviços gerenciados de hospedagem de banco de dados, como fly.io e Supabase.
  • Uso do modelo de embeddings text-embedding-3-small da OpenAI. É possível escolher outros modelos no leaderboard do Hugging Face.
  • Embedding de atributos dos ícones com maior relevância para busca em pares chave-valor.
  • Uso de similaridade de cosseno como função de distância. O pgvector também oferece suporte a l2 distance e inner product.
  • Os resultados de busca são limitados aos 50 primeiros. Ao usar intervalo de distância, recomenda-se definir uma faixa ampla e usar junto com limit.

Opinião do GN⁺

  • Na maioria dos projetos, parece suficiente adicionar recursos vetoriais ao banco de dados existente com algo como pgvector. A adoção de um banco vetorial separado parece necessária apenas em serviços de grande escala.
  • A grande vantagem é poder combinar naturalmente a busca por embeddings com lógica de negócio. Dá para aproveitar toda a força do SQL.
  • A ideia de refletir dados de feedback dos usuários no algoritmo de ranking é muito boa. Parece permitir melhorar continuamente a precisão da busca.
  • Em comparação com LLMs, serviços baseados em embeddings parecem ter um funcionamento mais claro e serem mais fáceis de depurar, o que torna sua aplicação em serviços reais muito mais simples.
  • Como vários modelos de embedding open source estão disponíveis, mesmo quando é difícil desenvolver um modelo próprio ainda é possível aproveitar embeddings de alta qualidade com facilidade.

1 comentários

 
GN⁺ 2024-04-18
Opiniões do Hacker News

Resumo dos comentários do Hacker News

Facilidade de usar embeddings de documentos e busca por similaridade com modelos RAG

  • Com as bibliotecas sentence-transformers e faiss, é possível implementar facilmente embeddings de documentos e busca por similaridade
  • Pode ser um projeto divertido mostrar um desempenho melhor do que o sistema de recomendação do New York Times
  • O canal de YouTube de James Briggs explica bem esse tema

Entendendo os conceitos básicos de embeddings

  • Mesmo sem AI/deep learning, é possível criar embeddings atribuindo índices únicos às palavras e acumulando valores de acordo com a frequência
  • Também é possível fazer busca por similaridade usando similaridade de cosseno, entre outras técnicas
  • Embeddings baseados em deep learning adicionam recursos como filtragem de palavras/tokens e tratamento de sinônimos sobre esses conceitos básicos

Falta de explicação detalhada sobre o processo de geração de embeddings

A dificuldade de lidar com palavras homônimas

  • Por causa de palavras homônimas, os resultados de busca às vezes podem sair de forma inesperada (ex.: ao buscar por "king", aparece um ícone de ruler)
  • Ao mesmo tempo, isso pode ser um desafio interessante, junto com a vantagem de conseguir encontrar ícones relacionados

É possível usar embeddings sem um vector store

  • Em ambientes de produção com grande volume de dados, um vector store é importante por motivos como latência, mas em projetos pequenos dá para implementar de forma simples com Numpy, por exemplo
  • É possível calcular similaridade usando o operador @ do Numpy para obter o produto interno entre o vetor de consulta normalizado e a matriz de registros

Como executar a lógica de embeddings localmente

  • Foi levantada a dúvida sobre como gerar embeddings diretamente em ambiente local ou no banco de dados, sem depender da API da OpenAI

Possibilidade de usar embeddings na redação de documentação técnica

  • Desde o surgimento do ChatGPT, tem havido bastante discussão entre redatores de documentação técnica sobre o potencial de uso como ferramenta de busca semântica
  • Isso pode ajudar a melhorar a eficiência na etapa de pesquisa necessária para escrever documentação

Como armazenar e usar embeddings

  • O normal é gerar e armazenar os embeddings e depois carregá-los sempre que necessário
  • Em casos simples, também é possível passar os embeddings diretamente como arrays para uso imediato
  • Armazenar embeddings é a parte mais difícil, mas não exige um banco de dados especial; algo como BLOB no SQLite também pode funcionar
  • Embeddings não “expiram”

Falta de explicação de conceitos básicos para desenvolvedores iniciantes em AI

  • O texto passa direto para o uso de embeddings e bancos de dados vetoriais sem explicar esses conceitos
  • Para quem procura um bom ponto de partida como desenvolvedor de apps interessado em AI, provavelmente teria sido útil uma introdução a esses conceitos