Cung cấp 28 triệu bình luận Hacker News dưới dạng bộ dữ liệu tìm kiếm embedding vector
(clickhouse.com)- 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 HNSW và 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;- 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ữ
- Thiết lập
- 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
- Nhận chủ đề từ người dùng
- Tạo embedding cho chủ đề bằng
SentenceTransformers all-MiniLM-L6-v2 - 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
- Dùng
LangChainvà OpenAIgpt-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
stuffhoặcmap_reduceđể xử lý - Kết quả được in ra theo định dạng “Summary from chatgpt-3.5:”
1 bình luận
Ý 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
Nó có open weights, hỗ trợ đa ngôn ngữ và ngữ cảnh 32k
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
“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
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
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
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
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
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ô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
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
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
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
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
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
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
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ẽ
Giá mà có tính năng xóa tài khoản/bình luận
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
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?