28,7 Juta Komentar Hacker News Disediakan sebagai Dataset Pencarian Vector Embedding
(clickhouse.com)- Dataset Hacker News mencakup 28,74 juta postingan dan komentar, dengan setiap teks terdiri dari vector embedding 384 dimensi yang dihasilkan oleh model SentenceTransformers all-MiniLM-L6-v2
- Data dirilis dalam bentuk satu file Parquet (bucket S3) yang disediakan oleh ClickHouse, sehingga dapat dimanfaatkan untuk perancangan dan evaluasi performa aplikasi pencarian vektor skala besar
- Contoh kode SQL menjelaskan langkah demi langkah proses pembuatan tabel, pemuatan data, pembangunan indeks kemiripan vektor berbasis HNSW, dan eksekusi kueri pencarian
- Dalam contoh Python, SentenceTransformers digunakan untuk membuat embedding kueri, lalu pencarian berbasis makna dilakukan di ClickHouse dengan fungsi cosineDistance()
- Aplikasi demo peringkasan yang menyusul memanfaatkan LangChain dan OpenAI GPT-3.5-turbo untuk merangkum postingan yang ditemukan, sekaligus menunjukkan potensi perluasan ke kasus penggunaan AI generatif untuk perusahaan
Gambaran umum dataset pencarian vektor Hacker News
- Dataset ini mencakup 28,74 juta postingan dan komentar Hacker News, dan setiap item menyertakan vector embedding 384 dimensi yang dihasilkan oleh model SentenceTransformers all-MiniLM-L6-v2
- Embedding dibuat menggunakan model embedding lokal untuk menangkap makna kalimat dan paragraf
- Dataset ini dapat digunakan untuk merancang, memperkirakan skala, dan menganalisis performa aplikasi pencarian vektor skala besar berbasis data teks buatan pengguna
Detail dataset
- Seluruh data tersedia sebagai satu file Parquet yang disediakan oleh ClickHouse, dan dapat diunduh dari bucket S3 (
https://clickhouse-datasets.s3.amazonaws.com/hackernews-miniLM/…) - Pengguna disarankan merujuk ke panduan indeks ANN di dokumentasi ClickHouse untuk memperkirakan kebutuhan penyimpanan dan memori
Prosedur pemuatan data dan pembangunan indeks
- Tabel
hackernewsdibuat agar mencakup berbagai atribut seperti ID postingan, teks, vektor, penulis, waktu, skor, dan lain-lain - Pemuatan data dilakukan dengan perintah SQL berikut
INSERT INTO hackernews SELECT * FROM s3('https://clickhouse-datasets.s3.amazonaws.com/hackernews-miniLM/…');- Penyisipan sekitar 28,74 juta baris memerlukan waktu beberapa menit
- Indeks kemiripan vektor dibuat menggunakan algoritme HNSW dan 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;- Ditetapkan dengan
M=64,ef_construction=512, dan pembangunan indeks dapat memakan waktu dari beberapa menit hingga beberapa jam tergantung jumlah inti CPU dan bandwidth penyimpanan
- Ditetapkan dengan
- Setelah indeks selesai dibangun, kueri pencarian vektor akan otomatis memanfaatkan indeks tersebut
SELECT id, title, text FROM hackernews ORDER BY cosineDistance(vector, <search vector>) LIMIT 10- Pemuatan indeks ke memori dapat memerlukan waktu dari beberapa detik hingga beberapa menit
Contoh pencarian semantik berbasis Python
- Skrip Python membuat embedding untuk kueri masukan dengan SentenceTransformers, lalu menjalankan kueri melalui ClickHouse Connect
- Fungsi
cosineDistance()digunakan untuk menghitung kemiripan antara vektor input dan vektor dalam dataset - Dalam contoh eksekusi, kueri “Are OLAP cubes useful” menampilkan 20 postingan terkait teratas
- Hasil keluaran terdiri dari ID tiap postingan dan sebagian teksnya (100 karakter)
Aplikasi demo peringkasan
- Setelah contoh pencarian semantik dan pencarian dokumen menggunakan ClickHouse, diperkenalkan aplikasi peringkasan berbasis AI generatif
- Langkah utamanya
- Menerima topik dari pengguna
- Membuat embedding topik dengan
SentenceTransformers all-MiniLM-L6-v2 - Mengambil postingan/komentar terkait melalui pencarian kemiripan vektor di ClickHouse
- Merangkum hasil pencarian menggunakan
LangChaindan OpenAIgpt-3.5-turbo
- Dalam contoh eksekusi, pencarian dilakukan dengan topik “ClickHouse performance experiences”, lalu GPT-3.5 menghasilkan ringkasan
- Isi ringkasan menekankan performa, kesederhanaan, efisiensi, dan kecocokan untuk analitik skala besar dari ClickHouse, sambil juga menyebut beberapa kesulitan terkait DML dan backup
- Aplikasi ini dapat diperluas ke berbagai kasus penggunaan AI generatif di perusahaan seperti analisis sentimen pelanggan, otomatisasi dukungan teknis, peringkasan notulen rapat, dan analisis dokumen keuangan
Susunan kode aplikasi peringkasan
- Dalam kode Python digunakan
SentenceTransformer,clickhouse_connect,LangChain,ChatOpenAI, dan lain-lain - Hasil pencarian digabungkan lalu diberikan ke model GPT-3.5 untuk menghasilkan ringkasan maksimum 10 kalimat
- Bergantung pada jumlah token teks masukan, pemrosesan memilih rantai
stuffataumap_reduce - Hasil ditampilkan dalam format “Summary from chatgpt-3.5:”
1 komentar
Komentar Hacker News
Pada dataset embedding vektor yang baru, disarankan untuk tidak menggunakan all-MiniLM-L6-v2
Model ini dulu merupakan model praktis berbasis sentence-transformers yang sering dipakai di tutorial awal, tetapi sekarang sudah cukup tua dan tidak mencerminkan arsitektur serta pipeline pelatihan terbaru
Panjang konteksnya juga pendek, hanya 512. Sebagai gantinya, direkomendasikan EmbeddingGemma. Model ini mendukung jendela konteks 2k dan performa benchmark-nya sangat bagus
Memang lebih lambat, tetapi sepadan. Sebagai kompromi, bge-base-en-v1.5 atau nomic-embed-text-v1.5 juga cukup baik
Menyediakan open weights, dukungan multibahasa, dan konteks 32k
Ukurannya kecil, sekitar 70MB, jadi mudah diunduh. EmbeddingGemma lebih dari 300MB sehingga terasa membebani
Jadi saya penasaran apakah ada model yang layak dipakai di bawah 100MB
‘Lisensi Gemma’ terasa ambigu sehingga mungkin perlu tinjauan hukum
Jika Google mengubah daftar “penggunaan terbatas”, selalu ada risiko penggunaannya bisa dilarang sewaktu-waktu
Misalnya materi perbandingan seperti Cohere vs OpenAI small vs OpenAI large masih kurang
Saya juga tidak tahu sebaiknya benchmark dilakukan dengan kriteria apa
Di CPU juga berjalan dengan baik
Sejak 2023, semua komentar HN telah di-embedding di BigQuery dan di-host di hn.fiodorov.es
Kode sumbernya tersedia di GitHub
Saat mencari “Who’s Gary Marcus”, hasilnya lebih negatif dibanding Google
Saya jadi penasaran berapa biaya operasionalnya
Menurut Privacy and Data Policy HN, penggunaan komersial atas komentar dilarang
Representasi vektor secara teknis juga termasuk karya turunan
konten situs tidak boleh direproduksi, didistribusikan, dimodifikasi, atau dijadikan turunan untuk tujuan komersial
Selain itu, tindakan seperti data mining dan scraping juga dilarang
Saya merasa berhak membuat basis data vektor sebagai alat bantu eksternal untuk ingatan saya
Akan bagus kalau di HN ada menu klik kanan seperti “lihat kalimat serupa”
Mungkin juga bisa membantu mengetahui apakah usulan yang sama pernah muncul sebelumnya
Kita bisa melihat seberapa sering diskusi yang sama berulang di tulisan lain,
dan bahkan memeriksa lebih dulu reaksi masa lalu terhadap hal yang ingin saya tulis
Ini bisa menjadi semacam konsep semantic thread
Saya penasaran apakah ada makalah yang membandingkan pencarian vektor vs pencarian teks biasa
Saya masih ragu apakah pencarian vektor benar-benar sepadan dengan nilainya
Katanya gabungan post HN dan metadata embedding berukuran 55GB, dan saya penasaran apakah itu masuk akal kalau berupa file Parquet
Kalau satu-satunya tujuan komentar dipakai adalah untuk pelatihan model komersial, rasanya agak pahit
Saya merasa situasi seperti ini bisa memengaruhi keinginan saya untuk ikut berpartisipasi ke depan
Dulu rasanya seperti membantu orang asing, sekarang terasa seperti membantu orang yang tidak saya sukai
Mungkin di suatu tempat dalam model raksasa masa depan, kata-kata saya akan beresonansi sedikit
Saya berharap ada fitur penghapusan akun/komentar
Secara praktis sudah menjadi data permanen, dan suatu hari komentar saya mungkin akan tersisa seperti kebijaksanaan kuno
Saya mencoret satu item dari daftar tugas saya (berkat proyek ini)
Misalnya seorang teman bertanya… kalau saya menulis komentar di sini, apakah itu berarti komentar tersebut diubah menjadi vektor?