ClickHouse ofrece 28.74 millones de publicaciones y comentarios de Hacker News como dataset de búsqueda con embeddings vectoriales
(clickhouse.com)- 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
hackernewsse 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=64yef_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
- Con
- 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
- Ingresar un tema por parte del usuario
- Generar el embedding del tema con
SentenceTransformers all-MiniLM-L6-v2 - Consultar publicaciones y comentarios relacionados en ClickHouse mediante búsqueda de similitud vectorial
- Resumir los resultados usando
LangChainy OpenAIgpt-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
stuffomap_reducepara procesarlo - El resultado se muestra en el formato “Summary from chatgpt-3.5:”
1 comentarios
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
Ofrece pesos abiertos, soporte multilingüe y contexto de 32k
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
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
Por ejemplo, faltan comparativas como Cohere vs OpenAI small vs OpenAI large
No tengo claro con qué criterios habría que hacer el benchmark
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
Busqué “Who’s Gary Marcus” y el resultado salió más negativo que en Google
Me da curiosidad cuánto cuesta operarlo
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
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
Yo creo que tengo derecho a crear una base de datos vectorial como ayuda externa para mi memoria
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
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
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
Dicen que los posts de HN junto con los metadatos de embeddings ocupan 55GB, y me pregunto si eso cuadra siendo archivos Parquet
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
Antes sentía que ayudaba a desconocidos; ahora siento que estoy ayudando a gente que no me cae bien
Quizá mis palabras resuenen levemente en algún rincón de un gran modelo del futuro
Ojalá existiera una función para borrar la cuenta o los comentarios
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
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?