4 puntos por GN⁺ 2025-11-29 | 1 comentarios | Compartir por WhatsApp
  • El dataset de Hacker News incluye 28.74 millones de publicaciones y comentarios, y cada texto está compuesto por un embedding vectorial de 384 dimensiones generado con el modelo SentenceTransformers all-MiniLM-L6-v2
  • Los datos se publican públicamente como un único archivo Parquet (bucket de S3) proporcionado por ClickHouse, y pueden utilizarse para el diseño y la evaluación de rendimiento de aplicaciones de búsqueda vectorial a gran escala
  • Se explica paso a paso cómo crear una tabla, cargar los datos y construir y ejecutar consultas con un índice de similitud vectorial basado en HNSW mediante código SQL de ejemplo
  • En el ejemplo de Python, se generan embeddings de consulta con SentenceTransformers y se ejecuta una búsqueda semántica usando la función cosineDistance() en ClickHouse
  • La aplicación de demo de resumen posterior usa LangChain y OpenAI GPT-3.5-turbo para resumir los artículos recuperados, mostrando potencial de expansión hacia casos de uso de IA generativa para empresas

Resumen del dataset de búsqueda vectorial de Hacker News

  • El dataset incluye 28.74 millones de publicaciones y comentarios de Hacker News, y cada elemento trae un embedding vectorial de 384 dimensiones creado con SentenceTransformers all-MiniLM-L6-v2
    • Los embeddings usan un modelo de embedding local para capturar el significado de frases y párrafos
  • Este dataset puede usarse para el diseño, dimensionamiento y análisis de rendimiento de aplicaciones de búsqueda vectorial a gran escala basadas en texto generado por usuarios

Detalles del dataset

  • La colección completa se ofrece como un único archivo Parquet de ClickHouse y puede descargarse desde el bucket de S3 (https://clickhouse-datasets.s3.amazonaws.com/hackernews-miniLM/…)
  • Se recomienda consultar la guía de índices ANN en la documentación de ClickHouse para estimar requisitos de almacenamiento y memoria del entorno de ejecución

Procedimiento de carga de datos y construcción del índice

  • La tabla hackernews se crea para incluir propiedades como ID de publicación, texto, vector, autor, timestamp y score, entre otros campos
  • La carga se realiza con el siguiente comando SQL
    INSERT INTO hackernews SELECT * FROM s3('https://clickhouse-datasets.s3.amazonaws.com/hackernews-miniLM/…');
    
    • La inserción de unas 28.74 millones de filas tarda unos minutos
  • El índice de similitud vectorial se crea usando el algoritmo HNSW y cosineDistance
    ALTER TABLE hackernews ADD INDEX vector_index vector TYPE vector_similarity('hnsw', 'cosineDistance', 384, 'bf16', 64, 512);
    ALTER TABLE hackernews MATERIALIZE INDEX vector_index SETTINGS mutations_sync = 2;
    
    • Con M=64 y ef_construction=512, la construcción del índice puede tardar de unos pocos minutos a varias horas según la cantidad de núcleos de CPU y el ancho de banda de almacenamiento disponible
  • Tras construir el índice, las consultas de búsqueda vectorial usan el índice automáticamente
    SELECT id, title, text
    FROM hackernews
    ORDER BY cosineDistance(vector, <search vector>)
    LIMIT 10
    
    • Cargar el índice en memoria puede tardar de unos segundos a varios minutos

Ejemplo de búsqueda semántica con Python

  • El script de Python genera el embedding de la consulta con SentenceTransformers y ejecuta la consulta a través de ClickHouse Connect
  • La similitud entre el vector de entrada y los embeddings del dataset se calcula con la función cosineDistance()
  • En la ejecución de ejemplo se obtienen los 20 resultados más relevantes para la consulta “Are OLAP cubes useful”
    • El resultado incluye el ID de cada publicación y una porción del texto (100 caracteres)

Aplicación demo de resumen

  • Luego de la muestra de búsqueda semántica y recuperación documental con ClickHouse, se presenta una aplicación de resumen basada en IA generativa
  • Pasos clave
    1. Ingresar un tema por parte del usuario
    2. Generar el embedding del tema con SentenceTransformers all-MiniLM-L6-v2
    3. Consultar publicaciones y comentarios relacionados en ClickHouse mediante búsqueda de similitud vectorial
    4. Resumir los resultados usando LangChain y OpenAI gpt-3.5-turbo
  • En el ejemplo de ejecución se busca por el tema “ClickHouse performance experiences” y GPT-3.5 genera el resumen
    • El resumen destaca el rendimiento, la simplicidad, la eficiencia y la idoneidad para análisis a gran escala de ClickHouse, y también menciona ciertas dificultades con DML y respaldos
  • Esta aplicación puede extenderse a distintos casos de uso de IA generativa para empresas, como análisis de sentimientos de clientes, automatización de soporte técnico, resumen de reuniones y análisis de documentos financieros

Estructura del código de la aplicación de resumen

  • El código Python usa SentenceTransformer, clickhouse_connect, LangChain, ChatOpenAI, entre otros
  • Los resultados de búsqueda se combinan y se envían al modelo GPT-3.5 para generar un resumen de hasta 10 frases
  • Dependiendo del recuento de tokens del texto de entrada, se selecciona la cadena stuff o map_reduce para procesarlo
  • El resultado se muestra en el formato “Summary from chatgpt-3.5:”

1 comentarios

 
GN⁺ 2025-11-29
Comentarios de Hacker News
  • En este nuevo dataset de vectores de embeddings recomiendan no usar all-MiniLM-L6-v2
    Este modelo, basado en sentence-transformers, fue práctico y muy usado en los primeros tutoriales, pero ya quedó viejo y no refleja las arquitecturas ni los pipelines de entrenamiento más recientes
    Además, su longitud de contexto es corta, de solo 512. En su lugar recomiendan EmbeddingGemma. Soporta una ventana de contexto de 2k y tiene un rendimiento excelente en benchmarks
    Es más lento, pero vale la pena. Como punto medio, bge-base-en-v1.5 o nomic-embed-text-v1.5 también están bien

    • Últimamente prefiero Qwen3-Embedding-0.6B
      Ofrece pesos abiertos, soporte multilingüe y contexto de 32k
    • Aun así, la ventaja de all-Mini es que puede ejecutarse del lado del cliente
      Como pesa unos 70MB, es fácil de descargar. EmbeddingGemma supera los 300MB, así que se vuelve más pesado
      Me pregunto si habrá algún modelo decente de menos de 100MB
    • Lo malo de EmbeddingGemma es el tema de la licencia
      La “licencia Gemma” es ambigua, así que quizá haga falta una revisión legal
      Si Google cambia la lista de “uso restringido”, siempre existe el riesgo de que pase a estar prohibido
    • Me interesa comparar modelos comerciales de embeddings
      Por ejemplo, faltan comparativas como Cohere vs OpenAI small vs OpenAI large
      No tengo claro con qué criterios habría que hacer el benchmark
    • Hace unas semanas hice una prueba AB entre EmbeddingGemma y nomic-embed-text-v1, y nomic dio resultados mucho mejores
      También funciona bien en CPU
  • Desde 2023 se están generando embeddings de todos los comentarios de HN en BigQuery y se alojan en hn.fiodorov.es
    El código fuente está publicado en GitHub

    • Lo probé directamente y dio respuestas bastante buenas
      Busqué “Who’s Gary Marcus” y el resultado salió más negativo que en Google
      Me da curiosidad cuánto cuesta operarlo
    • La explicación de la arquitectura en el repo de GitHub me pareció muy buena. Gran proyecto
    • Me gustaría saber con qué hardware generaron los embeddings y cuánto tardó
    • Quisiera saber si existe alguna función para abrir issues donde los usuarios puedan pedir que se eliminen sus datos
  • Según la Privacy and Data Policy de HN, el uso comercial de los comentarios está prohibido
    Técnicamente, una representación vectorial también cuenta como obra derivada

    • Según los Términos de uso de Y Combinator,
      está prohibido copiar, distribuir, modificar o crear derivados del contenido del sitio con fines comerciales
      También están prohibidas actividades como data mining y scraping
    • Claro, un vector es un derivado, pero mi memoria también lo es
      Yo creo que tengo derecho a crear una base de datos vectorial como ayuda externa para mi memoria
    • Es broma, pero justo estaba por pedir que borraran todos mis comentarios. Ahora ya no hará falta
    • Entonces habría que avisarle también a OpenAI
  • Estaría bueno que HN tuviera un menú de clic derecho tipo “ver oraciones similares”
    Así también se podría saber si ya se había hecho la misma sugerencia antes

    • Sería realmente interesante conectar comentarios e hilos por significado
      Se podría ver cuánto se repite la misma discusión en publicaciones distintas,
      y también revisar de antemano cómo reaccionó la gente en el pasado a algo que estoy por decir
      Podría ser una especie de semantic thread
    • Si usara esa función, seguro aparecerían montones de palabras como “tangential, orthogonal, anecdata, enshittification, razor…”
    • Hace tiempo alguien creó una herramienta para detectar cuentas alternas en HN, y daba miedo lo bien que las identificaba solo por el estilo de escritura
  • Me pregunto si existe algún paper que compare búsqueda vectorial vs búsqueda de texto tradicional
    No estoy seguro de que la búsqueda vectorial realmente valga tanto la pena

    • La búsqueda tradicional normalmente se llama bm25. En la mayoría de los papers sobre búsqueda, bm25 se usa como baseline
    • No conozco un paper en particular, pero la cuenta de reachsumit.com en Bluesky suele compartir material sobre RAG y recuperación de información
    • Lo importante es desde qué ángulo lo comparas: si es carga del servidor o experiencia de usuario, la respuesta cambia
  • Dicen que los posts de HN junto con los metadatos de embeddings ocupan 55GB, y me pregunto si eso cuadra siendo archivos Parquet

    • Supongo que la mayor parte será datos de embeddings. Mi base incluye todas las publicaciones y comentarios de HN, y pesa unos 17.68GB sin comprimir y 5.67GB comprimida
    • La eficiencia de compresión es sorprendentemente buena. Con compresión Brotli, incluso millones de páginas bajan a 1 o 2GB
    • Viendo la tabla, parece que esa cifra sí tiene sentido. Yo también quisiera generar embeddings de mis datos de upvotes para analizar mis gustos
    • Si ya está comprimido, entonces es un tamaño bastante razonable
  • Si el único objetivo es usar los comentarios para entrenar modelos comerciales, deja un sabor amargo
    Siento que eso podría afectar mis ganas de participar de ahora en adelante

    • Desde la llegada de los LLM, tengo menos ganas de escribir cosas útiles en internet
      Antes sentía que ayudaba a desconocidos; ahora siento que estoy ayudando a gente que no me cae bien
    • A mí, en cambio, me divierte pensar que mis comentarios raros van a quedar como huellas en el espacio latente de un LLM
      Quizá mis palabras resuenen levemente en algún rincón de un gran modelo del futuro
    • El ambiente está demasiado serio. Dan ganas de decir: simplemente disfrutémoslo
  • Ojalá existiera una función para borrar la cuenta o los comentarios

    • Lo que escribimos ya fue copiado a innumerables dispositivos por todo el mundo
      En la práctica ya se volvió dato permanente, y algún día mis comentarios podrían sobrevivir como si fueran sabiduría antigua
    • Como el dataset de HN ya está replicado en muchos lugares, hay que asumir que lo que se escribe aquí es contenido público
  • Taché una tarea pendiente de mi lista (gracias a este proyecto)

  • Pongámoslo así, si me pregunta un amigo… ¿si dejo un comentario aquí, eso significa que lo convierten en vector?