4 poin oleh GN⁺ 2025-11-29 | 1 komentar | Bagikan ke WhatsApp
  • 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

Prosedur pemuatan data dan pembangunan indeks

  • Tabel hackernews dibuat 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
  • 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
    1. Menerima topik dari pengguna
    2. Membuat embedding topik dengan SentenceTransformers all-MiniLM-L6-v2
    3. Mengambil postingan/komentar terkait melalui pencarian kemiripan vektor di ClickHouse
    4. Merangkum hasil pencarian menggunakan LangChain dan OpenAI gpt-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 stuff atau map_reduce
  • Hasil ditampilkan dalam format “Summary from chatgpt-3.5:”

1 komentar

 
GN⁺ 2025-11-29
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

    • Belakangan ini saya lebih suka Qwen3-Embedding-0.6B
      Menyediakan open weights, dukungan multibahasa, dan konteks 32k
    • Meski begitu, kelebihan all-Mini tetap pada kemampuannya berjalan di sisi klien
      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
    • Masalah lisensi EmbeddingGemma cukup disayangkan
      ‘Lisensi Gemma’ terasa ambigu sehingga mungkin perlu tinjauan hukum
      Jika Google mengubah daftar “penggunaan terbatas”, selalu ada risiko penggunaannya bisa dilarang sewaktu-waktu
    • Saya penasaran dengan perbandingan antar model embedding komersial
      Misalnya materi perbandingan seperti Cohere vs OpenAI small vs OpenAI large masih kurang
      Saya juga tidak tahu sebaiknya benchmark dilakukan dengan kriteria apa
    • Beberapa minggu lalu saya melakukan uji AB pada EmbeddingGemma dan nomic-embed-text-v1, dan hasil dari nomic jauh lebih baik
      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

    • Saya sudah mencobanya sendiri dan jawabannya lumayan bagus
      Saat mencari “Who’s Gary Marcus”, hasilnya lebih negatif dibanding Google
      Saya jadi penasaran berapa biaya operasionalnya
    • Penjelasan arsitektur di repo GitHub-nya sangat mengesankan. Proyek yang keren
    • Saya ingin tahu dengan perangkat keras apa embedding-nya dibuat, dan berapa lama prosesnya
    • Saya juga ingin tahu apakah ada fitur pengajuan issue agar pengguna bisa meminta data mereka dihapus
  • Menurut Privacy and Data Policy HN, penggunaan komersial atas komentar dilarang
    Representasi vektor secara teknis juga termasuk karya turunan

    • Menurut Ketentuan Penggunaan Y Combinator
      konten situs tidak boleh direproduksi, didistribusikan, dimodifikasi, atau dijadikan turunan untuk tujuan komersial
      Selain itu, tindakan seperti data mining dan scraping juga dilarang
    • Tentu saja vektor adalah turunan, tetapi dalam ingatan saya, memori saya juga merupakan turunan
      Saya merasa berhak membuat basis data vektor sebagai alat bantu eksternal untuk ingatan saya
    • Ini cuma bercanda, tetapi saya memang sempat ingin meminta semua komentar saya dihapus. Sekarang sepertinya tidak perlu lagi
    • Kalau begitu, sebaiknya ada yang memberi tahu OpenAI juga
  • 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

    • Menghubungkan komentar dan thread berdasarkan makna akan sangat menarik
      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
    • Kalau fitur itu dipakai, mungkin akan muncul banyak kata seperti “tangential, orthogonal, anecdata, enshittification, razor…”
    • Dulu pernah ada seseorang yang membuat alat identifikasi akun alternatif di HN, dan itu hampir sempurna menemukan akun hanya dari gaya menulis, sampai terasa menyeramkan
  • Saya penasaran apakah ada makalah yang membandingkan pencarian vektor vs pencarian teks biasa
    Saya masih ragu apakah pencarian vektor benar-benar sepadan dengan nilainya

    • Pencarian biasa umumnya disebut bm25. Di kebanyakan makalah terkait pencarian, bm25 dipakai sebagai baseline
    • Saya tidak tahu makalah spesifiknya, tetapi akun reachsumit.com di Bluesky sering membahas materi terkait RAG dan information retrieval
    • Penting juga dibandingkan dari sisi apa — apakah beban server, pengalaman pengguna, dan sebagainya
  • Katanya gabungan post HN dan metadata embedding berukuran 55GB, dan saya penasaran apakah itu masuk akal kalau berupa file Parquet

    • Kemungkinan besar sebagian besar ukurannya adalah data embedding. Basis data saya berisi seluruh post dan komentar HN, dan ukurannya sekitar 17.68GB sebelum kompresi, lalu 5.67GB setelah kompresi
    • Efisiensi kompresinya sangat mengejutkan. Dengan kompresi Brotli, jutaan halaman bisa menyusut menjadi 1–2GB
    • Melihat tabelnya, angka itu tampaknya masuk akal. Saya juga ingin meng-embedding data upvote saya untuk menganalisis preferensi saya
    • Jika dalam keadaan terkompresi, ukurannya cukup masuk akal
  • 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

    • Sejak kemunculan LLM, keinginan saya untuk menulis hal-hal berguna di internet berkurang
      Dulu rasanya seperti membantu orang asing, sekarang terasa seperti membantu orang yang tidak saya sukai
    • Saya justru merasa lucu membayangkan komentar-komentar aneh saya meninggalkan jejak di ruang laten LLM
      Mungkin di suatu tempat dalam model raksasa masa depan, kata-kata saya akan beresonansi sedikit
    • Suasananya terlalu serius. Rasanya saya ingin bilang, santai saja dan nikmati
  • Saya berharap ada fitur penghapusan akun/komentar

    • Hal-hal yang kita tulis sudah disalin ke banyak sekali perangkat di seluruh dunia
      Secara praktis sudah menjadi data permanen, dan suatu hari komentar saya mungkin akan tersisa seperti kebijaksanaan kuno
    • Dataset HN sudah direplikasi di banyak tempat, jadi tulisan di sini sebaiknya dianggap sebagai konten publik
  • 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?