Hacker News oferece um conjunto de dados de busca por embeddings vetoriais com 28,74 milhões de posts e comentários
(clickhouse.com)- O conjunto de dados do Hacker News inclui 28,74 milhões de postagens e comentários, e cada texto é composto por embeddings vetoriais de 384 dimensões gerados pelo modelo SentenceTransformers all-MiniLM-L6-v2
- O dado é disponibilizado pela ClickHouse como um único arquivo Parquet (bucket S3), para uso em design e benchmark de aplicações de busca vetorial em grande escala
- Com código SQL de exemplo, é explicado passo a passo como criar a tabela, carregar os dados, criar um índice de similaridade vetorial baseado em HNSW e executar consultas de busca
- No exemplo em Python, embeddings de consulta são gerados com SentenceTransformers, e a busca semântica é realizada no ClickHouse usando a função cosineDistance()
- A aplicação de demonstração de resumo seguinte usa LangChain e OpenAI GPT-3.5-turbo para resumir as postagens recuperadas, mostrando potencial de expansão para casos de uso de IA generativa empresarial
Visão geral do conjunto de dados de busca vetorial do Hacker News
- O conjunto de dados inclui 28,74 milhões de postagens e comentários do Hacker News, e cada item inclui um embedding vetorial de 384 dimensões gerado com o SentenceTransformers all-MiniLM-L6-v2
- Os embeddings usam um modelo de embedding local para capturar o significado de frases e parágrafos
- Este conjunto de dados pode ser utilizado para projetar aplicações de busca vetorial, dimensionamento e análise de desempenho em larga escala com base em texto gerado por usuários
Detalhes do conjunto de dados
- Todo o conjunto de dados é disponibilizado pela ClickHouse como um único arquivo Parquet e pode ser baixado a partir do bucket S3
https://clickhouse-datasets.s3.amazonaws.com/hackernews-miniLM/… - Os usuários são orientados a consultar o guia de índice ANN da documentação da ClickHouse para estimar requisitos de armazenamento e memória
Processo de carregamento de dados e construção do índice
- A tabela
hackernewsé criada para incluir vários atributos, como ID da postagem, texto, vetor, autor, timestamp e pontuação - O carregamento dos dados é feito com o seguinte comando SQL
INSERT INTO hackernews SELECT * FROM s3('https://clickhouse-datasets.s3.amazonaws.com/hackernews-miniLM/…');- A inserção de cerca de 28,74 milhões de linhas pode levar alguns minutos
- O índice de similaridade vetorial é criado usando o algoritmo HNSW e 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;- Com
M=64eef_construction=512, a construção do índice pode levar de alguns minutos a algumas horas, dependendo do número de núcleos de CPU e da largura de banda de armazenamento
- Com
- Após a construção do índice, as consultas de busca vetorial passam a usar o índice automaticamente
SELECT id, title, text FROM hackernews ORDER BY cosineDistance(vector, <search vector>) LIMIT 10- Carregar o índice para memória pode levar de alguns segundos a alguns minutos
Exemplo de busca semântica em Python
- O script em Python gera o embedding da consulta de entrada com SentenceTransformers e executa a consulta via ClickHouse Connect
- A função
cosineDistance()é usada para calcular similaridade entre o vetor de entrada e os vetores do conjunto de dados - No exemplo de execução, são retornados os 20 principais itens relacionados à consulta “Are OLAP cubes useful”
- Os resultados incluem o ID de cada postagem e parte do texto (100 caracteres)
Aplicação de demonstração de resumo
- Após o exemplo de busca semântica e busca documental com ClickHouse, é apresentada uma aplicação de resumo baseada em IA generativa
- Etapas principais
- Entrada do tópico pelo usuário
- Geração do embedding do tópico com
SentenceTransformers all-MiniLM-L6-v2 - Busca de postagens/comentários relacionados no ClickHouse via busca de similaridade vetorial
- Resumo dos resultados usando
LangChaine OpenAIgpt-3.5-turbo
- O exemplo de execução faz uma busca com o tema “ClickHouse performance experiences”, e o GPT-3.5 gera um resumo
- O resumo destaca desempenho, simplicidade, eficiência e adequação para análise em grande escala do ClickHouse, além de mencionar também algumas dificuldades com DML e backups
- Esta aplicação pode ser expandida para diversos casos de uso de IA generativa empresarial, como análise de sentimento de clientes, automação de suporte, resumo de atas e análise de documentos financeiros
Estrutura do código da aplicação de resumo
- O código Python utiliza
SentenceTransformer,clickhouse_connect,LangChain,ChatOpenAI, entre outros - Os resultados da busca são combinados e enviados ao modelo GPT-3.5 para gerar um resumo com no máximo 10 frases
- Dependendo da quantidade de tokens do texto de entrada, a cadeia
stuffoumap_reduceé escolhida para o processamento - O resultado é exibido no formato “Summary from chatgpt-3.5:”
1 comentários
Comentários do Hacker News
O novo dataset de embeddings vetoriais recomenda não usar all-MiniLM-L6-v2
Esse modelo era uma opção prática baseada em sentence-transformers, muito usada nos primeiros tutoriais, mas agora está desatualizado e não reflete as arquiteturas e pipelines de treinamento mais recentes
O comprimento de contexto também é curto, de 512. Em vez disso, recomendam EmbeddingGemma. Ele suporta uma janela de contexto de 2k e tem desempenho excelente em benchmarks
É mais lento, mas vale a pena. Como meio-termo, bge-base-en-v1.5 e nomic-embed-text-v1.5 também são boas opções
Oferece pesos abertos, suporte multilíngue e contexto de 32k
Com cerca de 70 MB, é fácil de baixar. O EmbeddingGemma tem mais de 300 MB, o que pesa mais
Fico curioso se existe algum modelo utilizável com menos de 100 MB
A “licença Gemma” é ambígua, então talvez exija análise jurídica
Se o Google mudar a lista de “uso restrito”, sempre existe o risco de o uso ser proibido de repente
Por exemplo, faltam materiais comparando Cohere vs OpenAI small vs OpenAI large
Não sei com base em quais critérios fazer benchmark
Também funciona bem em CPU
Desde 2023, todos os comentários do HN estão sendo transformados em embeddings no BigQuery e hospedados em hn.fiodorov.es
O código-fonte está disponível no GitHub
Quando procurei por “Who’s Gary Marcus”, o resultado saiu mais negativo do que no Google
Fico curioso sobre quanto custa operar isso
Segundo a Privacy and Data Policy do HN, o uso comercial dos comentários é proibido
Tecnicamente, representações vetoriais também contam como obras derivadas
é proibido reproduzir, distribuir, modificar o conteúdo do site para fins comerciais ou criar obras derivadas
Além disso, atividades como data mining e scraping também são proibidas
Acho que tenho o direito de criar um banco de dados vetorial como dispositivo externo de apoio para a minha memória
Seria legal se o HN tivesse um menu de clique direito com algo como “ver frases semelhantes”
Também daria para saber se a mesma sugestão já apareceu antes
Daria para ver quantas vezes a mesma discussão se repete em posts diferentes e
até conferir de antemão reações antigas ao que estou pensando em escrever
Poderia virar uma espécie de conceito de semantic thread
Queria saber se existe algum artigo comparando busca vetorial vs busca textual comum
Fico pensando se busca vetorial realmente vale tudo isso
Dizem que posts do HN e metadados dos embeddings somam 55 GB, e fico me perguntando se isso faz sentido se forem arquivos Parquet
Se o único objetivo for usar os comentários para treinar modelos comerciais, isso deixa um gosto amargo
Acho que isso pode afetar minha vontade de participar daqui para frente
Antes parecia que eu estava ajudando desconhecidos; agora parece que estou ajudando pessoas de quem não gosto
Talvez, em algum lugar dentro de um grande modelo do futuro, minhas palavras reverberem de leve
Queria que existisse uma função para excluir conta/comentários
Na prática, virou dado permanente, e um dia meus comentários talvez sobrevivam como sabedoria antiga
Tirei um item da lista de tarefas (graças a este projeto)
Supondo que um amigo pergunte... se eu comentar aqui, isso será convertido em vetor?