4 điểm bởi GN⁺ 2025-11-29 | 1 bình luận | Chia sẻ qua WhatsApp
  • Bộ dữ liệu Hacker News bao gồm 28,74 triệu bài viết và bình luận, trong đó mỗi văn bản được biểu diễn bằng vector embedding 384 chiều tạo bởi mô hình SentenceTransformers all-MiniLM-L6-v2
  • Dữ liệu được công bố dưới dạng một tệp Parquet duy nhất (bucket S3) do ClickHouse cung cấp, có thể dùng để thiết kế và đánh giá hiệu năng ứng dụng tìm kiếm vector quy mô lớn
  • Mã SQL mẫu giải thích từng bước quá trình tạo bảng, nạp dữ liệu, xây dựng chỉ mục tương đồng vector dựa trên HNSW và thực thi truy vấn tìm kiếm
  • Ví dụ Python dùng SentenceTransformers để tạo embedding truy vấn và thực hiện tìm kiếm ngữ nghĩa trong ClickHouse bằng hàm cosineDistance()
  • Ứng dụng demo tóm tắt tiếp theo sử dụng LangChain và OpenAI GPT-3.5-turbo để tóm tắt các bài viết đã truy xuất, đồng thời cho thấy khả năng mở rộng sang các trường hợp sử dụng AI tạo sinh trong doanh nghiệp

Tổng quan về bộ dữ liệu tìm kiếm vector Hacker News

  • Bộ dữ liệu bao gồm 28,74 triệu bài đăng và bình luận từ Hacker News, mỗi mục có chứa vector embedding 384 chiều được tạo bởi mô hình SentenceTransformers all-MiniLM-L6-v2
    • Embedding được tạo bằng mô hình embedding cục bộ nhằm nắm bắt ngữ nghĩa của câu và đoạn văn
  • Bộ dữ liệu này có thể được sử dụng để thiết kế, ước tính quy mô và phân tích hiệu năng cho các ứng dụng tìm kiếm vector quy mô lớn dựa trên dữ liệu văn bản do người dùng tạo ra

Chi tiết bộ dữ liệu

  • Toàn bộ dữ liệu được cung cấp dưới dạng một tệp Parquet duy nhất bởi ClickHouse, có thể tải từ bucket S3 (https://clickhouse-datasets.s3.amazonaws.com/hackernews-miniLM/…)
  • Người dùng được khuyến nghị tham khảo hướng dẫn chỉ mục ANN trong tài liệu ClickHouse để ước tính yêu cầu về lưu trữ và bộ nhớ

Quy trình nạp dữ liệu và xây dựng chỉ mục

  • Bảng hackernews được tạo để chứa nhiều thuộc tính như ID bài viết, văn bản, vector, tác giả, thời gian, điểm số, v.v.
  • Việc nạp dữ liệu được thực hiện bằng lệnh SQL sau
    INSERT INTO hackernews SELECT * FROM s3('https://clickhouse-datasets.s3.amazonaws.com/hackernews-miniLM/…');
    
    • Việc chèn khoảng 28,74 triệu hàng mất vài phút
  • Chỉ mục tương đồng vector được tạo bằng thuật toán HNSWcosineDistance
    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;
    
    • Thiết lập M=64, ef_construction=512; thời gian xây dựng chỉ mục có thể từ vài phút đến vài giờ tùy theo số lõi CPU và băng thông lưu trữ
  • Sau khi xây dựng chỉ mục, truy vấn tìm kiếm vector sẽ tự động sử dụng chỉ mục
    SELECT id, title, text
    FROM hackernews
    ORDER BY cosineDistance(vector, <search vector>)
    LIMIT 10
    
    • Việc nạp chỉ mục vào bộ nhớ có thể mất từ vài giây đến vài phút

Ví dụ tìm kiếm ngữ nghĩa bằng Python

  • Script Python tạo embedding cho truy vấn đầu vào bằng SentenceTransformers và thực thi truy vấn thông qua ClickHouse Connect
  • Hàm cosineDistance() được dùng để tính độ tương đồng giữa vector đầu vào và các vector trong bộ dữ liệu
  • Trong ví dụ chạy thử, truy vấn “Are OLAP cubes useful” trả về 20 bài viết liên quan nhất
    • Kết quả đầu ra gồm ID của từng bài viết và một phần văn bản (100 ký tự)

Ứng dụng demo tóm tắt

  • Sau ví dụ về tìm kiếm ngữ nghĩa và truy xuất tài liệu bằng ClickHouse, bài viết giới thiệu ứng dụng tóm tắt dựa trên AI tạo sinh
  • Các bước chính
    1. Nhận chủ đề từ người dùng
    2. Tạo embedding cho chủ đề bằng SentenceTransformers all-MiniLM-L6-v2
    3. Truy xuất các bài viết/bình luận liên quan bằng tìm kiếm tương đồng vector trong ClickHouse
    4. Dùng LangChain và OpenAI gpt-3.5-turbo để tóm tắt kết quả tìm được
  • Trong ví dụ chạy thử, hệ thống tìm kiếm với chủ đề “ClickHouse performance experiences” rồi tạo bản tóm tắt bằng GPT-3.5
    • Nội dung tóm tắt nhấn mạnh hiệu năng, sự đơn giản, hiệu quả và mức độ phù hợp cho phân tích quy mô lớn của ClickHouse, đồng thời cũng đề cập đến một số khó khăn với DML và sao lưu
  • Ứng dụng này có thể mở rộng sang nhiều trường hợp sử dụng AI tạo sinh trong doanh nghiệp như phân tích cảm xúc khách hàng, tự động hóa hỗ trợ kỹ thuật, tóm tắt biên bản họp, phân tích tài liệu tài chính

Cấu trúc mã của ứng dụng tóm tắt

  • Mã Python sử dụng SentenceTransformer, clickhouse_connect, LangChain, ChatOpenAI, v.v.
  • Các kết quả tìm kiếm được ghép lại và đưa vào mô hình GPT-3.5 để tạo bản tóm tắt tối đa 10 câu
  • Tùy theo số lượng token của văn bản đầu vào, hệ thống chọn chuỗi stuff hoặc map_reduce để xử lý
  • Kết quả được in ra theo định dạng “Summary from chatgpt-3.5:”

1 bình luận

 
GN⁺ 2025-11-29
Ý kiến trên Hacker News
  • Bộ dữ liệu vector embedding mới khuyến nghị không dùng all-MiniLM-L6-v2
    Mô hình này từng là một mô hình thực dụng dựa trên sentence-transformers được dùng nhiều trong các tutorial thời kỳ đầu, nhưng nay đã cũ và không phản ánh được kiến trúc và pipeline huấn luyện mới nhất
    Độ dài ngữ cảnh cũng ngắn, chỉ 512. Thay vào đó, họ khuyên dùng EmbeddingGemma. Nó hỗ trợ cửa sổ ngữ cảnh 2k và có hiệu năng benchmark rất tốt
    Tốc độ chậm hơn nhưng đáng giá. Một phương án dung hòa là bge-base-en-v1.5 hoặc nomic-embed-text-v1.5 cũng ổn

    • Dạo này tôi thích Qwen3-Embedding-0.6B hơn
      Nó có open weights, hỗ trợ đa ngôn ngữ và ngữ cảnh 32k
    • Dù vậy, ưu điểm của all-Mini vẫn là có thể chạy phía client
      Nó nhỏ, khoảng 70MB nên dễ tải xuống. EmbeddingGemma thì hơn 300MB nên khá nặng
      Không biết có mô hình nào dùng được mà dưới 100MB không
    • Vấn đề giấy phép của EmbeddingGemma khá đáng tiếc
      “Giấy phép Gemma” khá mơ hồ nên có thể sẽ cần rà soát pháp lý
      Nếu Google thay đổi danh sách “mục đích sử dụng bị hạn chế” thì có nguy cơ bị cấm dùng bất cứ lúc nào
    • Tôi muốn xem so sánh giữa các mô hình embedding thương mại
      Ví dụ như Cohere vs OpenAI small vs OpenAI large nhưng lại thiếu tài liệu so sánh
      Tôi cũng không rõ nên benchmark theo tiêu chí nào
    • Vài tuần trước tôi đã AB test EmbeddingGemma với nomic-embed-text-v1, và bên nomic cho kết quả tốt hơn hẳn
      Nó cũng chạy tốt trên CPU
  • Từ năm 2023, toàn bộ bình luận HN đã được embedding trong BigQuery và đang được host tại hn.fiodorov.es
    Mã nguồn được công khai trên GitHub

    • Tôi đã thử dùng trực tiếp và nó cho câu trả lời khá ổn
      Khi tìm “Who’s Gary Marcus”, kết quả hiện ra tiêu cực hơn Google
      Tôi tò mò không biết chi phí vận hành là bao nhiêu
    • Phần mô tả kiến trúc trong repo GitHub rất ấn tượng. Một dự án tuyệt vời
    • Tôi muốn biết đã dùng phần cứng nào để tạo embedding, và mất bao lâu
    • Tôi cũng muốn biết có chức năng gửi issue để người dùng yêu cầu xóa dữ liệu của mình hay không
  • Theo Privacy và Data Policy của HN, việc sử dụng bình luận vào mục đích thương mại là bị cấm
    Về mặt kỹ thuật, biểu diễn vector cũng là một tác phẩm phái sinh

    • Theo Điều khoản sử dụng của Y Combinator
      việc sao chép, phân phối, chỉnh sửa, tạo tác phẩm phái sinh từ nội dung trên site cho mục đích thương mại đều bị cấm
      Ngoài ra, các hành vi như data mining, scraping cũng bị cấm
    • Tất nhiên vector là tác phẩm phái sinh, nhưng ký ức của tôi cũng vậy
      Tôi nghĩ mình có quyền tạo một cơ sở dữ liệu vector như một thiết bị hỗ trợ bên ngoài cho trí nhớ của mình
    • Nói đùa thôi, tôi đang định yêu cầu xóa toàn bộ bình luận của mình. Giờ chắc không cần nữa
    • Vậy thì ai đó cũng nên báo cho OpenAI biết
  • Sẽ hay nếu HN có menu chuột phải kiểu “xem các câu tương tự”
    Có lẽ cũng sẽ biết được trước đây đã từng có đề xuất tương tự hay chưa

    • Nếu liên kết bình luận và thread theo ngữ nghĩa thì sẽ rất thú vị
      Ta có thể thấy cùng một cuộc thảo luận đã lặp lại bao nhiêu lần ở các bài khác nhau,
      hoặc kiểm tra trước phản ứng trong quá khứ với điều mình định viết
      Nó có thể trở thành một dạng semantic thread
    • Nếu dùng tính năng đó thì có lẽ sẽ thấy đầy những từ như “tangential, orthogonal, anecdata, enshittification, razor…”
    • Trước đây từng có người làm một công cụ nhận diện tài khoản phụ trên HN, và nó tìm ra gần như hoàn hảo chỉ bằng văn phong, khá đáng sợ
  • Tôi tự hỏi có bài báo nào so sánh tìm kiếm vector vs tìm kiếm văn bản thường không
    Tôi đang băn khoăn liệu tìm kiếm vector có thực sự đáng giá đến vậy không

    • Tìm kiếm thông thường thường được gọi là bm25. Trong đa số các bài báo về tìm kiếm, bm25 được dùng làm baseline
    • Tôi không biết bài cụ thể nào, nhưng tài khoản reachsumit.com trên Bluesky thường chia sẻ tài liệu về RAG và truy hồi thông tin
    • So sánh ở khía cạnh nào là điều quan trọng — tải máy chủ hay trải nghiệm người dùng, mỗi thứ sẽ cho câu trả lời khác nhau
  • Người ta nói bài đăng HN cộng với metadata embedding là 55GB, nếu là file Parquet thì không biết có hợp lý không

    • Chắc phần lớn là dữ liệu embedding. DB của tôi chứa toàn bộ bài đăng và bình luận HN, khoảng 17.68GB chưa nén và 5.67GB sau nén
    • Hiệu quả nén tốt đến mức đáng ngạc nhiên. Dùng nén Brotli thì hàng triệu trang cũng có thể giảm xuống còn 1~2GB
    • Nhìn vào bảng thì con số đó có vẻ đúng. Tôi cũng muốn embedding dữ liệu upvote của mình để phân tích sở thích
    • Nếu ở trạng thái nén thì đó là kích thước khá hợp lý
  • Nếu mục đích duy nhất là dùng bình luận để huấn luyện mô hình thương mại thì hơi chua chát
    Tôi nghĩ điều này có thể ảnh hưởng đến động lực tham gia của tôi sau này

    • Từ khi LLM xuất hiện, tôi bớt muốn viết những điều hữu ích lên internet
      Ngày trước cảm giác như đang giúp một người xa lạ, giờ lại giống như đang giúp một người mà tôi không thích
    • Ngược lại, tôi lại thấy thú vị khi nghĩ rằng những bình luận quái quái của mình sẽ để lại dấu vết trong không gian tiềm ẩn của LLM
      Biết đâu ở đâu đó trong một mô hình khổng lồ của tương lai, lời tôi nói vẫn còn vang lên rất khẽ
    • Không khí nghiêm trọng quá. Tôi chỉ muốn nói là cứ tận hưởng thôi
  • Giá mà có tính năng xóa tài khoản/bình luận

    • Những gì chúng ta viết đã bị sao chép lên vô số thiết bị trên khắp thế giới
      Trên thực tế nó đã thành dữ liệu vĩnh viễn, và biết đâu một ngày nào đó bình luận của tôi sẽ còn sót lại như trí tuệ cổ đại
    • Bộ dữ liệu HN đã bị sao chép ở nhiều nơi rồi, nên những gì viết ở đây nên được xem là nội dung công khai
  • Tôi đã gạch được một việc khỏi danh sách cần làm (nhờ dự án này)

  • Giả sử một người bạn hỏi… nếu bình luận ở đây thì nó sẽ được chuyển thành vector đúng không?