2 điểm bởi GN⁺ 2024-05-10 | 1 bình luận | Chia sẻ qua WhatsApp
  • Tác giả thực hiện một dự án phân tích hơn 40 triệu bài viết và bình luận trên Hacker News bằng cách sử dụng text embedding
  • Mục tiêu chính của dự án là triển khai các tính năng tìm kiếm, gợi ý và phân tích được cải thiện
  • Để làm điều này, tác giả thu thập dữ liệu bằng Hacker News API và bổ sung ngữ cảnh thông qua việc crawl các trang web
  • Dựa trên dữ liệu đã thu thập, tác giả tạo text embedding và ánh xạ chúng vào không gian 2D bằng UMAP
  • Từ dữ liệu đã được ánh xạ, tác giả xây dựng bản đồ tương tác "Hacker News Universe"
  • Ngoài ra, tác giả còn triển khai các tính năng như tìm kiếm ngữ nghĩa, cộng đồng ảo tự động, phân tích mức độ phổ biến/cảm xúc bằng embedding
  • Để xử lý dữ liệu quy mô lớn, tác giả sử dụng cụm GPU và triển khai edge server nhằm cải thiện trải nghiệm người dùng

Thu thập dữ liệu Hacker News

  • Thu thập hơn 40 triệu dữ liệu bài viết và bình luận bằng Hacker News API
  • Do phản hồi API chậm, tác giả triển khai một dịch vụ dựa trên Node.js để xử lý song song
  • Điểm số bài viết không giảm xuống dưới -1, còn điểm số bình luận thì không thể kiểm tra qua API
  • Một số bài viết và bình luận có tiêu đề và nội dung rỗng (có lẽ đã bị điều chỉnh bởi quản trị viên)
  • Có trường hợp ID bình luận nhỏ hơn bình luận cha của nó (có lẽ do quản trị viên đã di chuyển cây bình luận)

Tạo text embedding

  • Chỉ dùng tiêu đề là chưa đủ để biểu diễn ngữ nghĩa của bài viết, nên tác giả bổ sung thêm ngữ cảnh bằng cách crawl trang web
  • Việc tạo text embedding cần GPU hiệu năng cao, và xử lý 40 triệu đầu vào có thể mất gần 1 năm
  • Tác giả dùng RunPod để dựng cụm GPU với chi phí thấp, đồng thời phát triển db-rpcqueued để cải thiện hiệu quả xử lý phân tán
  • Huy động 150 GPU để tạo embedding cho 40 triệu văn bản chỉ trong vài giờ

Bổ sung ngữ cảnh bằng cách crawl trang web

  • Chỉ với tiêu đề bài viết thì chất lượng embedding không tốt, nên tác giả crawl trang web được liên kết để lấy thêm ngữ cảnh
  • Crawler được viết bằng Rust và đạt hiệu năng nhanh gấp 10 lần so với phiên bản Node.js
  • Nhiều liên kết đã hỏng (link rot), nên tác giả dùng API của Internet Archive để khôi phục
  • Cuối cùng chỉ còn dưới 5% trong số 4 triệu trang là không thể lấy được

Tạo text embedding được cải thiện

  • Chuyển sang mô hình jina-embeddings-v2-small-en để dùng toàn bộ trang web làm đầu vào
  • Với các bài viết thiếu ngữ cảnh, tác giả bổ sung các bình luận hàng đầu
  • Với bình luận, đầu vào được tạo bằng cách tính đến cấu trúc phân cấp và bao gồm cả các bình luận tổ tiên

Giảm chiều bằng UMAP

  • Dùng UMAP để giảm chiều embedding 1024 chiều xuống không gian 2 chiều
  • Để giảm chiều cần có đồ thị PyNNDescent và embedding gốc
  • Xử lý một triệu đầu vào chiều cao mất khoảng 1 tiếng rưỡi trên CPU 96 lõi
  • Kết quả giảm chiều cho phép trực quan hóa sở thích và phân bố mức độ phổ biến

Độ tương đồng cosine

  • Khoảng cách cosine thường được dùng để tính độ tương đồng giữa các embedding
  • Khoảng cách cosine biểu thị chênh lệch góc giữa các vector và, khác với khoảng cách Euclid, không bị ảnh hưởng bởi độ lớn vector
  • Điều này phù hợp để tính độ tương đồng văn bản, vì ngay cả một cuộc thảo luận dài và sôi nổi cũng nên được ánh xạ gần nhau nếu chủ đề tương tự
  • Việc tính độ tương đồng cosine có thể được triển khai đơn giản bằng phép nhân ma trận

Xây dựng bản đồ Hacker News Universe

  • Dựa trên embedding, tác giả tạo một bản đồ Hacker News tương tác tương tự Google Map
  • Hỗ trợ các tính năng như điều chỉnh số điểm hiển thị khi phóng to/thu nhỏ, gắn nhãn cho một số điểm, và hiển thị thông tin chi tiết khi nhấp vào
  • Do không thể gửi hàng triệu điểm tới trình duyệt cùng lúc, tác giả triển khai tải dần bằng tiling và LOD
  • Mỗi tile chứa tối đa 1500 điểm và được giữ dưới 20KB, đồng thời đảm bảo tính đa dạng bằng cách cân nhắc mật độ theo từng khu vực
  • Web app được xây dựng bằng Canvas và WebWorker, còn các tính năng bản đồ được triển khai theo cách tương tự Google Map

Thêm hiệu ứng trực quan

  • Tác giả thêm các yếu tố như địa danh, ranh giới, địa hình như bản đồ thực để tăng cảm giác nhập vai và khả năng định hướng
  • Vẽ các đường đồng mức sáng tối theo mật độ điểm để thể hiện các khu vực được quan tâm nhiều trên HN
  • Dùng Gaussian blur để tạo đường đồng mức mượt, sau đó chuyển sang SVG để xuất dưới dạng ảnh vector không bị vỡ
  • Thêm các "thành phố" đại diện cho các chủ đề nổi bật để hỗ trợ điều hướng tới từng khu vực cụ thể

Thử nghiệm tính năng tìm kiếm

  • Tìm kiếm dựa trên embedding ngữ nghĩa cho kết quả liên quan hơn và đa dạng hơn so với tìm kiếm từ khóa
  • Hệ thống cũng hiểu tốt các truy vấn dạng câu hỏi và có thể tìm ra các chủ đề tương tự ngay cả khi không có từ trùng khớp chính xác
  • Nhờ chất lượng cao của các bài viết trên HN, kết quả tìm kiếm cũng hiển thị nhiều thông tin sâu sắc và hữu ích
  • Xếp hạng kết quả không chỉ dựa trên độ liên quan mà còn dùng điểm số bài viết và trọng số thời gian để cân nhắc độ tin cậy và tính mới

Tạo cộng đồng ảo tự động

  • Có thể tạo cộng đồng ảo bằng từ khóa để xem ngay một tập hợp bài viết phù hợp với mối quan tâm
  • Không chỉ bài viết mà cả các bình luận có thảo luận sôi nổi liên quan đến mối quan tâm đó cũng có thể được xem cùng
  • Cũng có thể xác định những người dùng có ảnh hưởng và hoạt động tích cực trong một chủ đề cụ thể
  • Việc dùng lọc hậu kỳ thay vì lọc trước có thể giảm đáng kể chi phí tính toán

Phân tích dữ liệu quy mô lớn

  • Dùng mô hình phân tích cảm xúc mã nguồn mở để phân loại cảm xúc tích cực/tiêu cực cho 30 triệu bình luận
  • Phân tích cảm xúc của một chủ đề theo chuỗi thời gian cho phép quan sát sự thay đổi theo các sự kiện chính
  • Cũng có thể so sánh mức độ phổ biến giữa các chủ đề bằng cách dùng độ tương đồng và điểm số
  • Để cải thiện tốc độ tính toán truy vấn, tác giả áp dụng phép toán ma trận dùng GPU và tăng mạnh tốc độ xử lý

Kế hoạch sắp tới

  • Hỗ trợ cập nhật dữ liệu theo thời gian thực
  • Phát triển hệ thống gợi ý dựa trên deep learning
  • Cải thiện chất lượng tìm kiếm bằng mô hình reranking
  • Tăng cường phân tích người dùng (độ tương đồng, chuyên môn, v.v.)
  • Tìm thêm ý tưởng cải tiến thông qua việc tiếp nhận ý kiến từ cộng đồng

Ý kiến của GN⁺

  • Dự án này là một ví dụ rất tốt cho thấy quy trình thu thập, làm sạch và phân tích dữ liệu quy mô lớn một cách hiệu quả. Đặc biệt, các kỹ thuật tối ưu hiệu năng như xử lý song song và tận dụng GPU rất ấn tượng.
  • Bản đồ Hacker News trực quan hóa độ tương đồng giữa các bài viết bằng cách kết hợp text embedding với UMAP là một sản phẩm cực kỳ sáng tạo và thú vị. Nó có vẻ sẽ rất hữu ích để người dùng khám phá các chủ đề quan tâm và phát hiện thông tin mới.
  • Các tính năng tìm kiếm ngữ nghĩa và tạo cộng đồng tự động là những ý tưởng đổi mới có thể nâng trải nghiệm sử dụng Hacker News lên một tầm cao mới. Hy vọng công nghệ tìm kiếm hiểu được ngữ cảnh và ý định, vượt ra ngoài việc đối sánh từ khóa đơn thuần, sẽ được phổ biến hơn tới người dùng phổ thông.
  • Việc xây dựng một pipeline xử lý dữ liệu thời gian thực quy mô lớn có lẽ sẽ là điểm then chốt. Cần xem xét kỹ các phương án giải quyết nút thắt hiệu năng như edge computing hay in-memory DB.
  • Với đặc tính dữ liệu HN có độ tin cậy cao, kết quả phân tích cảm xúc dường như cũng có giá trị sử dụng đáng kể. Tuy vậy, vẫn cần chú ý tới thiên lệch thuật toán và cũng đáng cân nhắc huấn luyện chuyên biệt theo miền.

1 bình luận

 
ggg213 2024-05-10

Có vẻ như đã thiếu tiêu đề.