2 pontos por GN⁺ 2024-05-10 | 1 comentários | Compartilhar no WhatsApp
  • O autor conduziu um projeto que analisa mais de 40 milhões de posts e comentários do Hacker News usando embeddings de texto
  • O principal objetivo do projeto era implementar recursos aprimorados de busca, recomendação e análise
  • Para isso, os dados foram coletados com a API do Hacker News, e contexto adicional foi obtido por meio de crawling de páginas da web
  • Com base nos dados coletados, foram gerados embeddings de texto, que depois foram mapeados para um espaço 2D com UMAP
  • A partir desses dados mapeados, foi criado o mapa interativo "Hacker News Universe"
  • Além disso, os embeddings foram usados para implementar recursos como busca semântica, comunidades virtuais automáticas e análise de popularidade/sentimento
  • Para lidar com processamento em larga escala, foi usado um cluster de GPUs, e servidores de edge foram implantados para melhorar a experiência do usuário

Coleta de dados do Hacker News

  • Mais de 40 milhões de posts e comentários foram coletados usando a API do Hacker News
  • Como a resposta da API era lenta, foi implementado um serviço baseado em Node.js para processamento paralelo
  • A pontuação dos posts não cai abaixo de -1, e a pontuação dos comentários não pode ser verificada pela API
  • Alguns posts e comentários têm título e corpo vazios (provavelmente editados por moderadores)
  • Em alguns casos, o ID do comentário é menor que o do comentário pai (provavelmente porque moderadores moveram a árvore de comentários)

Geração de embeddings de texto

  • Como apenas o título não era suficiente para representar semanticamente os posts, foi obtido contexto adicional por meio do crawling das páginas da web
  • A geração de embeddings de texto exige GPUs de alto desempenho, e processar 40 milhões de entradas poderia levar quase um ano
  • Com o RunPod, foi montado um cluster de GPUs a baixo custo, e foram desenvolvidos db-rpc e queued para melhorar a eficiência do processamento distribuído
  • Com 150 GPUs, os embeddings de 40 milhões de textos foram gerados em poucas horas

Obtendo contexto adicional com crawling de páginas da web

  • Como a qualidade dos embeddings não era boa apenas com os títulos dos posts, as páginas vinculadas foram rastreadas para obter contexto adicional
  • O crawler foi implementado em Rust, alcançando desempenho 10 vezes superior em relação à versão em Node.js
  • Muitos links estavam quebrados (link rot), então foram recuperados usando a API do Internet Archive
  • No final, menos de 5% das 4 milhões de páginas não puderam ser obtidas

Geração de embeddings de texto aprimorados

  • Para usar a página inteira como entrada, houve a migração para o modelo jina-embeddings-v2-small-en
  • Posts com pouco contexto foram complementados com os comentários mais bem colocados
  • Para os comentários, a entrada foi composta considerando a estrutura hierárquica e incluindo também comentários ancestrais

Redução de dimensionalidade com UMAP

  • Os embeddings de 1024 dimensões foram reduzidos para um espaço bidimensional usando UMAP
  • Para a redução de dimensionalidade, são necessários o grafo PyNNDescent e os embeddings originais
  • Processar um milhão de entradas de alta dimensionalidade levou cerca de 1 hora e meia em uma CPU de 96 núcleos
  • Como resultado da redução, foi possível visualizar interesses e a distribuição de popularidade

Similaridade de cosseno

  • O cálculo de similaridade entre embeddings costuma usar distância de cosseno
  • A distância de cosseno representa a diferença angular entre vetores e, ao contrário da distância euclidiana, não é afetada pela magnitude do vetor
  • Isso é adequado para calcular similaridade de texto, porque mesmo discussões longas e intensas devem ser mapeadas como próximas se o tema for semelhante
  • O cálculo de similaridade de cosseno pode ser implementado de forma simples com multiplicação de matrizes

Criação do mapa Hacker News Universe

  • Com base nos embeddings, foi criado um mapa interativo do Hacker News semelhante ao Google Maps
  • Há suporte para recursos como ajuste da quantidade de pontos visíveis ao aplicar zoom, rotulagem de alguns pontos e exibição de detalhes ao clicar
  • Como enviar milhões de pontos de uma vez só ao navegador seria inviável, foi implementado carregamento progressivo usando tiling e LOD
  • Cada tile contém no máximo 1500 pontos e permanece abaixo de 20 KB, garantindo diversidade ao considerar a densidade de cada região
  • O webapp foi implementado com Canvas e WebWorker, e os recursos de mapa foram desenvolvidos com referência ao Google Maps

Adição de efeitos visuais

  • Para melhorar a imersão e a noção de orientação, foram adicionados elementos como marcos, fronteiras e relevo, como em mapas reais
  • Curvas de nível de luminosidade foram desenhadas de acordo com a densidade dos pontos para representar áreas de maior interesse no HN
  • Com Gaussian blur, foram geradas curvas de nível suaves, depois convertidas em SVG para produzir imagens vetoriais sem serrilhado
  • Também foram adicionadas "cidades" que representam temas principais, servindo como guia para áreas específicas

Teste do recurso de busca

  • A busca baseada em embeddings semânticos mostrou resultados mais relevantes e variados do que a busca por palavras-chave
  • Ela entende bem consultas em forma de pergunta e encontra temas semelhantes mesmo sem palavras exatamente iguais
  • Graças à alta qualidade dos posts do HN, os resultados de busca também expõem muitas informações úteis e cheias de insights
  • No ranking dos resultados, além da relevância, foram usados a pontuação dos posts e pesos temporais para considerar confiabilidade e atualidade

Geração automática de comunidades virtuais

  • É possível criar comunidades virtuais por palavra-chave e ver instantaneamente coleções de posts alinhadas aos seus interesses
  • Além dos posts, também é possível examinar comentários com discussões ativas relacionadas ao interesse
  • Também é possível identificar usuários influentes e muito ativos em temas específicos
  • Usar filtragem posterior em vez de pré-filtragem pode reduzir bastante o custo computacional

Análise de dados em larga escala

  • Um modelo open source de análise de sentimento foi usado para classificar o sentimento positivo/negativo de 30 milhões de comentários
  • Ao analisar o sentimento de tópicos em séries temporais, é possível observar mudanças de acordo com eventos importantes
  • Também é possível comparar a popularidade entre tópicos usando similaridade e pontuação
  • Para melhorar a velocidade de cálculo das consultas, foram aplicadas operações matriciais com GPU, aumentando bastante o desempenho

Planos futuros

  • Suporte a atualização de dados em tempo real
  • Desenvolvimento de um sistema de recomendação baseado em deep learning
  • Melhoria da qualidade da busca com um modelo de reranking
  • Reforço da análise de usuários (similaridade, expertise etc.)
  • Descoberta de ideias adicionais de melhoria por meio da coleta de opiniões da comunidade

Opinião do GN⁺

  • Este projeto é um bom exemplo de como coletar, refinar e analisar grandes volumes de dados de forma eficaz. Em especial, as técnicas de otimização de desempenho, como processamento paralelo e uso de GPU, são impressionantes.
  • O mapa do Hacker News que visualiza a similaridade entre posts ao combinar embeddings de texto com UMAP é um resultado muito criativo e interessante. Parece que ajudará bastante os usuários a explorar temas de interesse e descobrir novas informações.
  • Os recursos de busca semântica e geração automática de comunidades são ideias inovadoras que podem elevar a experiência de uso do Hacker News a outro nível. Tomara que tecnologias de busca capazes de entender contexto e intenção, indo além da simples correspondência de palavras-chave, se disseminem mais entre usuários em geral.
  • A construção de um pipeline de processamento de dados em larga escala e em tempo real provavelmente será o principal desafio. Será preciso avaliar com cuidado formas de eliminar gargalos de desempenho, como edge computing e bancos de dados in-memory.
  • Como os dados do HN são bastante confiáveis, os resultados da análise de sentimento também parecem ter valor prático. Ainda assim, vale prestar atenção a vieses algorítmicos e considerar treinamento especializado para o domínio.

1 comentários

 
ggg213 2024-05-10

O título está faltando.