- Embeddings oferecem potencial para avanços revolucionários na escrita técnica atualmente
- Têm a característica de retornar um array numérico de dimensão fixa, independentemente do tamanho do texto de entrada
- Esse array numérico torna possível a comparação matemática entre textos arbitrários
- Embeddings calculam distâncias de acordo com o significado do texto em um espaço multidimensional, permitindo vários usos, como recomendações por relação, análise semântica e mais
- No futuro, espera-se que sites de documentação técnica ampliem novos casos de uso em ferramentas e na comunidade ao disponibilizar dados de embeddings
Visão geral da tecnologia de embeddings baseada em machine learning
- Na área de machine learning, ao contrário dos modelos de geração de texto, os embeddings têm potencial para causar um impacto revolucionário na escrita técnica
- Nos últimos anos, o uso de embeddings se tornou muito mais acessível
- Com embeddings, redatores técnicos podem realizar comparações e análises semânticas entre diferentes textos
Construindo uma intuição sobre embeddings
- Embeddings recebem um texto como entrada (palavra, frase, vários documentos etc.) e retornam um array numérico de tamanho fixo
- Independentemente do comprimento do texto de entrada, sempre é gerado um array de dados com o mesmo tamanho
- Isso cria a possibilidade de comparação matemática até mesmo entre textos arbitrários de comprimentos diferentes
Como gerar embeddings
- É possível gerar embeddings com apenas algumas linhas de código por meio dos principais provedores de serviço
- O tamanho do array do embedding varia conforme o modelo usado; no caso do Gemini, são retornados 768 valores, e no caso do Voyage AI, 1024
- Como o significado dos embeddings muda completamente dependendo do provedor ou do modelo, não há compatibilidade entre eles
Custo e impacto ambiental
- A geração de embeddings em si não tem custo elevado
- Estima-se que o processo consuma menos recursos computacionais do que modelos de geração de texto, embora sejam necessárias mais informações sobre o impacto ambiental
Critérios para escolher um modelo de embedding
- O modelo mais adequado varia de acordo com a capacidade de suportar grandes volumes de dados de entrada
- O voyage-3 da Voyage AI oferece o maior limite de entrada em 2024
- É importante escolher o modelo de acordo com o objetivo de uso e as necessidades
O conceito de espaço multidimensional
- Cada valor do array numérico do embedding corresponde a uma coordenada em um espaço multidimensional, e as características do texto são representadas por sua posição semântica nesse espaço
- Por exemplo, operações como
king - man + woman ≈ queen mostram a possibilidade de representar relações semânticas
- As características de cada dimensão no espaço de embeddings são, em sua maioria, obscuras e abstratas
- Esse processo permite que a máquina aprenda significado e faça inferência semântica sobre texto
Comparação e armazenamento de embeddings
- Os embeddings gerados são armazenados em um banco de dados ou similar para cada texto, como por exemplo cada página
- É possível determinar a similaridade semântica calculando a distância matemática entre dois embeddings, usando álgebra linear
- Com bibliotecas como NumPy e scikit-learn, o esforço para implementar fórmulas complexas é pequeno
Exemplos de aplicação de embeddings
- Em sites de documentação técnica, embeddings são usados de forma eficaz em recursos de recomendação de páginas relacionadas
- Depois de gerar embeddings para cada página, é possível recomendar documentos semanticamente relacionados entre páginas com alta similaridade numérica
- Sempre que o conteúdo de uma página muda, basta atualizar o embedding, o que traz grande eficiência
- Em aplicações reais na documentação do [Sphinx], foi confirmado um desempenho positivo
Comunidade e possibilidades de dados abertos
- No futuro, sites de documentação poderão fornecer dados de embeddings por meio de REST APIs ou well-known URIs
- Isso permitirá que a comunidade desenvolva diversas ferramentas e serviços de aplicação
Considerações finais
- É interessante ter a oportunidade de relacionar o conceito de espaços com centenas de dimensões ao trabalho do dia a dia
- Com a adoção de embeddings, é possível esperar avanços transformadores na manutenção de documentação e na expansão de funcionalidades
1 comentários
Comentários no Hacker News
Olá, gostaria de agradecer por você ter escrito este texto
Informo que houve uma discussão parecida há 6 meses
Dizer que “embeddings são subestimados” serviu para enfatizar que eles são uma ferramenta útil mais para redatores técnicos do que para quem trabalha com machine learning
Reconheço que neste texto faltam detalhes sobre como exatamente usar embeddings na redação técnica
Estou preparando projetos e posts de blog sobre o uso de embeddings
Embeddings são importantes porque podem ajudar a resolver 3 problemas difíceis de resolver na redação técnica
Para o problema de os usuários não conseguirem encontrar facilmente a informação que querem, experimentei aplicar “semantic scrolling” como camada de UX para que as pessoas possam vivenciar embeddings publicamente
Em vez de busca, é possível passear pelos clusters em uma estrutura de árvore com
<details>/<summary>[1] é o ponto de partida, e [2] é a coleção completa (livros, filmes, música, animação etc.)
Também compartilho os links
Seria bom estruturar o conteúdo para que o post pareça mais atraente para redatores técnicos do que para especialistas em machine learning
Por exemplo, seria bom explicar com mais detalhes a parte de “descobrir conexões entre textos em uma escala antes impossível”
Se os exemplos de aplicação vierem mais no começo, isso deve comunicar melhor a ideia aos leitores
Como exemplo de aplicação direta de embeddings à redação técnica, recomendo um artigo relacionado
Forneço o link
Li este texto e fiquei curioso sobre como estava a qualidade dos resultados
Mesmo sem chegar a evals como o pessoal de machine learning gosta, eu gostaria de saber se, em linhas gerais, os resultados pareceram razoáveis
Li o texto, mas não encontrei uma explicação do que é um “embedding”
No terceiro parágrafo se fala sobre como usá-lo, mas falta uma definição do próprio embedding no começo
Para iniciantes, o texto parece básico demais
Depois de ler, não obtive nenhuma informação nova nem insight
Se ao menos tivesse mostrado um gostinho de um caso de uso central de embeddings, eu teria ficado mais animado para o próximo texto
De todo modo, obrigado por compartilhar
Outra vantagem de embeddings e busca por embeddings é que dá para implementar no lado do cliente com pouca carga
Modelos ONNX podem ser carregados e executados com transformer.js
Também é possível criar um índice como hnsw e hospedá-lo estaticamente
Eu mesmo fiz uma demo open source
Basta representar o índice como um arquivo parquet consultável e consultar com duckdb
Com Github Pages, isso pode ser feito de graça ou quase de graça
Poder fazer embeddings em JS no lado do cliente é uma descoberta nova para mim
Parece que isso vai abrir novas aplicações para sites de documentação
Passei a prestar atenção em Parquet e Polars por causa de um texto que li antes
Eu tinha curiosidade sobre esse tipo de implementação
Tenho evitado adotar busca baseada em embeddings por preocupação com a latência
Se o modelo ficar local e renderizar ali mesmo, queria saber como a qualidade se compara à da OpenAI/Google
Gratuito/imediato é uma vantagem
Seria bom explicar em detalhes o que está acontecendo na demo
Não estou entendendo bem o resultado
Eu gostaria que a parte “embeddings retornam sempre um array de números do mesmo tamanho, independentemente do tamanho do texto de entrada, então qualquer texto pode ser comparado matematicamente com qualquer outro” fosse explicada com mais clareza
Funções de hash também produzem saídas do mesmo tamanho independentemente do tamanho da entrada, mas essa comparação matemática é totalmente diferente da comparação com embeddings
É preciso enfatizar que a qualidade de um embedding é determinada pelo processo de treinamento
Não existe “embedding universal” que permita comparações significativas para textos arbitrários
Também compartilho os links
Embeddings, assim como hashes, comprimem entradas grandes em uma representação, mas, ao contrário de hashes, embeddings têm significado intrínseco
Nesse caso, fico curioso se existe pesquisa sobre “quebrar” embeddings, gerando de volta um texto de significado parecido
Também parece possível incluir, na avaliação do próximo token na saída de um LLM, a similaridade com embeddings ou mudanças de direção
Assim como o autor mencionou operações entre vetores de embedding, imagino se seria possível aplicar uma “álgebra de significado” também a textos grandes como parágrafos inteiros ou livros
Fico curioso se seria possível vetorizar um conceito central como “afinidade” e somá-lo a um texto existente
“Gerar de volta um texto semanticamente parecido a partir de embeddings” é chamado de embedding inversion ou Universal Zero-shot Embedding Inversion
Também há artigos relacionados, e o uso de embeddings do CLIP em diffusion para imagens é conectado a isso
Embeddings, grosso modo, cumprem um papel semelhante ao de fuzzy hashes
Não sou especialista da área, mas há também pesquisas sobre inference-time intervention que podem ser relacionadas
Anexo um link para um artigo
A frase “é possível alcançar avanços de altíssimo nível na redação técnica usando embeddings” não é concreta o suficiente e, como leitor, não me ajuda
Em geral, nunca senti necessidade de um widget de “páginas semelhantes” ao ler ou escrever documentação técnica
A tese está no segundo parágrafo
Embeddings permitem que redatores técnicos encontrem conexões entre textos de formas antes impossíveis de descobrir
Reconheço que o post não conseguiu mostrar essa tese na prática com exemplos
Acho que embeddings podem resolver vários problemas difíceis da redação técnica, e pretendo tratar de exemplos diretos depois
Deixando de lado documentos relacionados, documentação técnica se beneficia muito de uma busca excelente
Embeddings são especialmente úteis para “fuzzy matching” e conseguem encontrar, na prática, a funcionalidade desejada mesmo quando o usuário não lembra exatamente das palavras
Uma abordagem híbrida, misturando busca por palavra-chave e busca por similaridade vetorial, é eficiente
Gostaria de ver mais exemplos concretos de uso
A analogia com um mapa bidimensional é um bom ponto de partida para facilitar o entendimento, mas embeddings operam em centenas ou milhares de dimensões
Também não está claro que significado cada dimensão tem, e o exemplo ‘king - man + woman = queen’ não acontece porque existe uma “dimensão de gênero”, mas porque existe uma “direção específica”
Em n dimensões, existem exponencialmente muitas direções quase ortogonais
É por isso que é possível acomodar bilhões de conceitos em um espaço de 1000 dimensões
Em artigos reais do arXiv, se você colocar 1000 palavras masculinas em embeddings, não vai encontrar com precisão 950 palavras femininas
Cerca de 20 até se agrupam visivelmente, mas, como há muitas dimensões, ao projetar qualquer coisa pode parecer “correta”
Quando N cresce, os resultados tendem a ficar ambíguos
Embeddings baseados em transformers consideram o contexto, então são muito superiores aos antigos word vectors
Mesmo na busca em texto completo, embeddings sensíveis a contexto resolvem de forma eficaz problemas da recuperação de informação que vinham sendo tentados havia 50 anos, como o tratamento de sinônimos
Agradeço a crítica detalhada e reconheço que foi um erro conceitual explicar como se uma dimensão única mapeasse um conceito um a um
Vou refinar a explicação junto com o funcionamento da similaridade por cosseno e revisar o post
Sinto que a qualidade do meu raciocínio melhorou graças ao comentário
Enfatizo que a expressão correta não é “dimensões quase ortogonais”, e sim “direções quase ortogonais”
Tenho curiosidade sobre a Johnson-Lindenstrauss lemma e, junto com isso, sobre a precisão da preservação de distâncias e manutenção da dimensionalidade em embeddings
Para preservar distâncias com erro de 10%, seriam necessárias cerca de 18 mil dimensões
Também indico um link da Wikipédia
Aponto que, mais precisamente, não se trata de “dimensões quase ortogonais”, e sim de “direções quase ortogonais”
Se dimensões individuais correspondessem a conceitos significativos, por exemplo uma dimensão de gênero, seria fácil perceber que a diferença entre “king” e “queen” existe apenas numa única dimensão
Se cada conceito tivesse uma dimensão diferente, daria para rastrear intuitivamente os conceitos por essa diferença
Apresento um bom artigo sobre o conceito de vetores quase ortogonais
Compartilho o link
Pergunto se o princípio seria tratar cada dimensão como binária e assim codificar
2^ndireções, ou se estou entendendo erradoSe o gênero fosse representado por duas dimensões, então não seria impossível distinguir entre “o gênero é diferente” e “cada dimensão tem um componente diferente”?
Mesmo que não seja possível visualizar, ainda é possível calcular a distância euclidiana
Também dá para reduzir a dimensionalidade com ferramentas como UMAP
Sobre o exemplo king-man+woman=queen, a operação de soma vetorial pode não funcionar sempre como desejado
O significado pode ser limitado apenas pela direção e magnitude de um vetor único, e, como a rede aprende comportamento não linear, o sentido pode mudar dependendo do ponto de partida
Há limites para generalizar operações vetoriais simples sem evidência experimental
Embeddings são um novo salto em direção à universalidade, como o alfabeto ou os números
Compartilho um link
Faço uma pergunta aos especialistas
Se embeddings capturam o conteúdo, isto é, o próprio significado, em vetores, será que existe um vetor separado só para “estilo”?
Acho que, se embeddings pudessem ser usados facilmente também em pesquisas que analisam escrita pelo estilo, isso seria um grande avanço
Concordo totalmente com o uso de embeddings
Ao desenvolver algo chamado Recallify, passei a conseguir reencontrar rapidamente até informações raras que havia lido online
Mesmo usando apenas 1024 dimensões, ele conecta conteúdos de forma eficaz por similaridade semântica, e não por palavras-chave
É uma ferramenta revolucionária para transformar conceitos vagos em insights acionáveis
Também estou recrutando beta testers para um app iOS
Não sei se no artigo apareceu um caso de uso direto para redatores técnicos
Embeddings são muito importantes em LLMs, busca semântica etc., mas faltou explicar a utilidade direta que o autor sugere
Não apareceu um exemplo de aplicação direta
Eu pretendia tratar de vários usos de embeddings em um post e projeto futuros, mas isso atrasou recentemente por causa da criação de um bebê de 3 meses
Estou preparando projetos e textos relacionados para depois, e embeddings ajudam a resolver 3 desafios importantes na redação técnica
Os usos práticos de embeddings são busca semântica, classificação e clustering
Na área de busca, há um grande avanço a cada 10 anos
Se você gerar embeddings e alimentá-los em algoritmos clássicos de ML, dá para classificar com eficácia
A abordagem Bag-of-Words agora entrega resultados insuficientes, e, com embeddings + algoritmos simples, já é possível obter bons clusters
Para encontrar vetores próximos, nem é tanto álgebra linear; um produto escalar já basta
Seria muito útil usar embeddings para buscar semanticamente artigos e literatura
Porém, o próprio embedding não inclui informação de fonte, então, em buscas RAG, só dá para ligar à página de origem
Questões de citação e verificação continuam existindo
Modelos de citação baseados em grafos, como GraphRAG, são mais avançados
Criei um classificador de feeds RSS com busca semântica baseada em embeddings
Também é possível classificar com base em categorias arbitrárias
No momento, o serviço foi encerrado porque saí da AWS