2 puntos por GN⁺ 2024-05-10 | 1 comentarios | Compartir por WhatsApp
  • El autor llevó a cabo un proyecto para analizar más de 40 millones de publicaciones y comentarios de Hacker News utilizando embeddings de texto
  • El objetivo principal del proyecto era implementar funciones mejoradas de búsqueda, recomendación y análisis
  • Para ello, recopiló datos mediante la API de Hacker News y obtuvo contexto adicional con crawling de páginas web
  • A partir de los datos recopilados, generó embeddings de texto y los mapeó a un espacio 2D usando UMAP
  • Con esos datos mapeados, creó un mapa interactivo de "Hacker News Universe"
  • Además, aprovechó los embeddings para implementar funciones como búsqueda semántica, comunidades virtuales automáticas y análisis de popularidad/sentimiento
  • Para procesar datos a gran escala, usó un clúster de GPU y desplegó servidores edge para mejorar la experiencia de usuario

Recolección de datos de Hacker News

  • Se recopilaron más de 40 millones de publicaciones y comentarios usando la API de Hacker News
  • Como las respuestas de la API eran lentas, se implementó un servicio basado en Node.js para procesamiento en paralelo
  • La puntuación de las publicaciones no baja de -1, y la puntuación de los comentarios no puede consultarse por la API
  • Algunas publicaciones y comentarios tienen el título y el cuerpo vacíos (probablemente editados por moderadores)
  • En algunos casos, el ID del comentario es menor que el de su comentario padre (probablemente porque los moderadores movieron el árbol de comentarios)

Generación de embeddings de texto

  • Como solo el título no bastaba para representar semánticamente una publicación, se obtuvo contexto adicional mediante crawling de páginas web
  • Generar embeddings de texto requiere GPU de alto rendimiento, y procesar 40 millones de entradas podría tomar casi un año
  • Con RunPod se armó un clúster de GPU a bajo costo, y se desarrollaron db-rpc y queued para mejorar la eficiencia del procesamiento distribuido
  • Usando 150 GPU, se generaron embeddings para 40 millones de textos en solo unas horas

Obtener contexto adicional con crawling de páginas web

  • Como la calidad de los embeddings no era buena usando solo los títulos de las publicaciones, se hizo crawling de las páginas enlazadas para obtener contexto adicional
  • El crawler se implementó en Rust y logró un rendimiento 10 veces superior al de la versión en Node.js
  • Muchos enlaces estaban rotos (link rot), así que se recuperaron usando la API de Internet Archive
  • Al final, no se pudo obtener menos del 5% de los 4 millones de páginas

Generación de embeddings de texto mejorados

  • Se cambió al modelo jina-embeddings-v2-small-en para usar la página web completa como entrada
  • Las publicaciones con poco contexto se complementaron añadiendo los comentarios principales
  • Para los comentarios, la entrada se construyó teniendo en cuenta la estructura jerárquica e incluyendo incluso comentarios ancestros

Reducción de dimensionalidad con UMAP

  • Se usó UMAP para reducir embeddings de 1024 dimensiones a un espacio bidimensional
  • Para la reducción de dimensionalidad se necesitan el grafo de PyNNDescent y los embeddings originales
  • Procesar un millón de entradas de alta dimensionalidad toma alrededor de una hora y media en una CPU de 96 núcleos
  • Como resultado de la reducción de dimensionalidad, se visualizaron intereses y distribuciones de popularidad

Similitud del coseno

  • Para calcular la similitud entre embeddings, se usa mucho la distancia coseno
  • La distancia coseno representa la diferencia angular entre vectores y, a diferencia de la distancia euclidiana, no se ve afectada por la magnitud del vector
  • Esto es adecuado para calcular similitud entre textos, porque incluso una discusión larga e intensa debería mapearse cerca si el tema es similar
  • El cálculo de similitud coseno puede implementarse fácilmente con multiplicación de matrices

Creación del mapa Hacker News Universe

  • A partir de los embeddings, se creó un mapa interactivo de Hacker News similar a Google Map
  • Incluye funciones como ajustar la cantidad de puntos visibles al hacer zoom, etiquetar algunos puntos y mostrar información detallada al hacer clic
  • Como enviar millones de puntos al navegador de una sola vez no era viable, se implementó carga progresiva mediante tiling y LOD
  • Cada tile contiene como máximo 1500 puntos y se mantiene por debajo de 20 KB, asegurando diversidad según la densidad regional
  • La web app se implementó con Canvas y WebWorker, y las funciones del mapa se diseñaron tomando Google Map como referencia

Efectos visuales adicionales

  • Se añadieron elementos como landmarks, límites y relieve, como en un mapa real, para mejorar la inmersión y la orientación
  • Se dibujaron isolíneas de claroscuro según la densidad de puntos para representar las áreas de mayor interés en HN
  • Se usó Gaussian blur para trazar contornos suaves y luego se convirtieron a SVG para generar imágenes vectoriales sin pérdida
  • También se añadieron "ciudades" que representan temas destacados, para guiar al usuario hacia áreas específicas

Pruebas de la función de búsqueda

  • La búsqueda basada en embeddings semánticos muestra resultados más relevantes y variados que la búsqueda por palabras clave
  • También entiende bien consultas en forma de pregunta y encuentra temas similares incluso sin palabras idénticas
  • Gracias a la alta calidad de las publicaciones de HN, los resultados de búsqueda también exponen mucha información útil y con buenos insights
  • En el ranking de resultados, además de la relevancia, se usan la puntuación de la publicación y el peso temporal para considerar confiabilidad y frescura

Generación automática de comunidades virtuales

  • Se pueden crear comunidades virtuales con palabras clave para ver al instante una colección de publicaciones alineadas con un interés
  • Además de las publicaciones, también se pueden revisar comentarios con discusión activa relacionados con ese interés
  • También es posible identificar usuarios influyentes y muy activos sobre un tema específico
  • Usar filtrado posterior en vez de filtrado previo puede reducir considerablemente el costo computacional

Análisis de datos a gran escala

  • Se utilizó un modelo open source de análisis de sentimiento para clasificar el sentimiento positivo/negativo de 30 millones de comentarios
  • Al analizar en series temporales el sentimiento de un tema, se pueden observar cambios asociados a eventos importantes
  • También es posible comparar la popularidad entre temas usando similitud y puntuaciones
  • Para mejorar la velocidad de cálculo de consultas, se aplicaron operaciones matriciales con GPU y se incrementó mucho el rendimiento

Planes futuros

  • Soporte para actualización de datos en tiempo real
  • Desarrollo de un sistema de recomendación basado en deep learning
  • Mejora de la calidad de búsqueda mediante un modelo de reranking
  • Fortalecer el análisis de usuarios (similitud, expertise, etc.)
  • Encontrar ideas adicionales de mejora recogiendo opiniones de la comunidad

La opinión de GN⁺

  • Este proyecto muestra muy bien el proceso de recopilar, depurar y analizar datos a gran escala de forma efectiva. En particular, resultan impresionantes las técnicas de optimización de rendimiento como el procesamiento en paralelo y el uso de GPU.
  • El mapa de Hacker News que visualiza la similitud entre publicaciones combinando embeddings de texto y UMAP es un resultado muy creativo e interesante. Parece que puede ayudar mucho a los usuarios a explorar temas de interés y descubrir nueva información.
  • Las funciones de búsqueda semántica y generación automática de comunidades son ideas innovadoras que pueden llevar la experiencia de uso de Hacker News a otro nivel. Ojalá tecnologías de búsqueda que comprendan contexto e intención, más allá del simple matching por palabras clave, se expandan más entre los usuarios generales.
  • Parece que la clave será construir un pipeline de procesamiento de datos masivos en tiempo real. Habrá que evaluar cuidadosamente formas de aliviar cuellos de botella de rendimiento, como edge computing y bases de datos en memoria.
  • Dada la alta confiabilidad de los datos de HN, los resultados del análisis de sentimiento también parecen tener suficiente valor práctico. Aun así, conviene prestar atención al sesgo algorítmico y considerar entrenamiento especializado para el dominio.

1 comentarios

 
ggg213 2024-05-10

Falta el título.