1 puntos por GN⁺ 2024-11-14 | 1 comentarios | Compartir por WhatsApp
  • Gracias al stream público de eventos, en Bluesky fue posible construir un mapa del grafo social completo a escala de 13 millones de usuarios, algo difícil de hacer en Twitter
  • El pipeline de recolección filtró solo follows y unfollows del firehose WebSocket de bsky.network y los guardó en SQLite; en ese momento la tabla follows tenía más de 500 millones de filas y ocupaba unos 30 GB
  • Para posicionar 13 millones de nodos y 500 millones de aristas se creó Andromeda, un motor multihilo de force-directed layout basado en Zig, pero en grafos sociales grandes mostró la limitación de que la estructura local se vuelve borrosa
  • Al combinar embeddings GGVec con UMAP se obtuvo más estructura intermedia, y el solapamiento de puntos de UMAP se refinó simulando algunos ticks extra con Andromeda para ajustar los clústeres densos
  • El mapa final, filtrado al 7 de noviembre de 2024, muestra 7.7 millones de nodos y permite explorar anillos de bots, clústeres por país y grupos de cuentas de medios/política con muchos seguidores

Por qué fue posible un mapa de toda la red de Bluesky

  • En Twitter es difícil hacer un mapa completo porque no se puede usar todo el conjunto de datos y además el scraping es complicado y puede ser ilegal
  • BlueSky sí permite obtener los datos necesarios y creció mucho durante varios meses de 2024
    • Entre las razones del crecimiento están el conflicto continuo entre Twitter y su base de usuarios, y el bloqueo de Twitter en Brasil en octubre de 2024
  • El resultado puede explorarse como mapa interactivo en aurora.ndimensional.xyz
    • Como usa WebGPU, se necesita Chrome/Chromium de escritorio

Cómo se recolectó el grafo de follows

  • Para reducir el alcance del trabajo, se usó solo el grafo de follows en lugar de toda la actividad
    • Cada follow se trata como una arista no dirigida
    • Si dos cuentas se siguen mutuamente, se generan dos aristas y en la práctica el peso se duplica
  • BlueSky está basado en AT Protocol y fue diseñado para que los usuarios puedan alojar su propio PDS (personal data server)
  • La recolección real usó el firehose WebSocket del relay bsky.network, operado por el equipo de BlueSky
    • Agrega eventos del PDS principal *.bsky.social y de PDS independientes que solicitaron indexación
    • Los eventos de toda la red se transmiten en tiempo real y actualmente rondan los 500 eventos por segundo
    • De ellos, solo se filtraron follows y unfollows para guardarlos en una base de datos SQLite local
  • Al principio, el indexador se desplegó en fly.io y la base de datos se replicaba en tiempo real a AWS S3 con litestream, pero por el costo mensual de 40 dólares se cambió a un servidor casero
    • Después se operó en una desktop System76 en casa, combinando servicios systemd, logrotate, monitoreo con tmux y TailScale
  • Al momento de escribir esto, BlueSky había superado los 13 millones de usuarios, y la tabla follows tenía más de 500 millones de filas con un uso de disco de unos 30 GB

Cuellos de botella computacionales en un grafo de 13 millones de nodos

  • Existen varios métodos para layout de grafos, pero aquí el punto de partida fue un force-directed layout que funciona como una simulación física
    • Todos los nodos tienen una fuerza de repulsión entre sí
    • Las aristas generan una fuerza de atracción entre origen y destino
    • En cada tick de simulación se calcula la fuerza neta por nodo y se desplaza escalándola con un parámetro de temperatura
  • El cuello de botella no está tanto en el tamaño del grafo como en la complejidad computacional del n-body problem
    • Un algoritmo simple requiere O(n^2) + O(e) por tick
    • A escala de millones de nodos, ni siquiera con GPU resulta práctico
  • Si se usa la optimización Barnes-Hut, como en motores force-directed comunes, se reduce a O(n log(n)) + O(e)
    • A cambio, se aproxima el efecto de los nodos lejanos
    • Como la construcción y consulta del quadtree son jerárquicas, en GPU no es fácil calcular las fuerzas de los nodos
  • Para paralelizar, el quadtree se dividió en 4 o 16 quadtrees, que se reconstruyen en paralelo al inicio de cada tick, y luego se reparte entre hilos el rango de nodos para calcular fuerzas
    • La fuerza neta de cada nodo es la suma de las fuerzas aportadas por cada quadtree y por las aristas entrantes y salientes
    • Así se puede aprovechar casi toda la CPU disponible sin overhead apreciable

Andromeda y los límites del enfoque force-directed

  • Se creó Andromeda, un motor multihilo de layout de grafos force-directed en Zig, con una GUI hecha con GTK4 y OpenGL
  • Andromeda está muy influido por Gephi y por el artículo de ForceAtlas2
    • En la visualización de grafos grandes, la interactividad para observar cómo cambia el grafo y ajustar dinámicamente los parámetros de simulación es importante
    • Con herramientas opacas y de iteración lenta es difícil obtener buenos resultados
  • Andromeda también incluye un widget de UI llamado “natural slider”
    • Sirve para reducir el problema de no saber de antemano qué rango de valores es adecuado al trabajar con un grafo nuevo, una versión nueva del motor o parámetros nuevos
    • Ajusta dinámicamente el rango de valores en potencias de e
    • Se consideró que las potencias de 2 son demasiado pequeñas y las de 10 demasiado grandes
  • Al aplicar un layout ForceAtlas2 a un snapshot de 5 millones de usuarios de BlueSky en septiembre de 2024, se veía la masa y densidad de los clústeres grandes, pero en general predominaba una forma apelmazada
    • La mayoría de los nodos quedaban dispersos en una zona amplia y difícil de distinguir alrededor de un superclúster
    • Solo unas cuantas decenas de comunidades pequeñas, principalmente por país, se separaban con claridad
  • Incluso cuando se publicó una versión de 2 millones de cuentas en febrero de 2024, aunque la vista global resultaba interesante, la vista local fue decepcionante
    • A veces, aunque un usuario encontrara su cuenta, no reconocía las cuentas cercanas
    • Es difícil capturar por completo la estructura de conexión de toda la red usando solo una disposición en un plano 2D

UMAP, color y mapa final

  • El layout del grafo también puede verse como una reducción de dimensionalidad, es decir, el problema de proyectar una matriz de adyacencia de 13 millones × 13 millones en un plano 2D
  • t-SNE y UMAP son técnicas no lineales de reducción de dimensionalidad muy potentes para visualización en 2D
    • Pero meter directamente la matriz de BlueSky en UMAP era demasiado para la escala de un servidor casero
    • En su lugar, se creó un embedding de unas 32 dimensiones por usuario, y ese resultado se pasó a UMAP
  • Como herramienta open source de embeddings de nodos se eligió nodevectors, y el algoritmo no publicado GGVec parecía ofrecer el mejor rendimiento en paralelo para grafos grandes
    • El embedding del snapshot de 5 millones de nodos de septiembre de 2024 se generó en solo 5 minutos
    • La primera imagen con UMAP se obtuvo en otros 10 minutos
    • Apareció mucha más estructura intermedia que en el resultado apelmazado de Andromeda
  • UMAP tenía el problema de volver algunos clústeres demasiado densos, haciendo que los puntos se solaparan
    • Para el objetivo puro de reducción de dimensionalidad, mantener los mismos puntos en la misma posición relativa entre el espacio original y el de destino es un comportamiento natural
    • Pero no era adecuado para un mapa que muestra fotos de perfil por cuenta cuando se hace zoom de cerca
  • Internamente, UMAP también usa en su etapa final un force-directed layout sobre un grafo ponderado de k vecinos más cercanos
    • Como UMAP usa muestreo por restricciones de cómputo, no todos los nodos se repelen entre sí, ni siquiera de forma aproximada al estilo Barnes-Hut
    • Se concluyó que el parámetro min_dist no controlaba de manera consistente la separación entre puntos en grafos grandes
  • El problema del solapamiento se alivió pasando la salida de UMAP a Andromeda y ejecutando algunos ticks más con una ecuación de repulsión ajustada
    • Así, incluso en clústeres densos, los nodos llenan el espacio sin quedar apilados por capas
    • En la próxima versión se quiere acceder a los pesos brutos del grafo creado por UMAP y combinar directamente el quadtree paralelo de Andromeda con la ecuación de fuerzas del artículo de UMAP
  • En lugar de aplicar HDBScan al resultado de UMAP, el color se asignó haciendo clustering k-means en el espacio de embeddings
    • A cada clúster se le asigna un hue
    • Para cada punto, el hue se interpola usando los tres centros de clúster más cercanos
    • Comparado con un color basado en PCA, esto revela mejor la estructura local y, de cerca, da una textura parecida a un vitral moteado
  • El hue es un solo float entre 0 y 1, que se mapea a RGB en el espacio de color hsluv
    • La saturación se mantiene constante en todos los nodos
    • La luminosidad se escala con el log10 del número de seguidores del usuario, para que las cuentas grandes parezcan estrellas brillantes y las de pocos seguidores se vean tenues
    • Se descartó renderizar las cuentas grandes con mayor tamaño real porque se volvía demasiado complejo en un grafo grande
  • El mapa completo de la red al 7 de noviembre de 2024 quedó en 7.7 millones de nodos, excluyendo cuentas con más de 50 mil follows y cuentas con menos de 5 follows y menos de 5 seguidores
    • Las franjas claras de cuentas de medios, política y comentario con muchos seguidores se distinguen del fondo de grupos menos relacionados
    • También se puede identificar el clúster de Islandia tanto desde lejos como de cerca, incluso a nivel de fotos de perfil
    • Los anillos de bots también se ven claramente
  • Como próxima función, se quiere agregar una barra lateral para desplegar la línea de tiempo de publicaciones de las cuentas visibles en pantalla
    • El objetivo es convertirlo en una nueva clase de herramienta para explorar redes sociales y memes

1 comentarios

 
GN⁺ 2024-11-14
Opiniones en Hacker News
  • El feed de BSKY se siente como un espacio completamente muerto. Intenté participar activamente publicando, respondiendo y dando likes, pero se siente como si nada terminara de cuajar.
    Publicar “para mí mismo” también tiene un límite, así que pronto pierde el interés. En los primeros días de Twitter todos estaban emocionados por seguir gente nueva; si es una red social nueva, ¿no debería estar llena de personas queriendo crear nuevas relaciones?

    • La cuenta de ese usuario sigue a muy pocas personas y parece más cercana a emitir contenido como si fuera una transmisión que a participar en conversaciones. Quizá convendría probar lo contrario.
    • Ahora en BSKY hay un gran problema de los ricos se hacen más ricos y los pobres más pobres por los starter packs. Si entras en un starter pack creado por alguien influyente, ganas seguidores gratis sin parar, pero si intentas construir presencia desde cero, casi nadie te descubre.
    • Me pregunto si también probaste Mastodon. Hay mucha gente que tiene una mejor experiencia ahí.
  • Bluesky y atproto parecen pensados para hacerlos hackeables.
    La comunidad creó recientemente un directorio donde se pueden buscar “Starter Packs” de Bluesky. Los Starter Packs son una función que publica paquetes de personas y feeds que podría valer la pena seguir, para ayudar a los usuarios nuevos a configurar rápidamente su experiencia inicial.
    https://blueskydirectory.com/starter-packs/all
    Dan Abramov también vio esto con buenos ojos hoy y dijo: “Es genial que cosas así sean posibles dentro del ecosistema. Dejemos que el ecosistema cocine” [1].
    Más incisivamente, también dijo: “Al ver surgir proyectos arbitrarios en el ecosistema atproto, uno vuelve a sentir cuánto sofocaron las compañías sociales los bienes comunes de la web pública al cerrar sus API. Todo un paisaje de herramientas fue abandonado y dejado de lado” [2].
    [1] https://bsky.app/profile/danabra.mov/post/3lar3sdna222d
    [2] https://bsky.app/profile/danabra.mov/post/3lar3xpuu4c2d

    • Estaba pensando en pasarme, y este comentario es el que más convincente me resulta.
      Creo que uno de los errores fatales que cometieron las empresas tecnológicas fue encerrar todo. Lo que hizo grandiosas a las computadoras y a los smartphones fue que se podían hackear, y que permitían crear entornos y ecosistemas. El cierre solo ralentiza las cosas. Me pregunto cuánto habría tardado en llegar una linterna o un cronómetro al smartphone si no hubieran existido las apps. Antes de integrarse al sistema operativo, esas funciones fueron apps.
    • Creo que Twitter también tenía originalmente algo de esto. Si no recuerdo mal, funciones populares actuales como el retuit empezaron como convenciones improvisadas por los usuarios.
    • Exacto, se diseñó intencionalmente para que fuera hackeable. Creemos que las redes sociales mejoran cuando la gente tiene la libertad de construir encima, cambiar, hacer forks y remixar. El ecosistema de Bluesky y atproto puede evolucionar tan rápido como quieran los usuarios y desarrolladores.
    • Los Starter Packs son excelentes. ¿Qué tal ver las cuentas con más interacción ahora mismo?: https://www.graphtracks.com
    • Por otro lado, también podría derivar en un problema de bots 10 veces peor que el de Twitter.
  • Parece que Bluesky explotó mucho la semana pasada en ciertos ámbitos. Desde el sábado, mis seguidores aumentaron 5 a 6 veces.
    Estuve bastante activo durante el último año, porque las conversaciones de Twitter en el sector energético en el que trabajo se habían deteriorado tanto que casi ya no servían. Eran agresivas en varios sentidos y el spam era absurdamente abundante. En cambio Bluesky era relajado, pero no generaba mucha respuesta; ahora el ambiente se está calentando. Espero que esta llegada de usuarios sea real, y gracias a eso lo estoy usando mucho más activamente.

    • Mi X no se deterioró demasiado. Uso mucho X en japonés, y quizá ahí sea otro ecosistema. Aun así, también he usado Bluesky durante el último año, y durante un tiempo fue una red divertida pero bastante silenciosa. A veces podía pasar una hora sin publicaciones nuevas.
      En las últimas 3 semanas Bluesky se volvió mucho más activo, y ahora se siente similar a X en el sentido de que ya no puedo ponerme al día con todo el feed. Creo que una comunidad grande genera perspectivas más diversas, así que me entusiasma mucho. También opero mi propio etiquetador de Bluesky y un recolector de Firehose, y durante los últimos 3 o 4 meses vi que el volumen de eventos procesados prácticamente se duplicó.
    • Los spammers y trolls también llegarán pronto. Un lugar popular no queda abandonado por mucho tiempo.
    • Para mí, todo está empezando a acomodarse.
      Threads es una mezcla mitad anti-Twitter y mitad Instagram, fuerte en creación, viajes y contenido social; Bluesky se parece más al Twitter temprano, fuerte en noticias, política y ciencia. Últimamente no sé si sea posible hacerlo todo en una sola app. Entonces X quedaría como el nuevo 4chan.
    • Mi experiencia fue así en todos los sentidos. Una llegada repentina de usuarios, mucha gente interesante y relevante a la cual seguir, y toda la experiencia volviéndose rápidamente más inmersiva.
    • Todavía no he encontrado cuentas de utilidad en Bluesky. En Twitter sigo cuentas para enterarme de novedades de juegos, estudios y publishers de videojuegos, sitios de noticias, bandas, NASA y cosas así. En Bluesky todavía no hay eso, y no me interesan desconocidos particulares. En Twitter me pasa lo mismo.
      Lo reviso de vez en cuando, pero en la práctica está cerca de 0/50.
  • Es parte de la ola de usuarios que se mudó a Bluesky la semana pasada. Hasta ahora me gusta mucho, y me sorprendió un poco porque Mastodon me había decepcionado antes. Ya estoy pasando más tiempo en Bluesky que en Twitter.
    Para explicárselo a alguien que no sabe qué es Bluesky: es casi una copia de Twitter de alrededor de 2015, y la UI también es casi igual. Pero como no hay monetización, publicidad ni growth hacking, las funciones principales existen para los usuarios. Un ejemplo que me gusta es la app móvil sencilla basada en Expo/React Native, que permite abrir links en Safari en lugar de usar un navegador dentro de la app que no sirve para nada.

    • Dado que Bluesky recibió inversión de VC, parece cuestión de tiempo para que empiecen la monetización, la publicidad y el growth hacking. Habrá que disfrutarlo hasta entonces.
    • Lo probé y la tecnología se ve genial, pero me gustaría que hubiera contenido más diverso. Ahora que Twitter se volvió en su mayoría estafas de criptoactivos y tonterías de la extrema derecha estadounidense, quiero algo un poco más interesante que tonterías de la extrema izquierda estadounidense.
      El mundo es mucho más grande que Estados Unidos o el drama de internet occidental. Como europeo, leer las redes sociales mainstream, incluido BlueSky, me hace poner los ojos en blanco. No me interesan la política, la identidad de género ni el activismo de teclado. Me pregunto si no podrían poner otra cosa en el menú. Literalmente cualquier cosa estaría bien. Estoy llegando a pensar si tengo que aprender ruso o chino para exponerme a algo nuevo que no sea política estadounidense o quién se siente atraído por qué género en su vida privada. A quién le importa.
      Nostr fue técnicamente divertido, pero es una lástima que nunca logró salir de la fase de crypto bros.
    • Si es “una copia de Twitter de alrededor de 2015 y, al no tener monetización, publicidad ni growth hacking, sus funciones existen para los usuarios”, entonces es exactamente igual que Mastodon.
    • Me da curiosidad cómo se compara con Threads.
  • Bastante genial. La API de BlueSky está bien hecha. Un colega hizo una visualización como esta basada en Firehose: https://bigmood.blue/
    Fuente: https://bsky.app/profile/even.westvang.com/post/3laob7tefxk2...

  • Es difícil exagerar cuánto me gusta esto. El resultado final no solo comunica información en varias dimensiones, sino que además es visualmente muy atractivo.
    La sensación de partículas que surge al renderizar una cantidad enorme de nodos le suma una sensación especialmente agradable. Es un elemento que no se ve seguido en otras visualizaciones de grafos.

  • Lo mejor de Bluesky es que puedes usar un dominio como nombre de usuario. Yo uso @bradgessler.com ahí, y si la gente quiere “verificarme”, ve mi sitio web, que es mucho más significativo que una marca azul.
    Aunque me bloqueen, me prohíban o me echen de la plataforma, la gente puede ver mi dominio, ir ahí y comprobar qué pasó. En cierto sentido, es una estructura en la que la censura queda expuesta. Creo que también es bueno para empresas. Llamar a una empresa como @example.com y recibir respuesta es mucho menos ambiguo. Incluso hice un starter pack con algunos SaaS basados en Rails que ya lo hacen: https://go.bsky.app/JQyXa2u
    Me gusta mucho lo que está haciendo BlueSky, y espero que no se degrade en el futuro. Incluso si eso pasa, ahora parece un momento Ricitos de Oro con muy buen ambiente. Crear una cuenta y conectarla con tu propio dominio toma 5 minutos, así que lo recomiendo mucho.

    • La verificación de identidad de Mastodon también está abierta para todos y se basa en estándares web abiertos.
      https://joinmastodon.org/verification
    • La dirección .bsky.social que recibes por defecto al registrarte también redirige, por defecto, al perfil en bsky.app. Incluso alguien que no tiene idea de qué es Bluesky puede abrir esa URL y ver directamente el perfil social, aunque tenga una @.
  • Dice: “¿Qué pasa si metes la matriz de BlueSky en UMAP? Al menos no se puede hacer directamente. Aunque UMAP técnicamente acepta matrices dispersas, esta escala es demasiado grande para mi servidor casero. En cambio, puedes usar otra técnica para obtener embeddings de todos los usuarios en una dimensión intermedia, como 32, y luego meter eso en UMAP. ¡Fácil!”. Me pregunto exactamente cómo derivaron esos embeddings.

  • Al ver la frase “la generación y consulta de un árbol de cuadrantes es inherentemente jerárquica”, me dio gusto pensar que no soy el único que se confunde con hierarchy.
    Es un trabajo interesante en varios niveles. Sin juego de palabras. Hay mucho que ver, desde la disponibilidad de datos de Bluesky hasta el procesamiento y los algoritmos de visualización. Pero no queda del todo claro dónde ubicar este tipo de visualización dentro del espectro de la ciencia de datos. Los gráficos numéricos tradicionales han desarrollado con el tiempo una gramática bastante sofisticada, que permite inferencias e interpretaciones relativamente precisas. Por eso se usan mucho para comunicar información real en artículos científicos, finanzas, etc., e incluso hay gente que hace ingeniería inversa de gráficos para recuperar los datos.
    En redes y grafos, más allá de una sensación general de topología, conectividad y clusters, es bastante difícil precisar qué información se está comunicando. No sé si todavía no se ha inventado una gramática útil para manejar estos grafos a gran escala, o si simplemente son así por naturaleza.

  • Me gustaría ver estos datos más desde la perspectiva del procesamiento de lenguaje natural. Sería bueno poder ver, como en Google Trends, qué temas de conversación aparecen regularmente y qué se dispara en ciertos períodos.
    Me pregunto si se podría resumir de qué están hablando los economistas. ¿Se podría encontrar a personas que no están en la red unas de otras, pero que hablan de lo mismo?