1 pontos por GN⁺ 2024-11-14 | 1 comentários | Compartilhar no WhatsApp
  • Graças ao stream público de eventos, foi possível construir no Bluesky um mapa completo do grafo social em escala de 13 milhões de usuários, algo difícil de fazer no Twitter
  • O pipeline de coleta filtra apenas follows e unfollows do WebSocket firehose do bsky.network e os armazena no SQLite; na época, a tabela follows tinha mais de 500 milhões de linhas e cerca de 30 GB
  • Para posicionar 13 milhões de nós e 500 milhões de arestas, foi criado o Andromeda, um motor multithread de force-directed layout baseado em Zig, mas em grafos sociais grandes ficou evidente a limitação de que a estrutura local se perde em blocos indistintos
  • A combinação de embeddings GGVec com UMAP gerou mais estruturas intermediárias, e a sobreposição de pontos do UMAP foi refinada simulando mais alguns ticks no Andromeda para ajustar clusters densos
  • O mapa final mostra 7,7 milhões de nós após filtragem em 7 de novembro de 2024, permitindo explorar anéis de bots, clusters por país e agrupamentos de contas de mídia/política com muitos seguidores

Por que foi possível criar um mapa da rede inteira do Bluesky

  • No Twitter, é difícil criar um mapa completo porque não há acesso a todos os dados, scraping é difícil e pode ser ilegal
  • O BlueSky permite obter os dados necessários e cresceu muito ao longo de alguns meses em 2024
    • Entre os fatores por trás do crescimento estão os conflitos contínuos entre o Twitter e sua base de usuários, além do bloqueio do Twitter no Brasil em outubro de 2024
  • O resultado pode ser explorado como um mapa interativo em aurora.ndimensional.xyz
    • Usa WebGPU, portanto requer Chrome/Chromium em desktop

Como o grafo de follows foi coletado

  • Em vez de toda a atividade, foi usado apenas o grafo de follows para reduzir o escopo do trabalho
    • Cada follow é tratado como uma aresta não direcionada
    • Se duas pessoas se seguem mutuamente, surgem duas arestas, o que na prática dobra o peso
  • O BlueSky é baseado no AT Protocol e foi projetado para permitir que usuários hospedem seu próprio PDS (personal data server)
  • A coleta real usa o WebSocket firehose do relay bsky.network, operado pela equipe do BlueSky
    • Agrega eventos do PDS principal *.bsky.social e de PDS independentes que solicitaram indexação
    • Os eventos de toda a rede são transmitidos em tempo real; atualmente, o volume é de cerca de 500 eventos por segundo
    • Desses eventos, apenas follows e unfollows são filtrados e salvos em um banco de dados SQLite local
  • Inicialmente, o indexador foi implantado na fly.io e o banco de dados era replicado em tempo real para o AWS S3 com litestream, mas, devido ao custo de US$ 40 por mês, a operação foi transferida para um servidor doméstico
    • Depois disso, passou a rodar em um desktop System76 em casa, combinando serviço systemd, logrotate, monitor em tmux e TailScale
  • No momento da escrita, o BlueSky havia passado de 13 milhões de usuários, e a tabela follows tinha mais de 500 milhões de linhas, com uso de disco de cerca de 30 GB

Gargalos de cálculo em um grafo de 13 milhões de nós

  • Existem vários métodos para layout de grafos, mas aqui o ponto de partida é o force-directed layout, que se comporta como uma simulação física
    • Todos os nós exercem uma força de repulsão entre si
    • As arestas criam uma força de atração entre origem e destino
    • Em cada tick da simulação, a força resultante de cada nó é calculada, escalada por um parâmetro de temperatura e usada para movê-lo
  • O gargalo está menos no tamanho do grafo em si e mais na complexidade computacional do problema de n corpos
    • Um algoritmo simples exige O(n^2) + O(e) por tick
    • Na escala de milhões de nós, isso não é realista nem mesmo com GPU
  • Usando a otimização Barnes-Hut, como em motores force-directed comuns, isso cai para O(n log(n)) + O(e)
    • Há o custo de aproximar o efeito de nós distantes
    • Como a construção e a consulta de uma quadtree são hierárquicas, é difícil calcular facilmente as forças dos nós na GPU
  • Para paralelização, a quadtree é dividida em 4 ou 16 partes, reconstruída em paralelo no início de cada tick, e os intervalos de nós são distribuídos entre threads para calcular as forças
    • A força resultante de cada nó é a soma das forças geradas por cada quadtree e pelas arestas de entrada e saída
    • Isso permite usar praticamente toda a CPU disponível com quase nenhum overhead

Andromeda e as limitações da abordagem force-directed

  • Foi criado em Zig o Andromeda, um motor multithread de layout de grafos force-directed, com GUI feita em GTK4 e OpenGL
  • O Andromeda foi fortemente influenciado pelo Gephi e pelo artigo do ForceAtlas2
    • Em visualização de grafos em grande escala, a interatividade de observar o grafo mudando enquanto se ajustam dinamicamente os parâmetros da simulação é importante
    • É difícil obter bons resultados com ferramentas opacas e com longos tempos de iteração
  • O Andromeda também inclui um widget de UI chamado “natural slider”
    • É um mecanismo para reduzir o problema de não saber de antemão a faixa adequada de valores ao lidar com um novo grafo, uma nova versão do motor ou novos parâmetros
    • Ele ajusta dinamicamente a faixa de valores em unidades de potências de e
    • A avaliação é que potências de 2 são pequenas demais e potências de 10 são grandes demais
  • Ao aplicar o layout ForceAtlas2 a um snapshot de 5 milhões de usuários do BlueSky de setembro de 2024, a massa e a densidade dos grandes clusters ficaram visíveis, mas, no geral, o resultado tinha um aspecto fortemente aglomerado
    • A maioria dos nós ficou espalhada em uma área ampla e difícil de distinguir ao redor de um supercluster
    • Apenas algumas dezenas de comunidades pequenas, principalmente em nível de país, se separaram claramente
  • Quando a versão com 2 milhões de contas foi publicada em fevereiro de 2024, a visão global despertou interesse, mas a visão local decepcionou
    • Mesmo quando usuários encontravam sua própria conta, havia casos em que não reconheciam as contas ao redor
    • É difícil capturar completamente toda a estrutura de conexões da rede apenas com uma disposição em um plano 2D

UMAP, cores e o mapa final

  • O layout de grafos também pode ser visto como redução de dimensionalidade, tratando o problema como a projeção de uma matriz de adjacência de 13 milhões × 13 milhões em um plano 2D
  • t-SNE e UMAP são técnicas fortes de redução de dimensionalidade não linear para visualização em 2D
    • Inserir diretamente a matriz do BlueSky no UMAP é grande demais para a escala de um servidor doméstico
    • Em vez disso, foram criados embeddings de cerca de 32 dimensões por usuário, e esse resultado foi passado ao UMAP
  • Como ferramenta open source de embedding de nós, foi escolhido o nodevectors, e o algoritmo GGVec, ainda não publicado, parecia ter o melhor desempenho paralelo em grafos de grande escala
    • O embedding do snapshot de 5 milhões de nós de setembro de 2024 foi gerado em 5 minutos
    • A primeira imagem do UMAP foi obtida em mais 10 minutos
    • Surgiram mais estruturas intermediárias do que no resultado aglomerado do Andromeda
  • O UMAP tinha o problema de tornar alguns clusters densos demais, fazendo pontos se sobreporem
    • Para o objetivo puro de redução de dimensionalidade, em que pontos iguais na dimensão original também ficam na mesma posição na dimensão de destino, esse é um comportamento natural
    • Mas ele não era adequado para um mapa que mostra as fotos de perfil de cada conta em níveis de zoom próximos
  • Internamente, o UMAP também usa, na etapa final, um force-directed layout sobre um grafo ponderado de k-vizinhos mais próximos
    • Devido a restrições de cálculo, o UMAP usa amostragem, de modo que nem todos os nós se repelem, nem mesmo de forma aproximada como no método Barnes-Hut
    • A conclusão foi que o parâmetro min_dist não controla de maneira consistente a separação entre pontos em grafos de grande escala
  • O problema de sobreposição foi amenizado inserindo a saída do UMAP no Andromeda, ajustando a equação de repulsão e executando mais alguns ticks
    • Mesmo em clusters densos, os nós passam a preencher o espaço sem se sobrepor em camadas
    • Em uma próxima versão, a ideia é acessar os pesos brutos do grafo criado pelo UMAP e combinar diretamente a quadtree paralela do Andromeda com as equações de força do artigo do UMAP
  • As cores foram atribuídas executando clusterização k-means no espaço de embedding, em vez de aplicar HDBScan ao resultado do UMAP
    • Um hue é atribuído a cada cluster
    • Cada ponto interpola o hue usando os três centroides de cluster mais próximos
    • Isso revela melhor a estrutura local do que cores baseadas em PCA e, de perto, cria uma textura manchada, semelhante a vitrais
  • O hue é um único float entre 0 e 1, mapeado para RGB no espaço de cores hsluv
    • A saturação de todos os nós é mantida constante
    • O brilho é escalado pelo log10 do número de seguidores do usuário, fazendo contas grandes parecerem estrelas brilhantes e contas com poucos seguidores parecerem apagadas
    • A abordagem de renderizar contas grandes realmente maiores foi descartada porque tornaria grafos grandes complexos demais
  • O mapa de toda a rede em 7 de novembro de 2024 é composto por 7,7 milhões de nós após excluir contas que seguem mais de 50 mil pessoas e contas que seguem menos de 5 e têm menos de 5 seguidores
    • Faixas bem definidas de contas de mídia, política e comentário com muitos seguidores se distinguem dos grupos relacionados de menor destaque ao fundo
    • O cluster da Islândia também aparece em vistas distantes e próximas, até o nível das fotos de perfil
    • Anéis de bots também ficam claramente visíveis
  • Como próximo recurso, a intenção é adicionar uma barra lateral recolhível com a timeline de posts das contas visíveis na tela atual
    • O objetivo é evoluir para um novo tipo de ferramenta de exploração social e de memes

1 comentários

 
GN⁺ 2024-11-14
Comentários do Hacker News
  • O feed do BSKY parece um espaço completamente morto. Tentei participar ativamente, publicando, respondendo e curtindo, mas dá a sensação de que nada pega
    Postar “para mim mesmo” também tem seus limites, então logo perde a graça. No Twitter dos primeiros tempos, todo mundo estava empolgado para seguir gente nova; sendo uma nova rede social, eu esperaria que ela estivesse cheia de pessoas querendo criar novas conexões

    • A conta desse usuário segue pouquíssimas pessoas e parece mais próxima de distribuir conteúdo como uma transmissão do que de participar de conversas. Talvez valha tentar o oposto
    • No BSKY, por causa dos Starter Packs, há um grande problema de os ricos ficam mais ricos e os pobres mais pobres. Se você entra em um Starter Pack criado por alguém influente, ganha seguidores de graça sem parar; mas, se tenta construir presença por conta própria desde o início, quase não é descoberto
    • Fico curioso se você também tentou o Mastodon. Muita gente tem uma experiência melhor lá
  • Bluesky e atproto parecem ter sido pensados com a ideia de serem hackeáveis
    A comunidade criou recentemente um diretório para pesquisar os “Starter Packs” do Bluesky. Starter Packs são um recurso em que usuários publicam conjuntos de pessoas e feeds que vale a pena seguir, ajudando novos usuários a montar rapidamente sua experiência inicial
    https://blueskydirectory.com/starter-packs/all
    Dan Abramov também viu isso com bons olhos hoje e disse: “É legal que esse tipo de coisa seja possível dentro do ecossistema. Deixem o ecossistema cozinhar” [1]
    De forma mais incisiva, ele também disse: “Ao ver projetos aleatórios surgindo no ecossistema atproto, dá para sentir de novo o quanto o commons da web pública foi sufocado quando as empresas de social fecharam suas APIs. Uma paisagem inteira de ferramentas foi abandonada e deixada para trás” [2]
    [1] https://bsky.app/profile/danabra.mov/post/3lar3sdna222d
    [2] https://bsky.app/profile/danabra.mov/post/3lar3xpuu4c2d

    • Eu estava pensando em migrar, e este comentário foi o que mais me convenceu
      Acho que um dos erros fatais cometidos pelas empresas de tecnologia foi trancar tudo. O que tornou computadores e smartphones excelentes foi a possibilidade de hackear, de criar ambientes e ecossistemas. O bloqueio só desacelera as coisas. Fico pensando quanto tempo levaria para smartphones terem lanterna ou cronômetro se não existissem apps. Antes de virarem recursos embutidos no sistema operacional, essas funções eram apps
    • Acho que o Twitter também tinha um pouco dessa característica originalmente. Pelo que lembro, recursos hoje populares, como o retweet, começaram como convenções improvisadas pelos próprios usuários
    • Exato, foi feito intencionalmente para ser hackeável. Acreditamos que mídias sociais ficam melhores quando as pessoas têm liberdade para criar em cima, modificar, fazer fork e remixar. O ecossistema Bluesky e atproto pode evoluir tão rápido quanto usuários e desenvolvedores quiserem
    • Starter Packs são ótimos. Talvez seja interessante ver quais contas estão tendo mais interação agora: https://www.graphtracks.com
    • Por outro lado, isso também pode levar a um problema de bots 10 vezes pior que o do Twitter
  • Parece que o Bluesky explodiu bastante em certos nichos na semana passada. Desde sábado, meus seguidores aumentaram 5 a 6 vezes
    Eu já vinha usando com certa frequência no último ano, porque as conversas do Twitter na área de energia em que trabalho ficaram tão degradadas que se tornaram quase inúteis. Eram agressivas em vários sentidos, e o spam era absurdo. Já o Bluesky era mais tranquilo, mas sem muita resposta; agora o clima está esquentando. Espero que essa entrada seja real, e isso me fez passar a usar bem mais

    • Meu X não ficou tão degradado. Uso bastante o X em japonês, então talvez seja outro ecossistema. Mesmo assim, também venho usando o Bluesky no último ano e, por um tempo, era uma rede divertida, mas bem silenciosa. Às vezes passava cerca de uma hora sem posts novos
      Nas últimas três semanas, o Bluesky ficou muito mais ativo e agora parece com o X no sentido de que já não consigo acompanhar todo o feed. Acredito que uma comunidade maior traz perspectivas mais variadas, então estou bastante animado. Também opero meu próprio rotulador do Bluesky e um coletor do Firehose, e vi a taxa de eventos processados praticamente dobrar nos últimos 3 a 4 meses
    • Spammers e trolls também virão em breve. Lugares populares não ficam abandonados por muito tempo
    • Para mim, tudo está se encaixando
      Threads é uma mistura meio Twitter, meio Instagram, com força em criação, viagens e conteúdo social; Bluesky é mais parecido com o Twitter inicial, forte em notícias, política e ciência. Hoje em dia, não sei se ainda é possível fazer tudo em um único app. Nesse cenário, o X fica como o novo 4chan
    • Minha experiência foi assim em todos os aspectos. Uma entrada repentina de gente, muitas pessoas interessantes e relevantes para seguir, e a experiência como um todo ficando rapidamente mais envolvente
    • Ainda não encontrei contas utilitárias no Bluesky. No Twitter, sigo para acompanhar notícias de games, estúdios e publishers de jogos, sites de notícias, bandas, a NASA e coisas assim. No Bluesky ainda não há isso, e não tenho interesse em desconhecidos individuais. No Twitter também é assim
      Dou uma olhada de vez em quando, mas na prática está perto de 0/50
  • Faz parte da onda de usuários que migraram para o Bluesky na semana passada. Até agora estou gostando muito e fiquei um pouco surpreso, porque tinha me decepcionado com o Mastodon antes. Já estou passando mais tempo no Bluesky do que no Twitter.
    Para explicar a quem não sabe o que é o Bluesky: é praticamente uma cópia do Twitter por volta de 2015, e a UI também é quase igual. Só que, sem monetização, anúncios e growth hacking, os principais recursos existem para o usuário. Um exemplo de que gosto é o app mobile simples baseado em Expo/React Native, que permite abrir links no Safari em vez de usar um navegador embutido inútil

    • Como o Bluesky recebeu investimento de VC, acho que é só questão de tempo até começarem a monetização, os anúncios e o growth hacking. Melhor aproveitar até lá
    • Testei, e a tecnologia parece bacana, mas eu gostaria que houvesse conteúdo mais diverso. Agora que o Twitter virou, em grande parte, golpes de criptoativos e bobagens da extrema direita americana, quero algo um pouco mais interessante do que bobagens da extrema esquerda americana.
      O mundo é muito maior do que os EUA ou dramas da internet ocidental. Como europeu, ler as redes sociais mainstream, incluindo o BlueSky, me deixa de olhos revirados. Não tenho interesse em política, identidade de gênero ou ativismo de teclado. Fico pensando se não dá para colocar outra coisa no cardápio. Qualquer coisa mesmo. Chego a pensar se preciso aprender russo ou chinês para ser exposto a algo novo que não seja política americana ou quem se sente atraído por qual gênero na vida privada. Quem se importa?
      O Nostr foi divertido tecnicamente, mas é uma pena que nunca tenha conseguido sair da fase dos crypto bros
    • Se é “uma cópia do Twitter por volta de 2015, sem monetização, anúncios e growth hacking, então os recursos existem para o usuário”, isso é exatamente o Mastodon
    • Fico curioso para saber como ele se compara ao Threads
  • Bem legal. A API do BlueSky é bem feita. Um colega criou uma visualização desse tipo baseada no Firehose: https://bigmood.blue/
    Fonte: https://bsky.app/profile/even.westvang.com/post/3laob7tefxk2...

  • É difícil exagerar o quanto gosto disso. O resultado final não só comunica informações em várias dimensões, como também é visualmente muito atraente.
    A sensação de partículas criada ao renderizar um número enorme de nós acrescenta uma qualidade especialmente agradável. É algo que não se vê com frequência em outras visualizações de grafos

  • A melhor coisa do Bluesky é poder usar um domínio como nome de usuário. Eu uso @bradgessler.com lá, e, se as pessoas quiserem me “verificar”, elas veem meu site, que é muito mais significativo do que uma marca de verificação azul.
    Mesmo que eu seja bloqueado, banido ou expulso da plataforma, as pessoas podem ver meu domínio, ir até lá e conferir o que aconteceu. Em certo sentido, é uma estrutura em que a censura fica visível. Acho que também seria bom para empresas. É muito menos ambíguo chamar uma empresa por @example.com e receber uma resposta. Também criei um starter pack reunindo alguns SaaS baseados em Rails que já estão fazendo isso: https://go.bsky.app/JQyXa2u
    Gosto muito do que o BlueSky está fazendo e espero que não se degrade daqui para a frente. Mesmo que isso aconteça, agora parece um momento Goldilocks em que o clima está muito bom. Criar uma conta e conectá-la ao próprio domínio leva 5 minutos, então recomendo muito

    • A verificação de identidade do Mastodon também é aberta a todos e baseada em padrões abertos da web.
      https://joinmastodon.org/verification
    • O endereço .bsky.social, que é o handle padrão recebido ao se cadastrar, também redireciona por padrão para o perfil no bsky.app. Mesmo alguém que não saiba nada sobre o Bluesky, ao abrir esse URL, consegue ver diretamente o perfil social, mesmo com o @
  • O texto diz: “O que acontece se colocarmos a matriz do BlueSky no UMAP? Pelo menos diretamente, não dá. O UMAP tecnicamente aceita matrizes esparsas, mas essa escala é grande demais para meu servidor doméstico. Em vez disso, é possível extrair embeddings de todos os usuários em uma dimensão intermediária, como 32, usando outra técnica, e então passar isso para o UMAP. Fácil!”; fico curioso para saber exatamente como os embeddings foram derivados

  • Ao ver a frase “a criação e a consulta de quadtree são inerentemente hierárquicas”, fiquei feliz em perceber que não sou o único que se confunde com hierarchy.
    É um trabalho interessante em vários níveis. Sem trocadilho. Há muita coisa para ver, desde a disponibilidade dos dados do Bluesky até o processamento e os algoritmos de visualização. Ainda assim, não está muito claro onde colocar esse tipo de visualização no espectro da ciência de dados. Gráficos numéricos tradicionais desenvolveram, com o tempo, uma gramática bastante sofisticada, permitindo inferências e interpretações relativamente precisas. Por isso são muito usados para transmitir informações de fato, em artigos científicos, no setor financeiro etc., e as pessoas chegam a fazer engenharia reversa de gráficos para reconstruir os dados.
    No caso de redes e grafos, fora uma noção geral de topologia, conectividade e agrupamentos, é bem difícil especificar quais informações estão sendo transmitidas. Não sei se ainda não foi inventada uma gramática útil para lidar com esses grafos em grande escala, ou se essa é simplesmente a natureza deles

  • Gostaria de ver mais estes dados pela perspectiva de processamento de linguagem natural. Seria bom poder ver, como no Google Trends, quais temas de discussão aparecem regularmente e o que dispara em determinados períodos.
    Será que seria possível resumir o que os economistas estão discutindo? Fico curioso se daria para encontrar pessoas que não estão nas redes umas das outras, mas que falam sobre a mesma coisa