Trực quan hóa 13 triệu người dùng Bluesky
(joelgustafson.com)- Nhờ luồng sự kiện công khai, Bluesky có thể xây dựng bản đồ toàn bộ đồ thị xã hội ở quy mô 13 triệu người dùng, điều vốn khó thực hiện trên Twitter
- Pipeline thu thập chỉ lọc các sự kiện follow/unfollow từ WebSocket firehose của
bsky.networkrồi lưu vào SQLite; khi đó bảngfollowscó hơn 500 triệu hàng, dung lượng khoảng 30GB - Để bố trí 13 triệu node và 500 triệu edge, tác giả đã tạo Andromeda, một engine force-directed layout đa luồng viết bằng Zig, nhưng với đồ thị xã hội lớn, cách này bộc lộ hạn chế là làm nhòe cấu trúc cục bộ
- Kết hợp embedding GGVec với UMAP để thu được nhiều cấu trúc trung gian hơn; các điểm chồng lên nhau trong UMAP được tinh chỉnh bằng cách mô phỏng thêm vài tick trong Andromeda để làm gọn các cụm dày đặc
- Bản đồ cuối cùng hiển thị 7,7 triệu node sau khi lọc tính đến ngày 7/11/2024, cho phép khám phá các vòng bot, cụm theo quốc gia, và các cụm tài khoản truyền thông/chính sách có nhiều follower
Vì sao có thể lập bản đồ toàn bộ mạng Bluesky
- Twitter không cung cấp toàn bộ dữ liệu, việc scraping cũng khó và có thể bất hợp pháp, nên rất khó tạo bản đồ đầy đủ
- BlueSky cho phép lấy dữ liệu cần thiết, và đã tăng trưởng mạnh trong vài tháng của năm 2024
- Bối cảnh tăng trưởng gồm xung đột liên tục giữa Twitter với cơ sở người dùng, và việc Brazil chặn Twitter vào tháng 10/2024
- Kết quả có thể được khám phá dưới dạng bản đồ tương tác tại aurora.ndimensional.xyz
- Vì dùng WebGPU, cần Chrome/Chromium trên desktop
Cách thu thập đồ thị follow
- Thay vì toàn bộ hoạt động, tác giả chỉ dùng đồ thị follow để thu hẹp phạm vi công việc
- Mỗi follow được xem là một edge vô hướng
- Nếu hai bên follow lẫn nhau thì sẽ có hai edge, trên thực tế làm trọng số tăng gấp đôi
- BlueSky dựa trên AT Protocol và được thiết kế để người dùng có thể tự host PDS (personal data server) của mình
- Việc thu thập thực tế sử dụng WebSocket firehose của relay
bsky.networkdo đội ngũ BlueSky vận hành- Relay này tổng hợp sự kiện từ PDS chính
*.bsky.socialvà các PDS độc lập đã yêu cầu được index - Sự kiện của toàn bộ mạng được stream theo thời gian thực, hiện khoảng 500 sự kiện mỗi giây
- Trong số đó, chỉ lọc các sự kiện follow và unfollow rồi lưu vào cơ sở dữ liệu SQLite cục bộ
- Relay này tổng hợp sự kiện từ PDS chính
- Ban đầu tác giả triển khai indexer trên fly.io và dùng litestream để sao chép cơ sở dữ liệu theo thời gian thực lên AWS S3, nhưng do chi phí 40 USD/tháng nên đã chuyển sang chạy trên server tại nhà
- Sau đó vận hành trên desktop System76 ở nhà bằng cách kết hợp systemd service, logrotate, tmux monitor và TailScale
- Tại thời điểm viết, BlueSky đã vượt 13 triệu người dùng, bảng
followscó hơn 500 triệu hàng, và dung lượng đĩa khoảng 30GB
Nút thắt tính toán của đồ thị 13 triệu node
- Có nhiều phương pháp cho layout đồ thị, nhưng ở đây điểm xuất phát là force-directed layout, hoạt động như một mô phỏng vật lý
- Mọi node đều có lực đẩy lẫn nhau
- Edge tạo ra lực kéo giữa source và target
- Ở mỗi tick mô phỏng, tính hợp lực theo từng node rồi nhân theo tham số nhiệt độ để di chuyển node
- Nút thắt không nằm ở chính kích thước đồ thị mà ở độ phức tạp tính toán của n-body problem
- Thuật toán đơn giản cần
O(n^2) + O(e)cho mỗi tick - Ở quy mô hàng triệu node, ngay cả GPU cũng không thực tế
- Thuật toán đơn giản cần
- Nếu dùng tối ưu hóa Barnes-Hut như các engine force-directed thông thường, độ phức tạp giảm xuống
O(n log(n)) + O(e)- Đổi lại phải xấp xỉ hiệu ứng của các node ở xa
- Việc xây dựng và truy vấn quadtree có tính phân cấp, nên khó tính lực tác động lên node một cách dễ dàng trên GPU
- Để song song hóa, quadtree được chia thành 4 hoặc 16 phần, tái xây dựng song song ở đầu mỗi tick, và chia phạm vi node cho từng thread để tính lực
- Hợp lực của mỗi node là tổng lực từ từng quadtree và lực từ các edge đi vào, đi ra
- Có thể tận dụng gần như toàn bộ CPU khả dụng với rất ít overhead
Andromeda và giới hạn của phương pháp force-directed
- Tác giả tạo Andromeda, engine graph layout force-directed đa luồng viết bằng Zig, và xây dựng GUI bằng GTK4 cùng OpenGL
- Andromeda chịu ảnh hưởng lớn từ Gephi và bài báo ForceAtlas2
- Trong trực quan hóa đồ thị quy mô lớn, tính tương tác — quan sát đồ thị thay đổi và điều chỉnh động tham số mô phỏng — là rất quan trọng
- Khó có được kết quả tốt với các công cụ mù mờ và có vòng lặp lâu
- Andromeda cũng có một widget UI gọi là “natural slider”
- Đây là cơ chế nhằm giảm vấn đề khó biết trước khoảng giá trị phù hợp khi xử lý đồ thị mới, phiên bản engine mới hoặc tham số mới
- Khoảng giá trị được điều chỉnh động theo các lũy thừa của e
- Tác giả cho rằng lũy thừa của 2 thì quá nhỏ, còn lũy thừa của 10 thì quá lớn
- Khi áp dụng layout ForceAtlas2 cho snapshot 5 triệu người dùng BlueSky vào tháng 9/2024, có thể thấy khối lượng và mật độ của các cụm lớn, nhưng nhìn chung hình dạng bị vón cục khá rõ
- Phần lớn node nằm rải rác trong một vùng rộng, khó phân biệt xung quanh các siêu cụm
- Chỉ vài chục cộng đồng nhỏ, chủ yếu là cộng đồng theo quốc gia, được tách biệt rõ
- Khi công bố phiên bản 2 triệu tài khoản vào tháng 2/2024, góc nhìn toàn cục gây hứng thú nhưng góc nhìn cục bộ lại gây thất vọng
- Có trường hợp người dùng tìm thấy tài khoản của mình nhưng không nhận ra các tài khoản xung quanh
- Chỉ bằng cách bố trí trên mặt phẳng 2D thì khó nắm bắt đầy đủ cấu trúc kết nối của toàn bộ mạng
UMAP, màu sắc và bản đồ cuối cùng
- Graph layout cũng có thể được xem là giảm chiều, tức xử lý bài toán chiếu ma trận kề 13 triệu × 13 triệu lên mặt phẳng 2 chiều
- t-SNE và UMAP là các kỹ thuật giảm chiều phi tuyến mạnh cho trực quan hóa 2D
- Ma trận BlueSky quá lớn để đưa trực tiếp vào UMAP trên quy mô server tại nhà
- Thay vào đó, tác giả tạo embedding khoảng 32 chiều cho từng người dùng rồi đưa kết quả vào UMAP
- Tác giả chọn nodevectors, một công cụ embedding node mã nguồn mở, và thuật toán GGVec chưa công bố có vẻ cho hiệu năng song song tốt nhất trên đồ thị lớn
- Embedding cho snapshot 5 triệu node tháng 9/2024 được tạo trong 5 phút
- Ảnh UMAP đầu tiên được tạo thêm trong 10 phút
- Kết quả cho thấy nhiều cấu trúc trung gian hơn so với kết quả vón cục của Andromeda
- UMAP tạo ra một số cụm quá dày, dẫn đến vấn đề các điểm chồng lên nhau
- Với mục tiêu giảm chiều thuần túy là giữ các điểm giống nhau trong không gian gốc ở cùng vị trí trong không gian đích, đây là hành vi tự nhiên
- Nhưng nó không phù hợp với một bản đồ hiển thị ảnh hồ sơ của từng tài khoản khi zoom gần
- Bên trong, ở giai đoạn cuối UMAP cũng dùng force-directed layout trên đồ thị k-láng giềng gần nhất có trọng số
- Do giới hạn tính toán, UMAP dùng sampling nên không phải mọi node đều đẩy nhau, dù chỉ theo cách xấp xỉ như Barnes-Hut
- Tác giả cho rằng tham số
min_distkhông kiểm soát nhất quán khoảng cách giữa các điểm trên đồ thị quy mô lớn
- Vấn đề chồng lấn được giảm bớt bằng cách đưa đầu ra UMAP vào Andromeda, điều chỉnh phương trình lực đẩy và chạy thêm vài tick
- Ngay cả trong các cụm dày đặc, node được lấp đầy mà không chồng lên nhau như các lớp
- Ở phiên bản tiếp theo, tác giả muốn truy cập trọng số thô của đồ thị do UMAP tạo ra và trực tiếp kết hợp quadtree song song của Andromeda với các phương trình lực trong bài báo UMAP
- Thay vì áp dụng HDBScan lên kết quả UMAP, màu sắc được gán bằng cách thực hiện phân cụm k-means trong không gian embedding
- Mỗi cụm được gán một hue
- Mỗi điểm nội suy hue bằng ba tâm cụm gần nhất
- Cách này làm nổi bật cấu trúc cục bộ tốt hơn so với màu dựa trên PCA, và khi nhìn gần tạo cảm giác như kính màu loang lổ
- Hue là một float duy nhất từ 0 đến 1, được ánh xạ sang RGB bằng không gian màu hsluv
- Độ bão hòa của mọi node được giữ cố định
- Độ sáng được scale theo
log10số follower của người dùng, để các tài khoản lớn trông như những ngôi sao sáng, còn tài khoản ít follower thì mờ hơn - Cách render các tài khoản lớn với kích thước thật sự lớn hơn bị loại vì sẽ làm đồ thị lớn trở nên quá phức tạp
- Tính đến ngày 7/11/2024, bản đồ toàn mạng sau khi loại trừ các tài khoản follow hơn 50.000 người, và các tài khoản follow dưới 5 người đồng thời có dưới 5 follower, gồm 7,7 triệu node
- Các dải rõ rệt của những tài khoản truyền thông, chính sách và bình luận có nhiều follower được phân biệt với các nhóm liên quan ít nổi bật hơn ở nền
- Cụm Iceland cũng có thể được quan sát ở tầm xa, tầm gần và đến mức ảnh hồ sơ
- Các vòng bot cũng hiện ra rõ ràng
- Tính năng tiếp theo dự kiến là thêm một sidebar có thể thu gọn để hiển thị timeline bài đăng của các tài khoản đang thấy trên màn hình
- Mục tiêu là phát triển nó thành một loại công cụ khám phá xã hội và meme mới
1 bình luận
Ý kiến trên Hacker News
Feed BSKY có cảm giác như một không gian đã chết hoàn toàn. Tôi đã cố tham gia tích cực bằng cách đăng bài, trả lời, bấm thích, nhưng cảm giác chẳng có gì bén rễ cả
Đăng bài “cho chính mình” cũng có giới hạn, nên chẳng mấy chốc là mất hứng. Twitter thời đầu có bầu không khí ai cũng hào hứng muốn follow người mới; tôi nghĩ một mạng xã hội mới lẽ ra phải đầy những người muốn xây dựng các mối quan hệ mới chứ
Bluesky và atproto có vẻ được thiết kế với ý tưởng có thể hack được
Cộng đồng gần đây đã tạo một thư mục cho phép tìm kiếm “Starter Packs” của Bluesky. Starter Packs là tính năng công khai các nhóm người và feed mà người dùng có thể muốn follow, giúp người dùng mới nhanh chóng thiết lập trải nghiệm ban đầu
https://blueskydirectory.com/starter-packs/all
Dan Abramov hôm nay cũng đánh giá cao điều này, nói rằng “thật tuyệt khi những thứ như thế này có thể tồn tại trong hệ sinh thái. Hãy để hệ sinh thái tự nấu nướng” [1]
Sắc bén hơn, anh ấy còn nói: “Nhìn các dự án đủ kiểu bật ra trong hệ sinh thái atproto mới thấy các công ty mạng xã hội đã kìm nén commons của web công cộng đến mức nào khi đóng API lại. Cả một cảnh quan công cụ đã bị từ bỏ và bỏ hoang” [2]
[1] https://bsky.app/profile/danabra.mov/post/3lar3sdna222d
[2] https://bsky.app/profile/danabra.mov/post/3lar3xpuu4c2d
Tôi cho rằng một trong những sai lầm chí mạng của các công ty công nghệ là nhốt mọi thứ lại. Điều khiến máy tính và smartphone trở nên tuyệt vời là khả năng hack, là việc tạo ra môi trường và hệ sinh thái. Khóa lại chỉ làm mọi thứ chậm đi. Nếu không có app, không biết mất bao lâu đèn pin hay đồng hồ bấm giờ mới được đưa vào smartphone. Trước khi được tích hợp vào hệ điều hành, những tính năng này từng là app
Có vẻ Bluesky đã bùng nổ mạnh trong một số lĩnh vực vào tuần trước. Từ thứ Bảy, số follower của tôi đã tăng 5–6 lần
Tôi đã hoạt động ở đó ở mức nhất định trong suốt năm qua, vì các cuộc trò chuyện trên Twitter trong lĩnh vực năng lượng nơi tôi làm việc đã xuống cấp đến mức gần như vô dụng. Theo nhiều nghĩa thì nó rất công kích, và spam cũng nhiều đến vô lý. Ngược lại, Bluesky thoải mái hơn nhưng phản hồi không lớn; giờ thì không khí đang nóng lên. Hy vọng là làn sóng người dùng này là thật, và nhờ vậy tôi dùng nó tích cực hơn nhiều
Trong 3 tuần gần đây, Bluesky sôi động hơn hẳn, và giờ cảm giác giống X ở chỗ tôi không thể theo kịp toàn bộ feed nữa. Tôi rất kỳ vọng vì tin rằng cộng đồng lớn sẽ tạo ra nhiều góc nhìn đa dạng hơn. Tôi cũng đang tự vận hành một Bluesky labeler và trình thu thập Firehose, và đã thấy lưu lượng xử lý sự kiện tăng khoảng gấp đôi trong 3–4 tháng qua
Threads là một sự pha trộn nửa Twitter, nửa Instagram, mạnh về sáng tạo, du lịch và nội dung xã hội; còn Bluesky giống Twitter thời đầu, mạnh về tin tức, chính trị và khoa học. Dạo này tôi không chắc liệu có thể làm tất cả mọi thứ trong một app hay không. Nếu vậy thì X sẽ còn lại như một 4chan mới
Thỉnh thoảng tôi kiểm tra, nhưng thực tế gần như là 0/50
Đây là một phần của làn sóng người dùng chuyển sang Bluesky tuần trước. Đến giờ tôi thật sự rất thích, và hơi ngạc nhiên vì trước đây tôi từng thất vọng với Mastodon. Tôi đã dành nhiều thời gian trên Bluesky hơn Twitter rồi
Để giải thích cho những ai chưa biết Bluesky là gì: nó gần như là một bản sao của Twitter khoảng năm 2015, và UI cũng gần như giống hệt. Chỉ khác là không có kiếm tiền, quảng cáo hay growth hacking, nên các tính năng chính tồn tại vì người dùng. Một ví dụ tôi thích là ứng dụng di động đơn giản dựa trên Expo/React Native, cho phép mở liên kết bằng Safari thay vì trình duyệt trong app vô dụng
Thế giới lớn hơn rất nhiều so với nước Mỹ hay drama Internet phương Tây. Là người châu Âu, đọc mạng xã hội chính thống, kể cả BlueSky, khiến tôi muốn trợn mắt. Tôi không quan tâm đến chính trị, bản dạng giới hay hoạt động xã hội bàn phím. Không thể đưa món gì khác lên thực đơn sao? Thật sự gì cũng được. Đến mức tôi đang tự hỏi liệu mình có phải học tiếng Nga hay tiếng Trung để được tiếp xúc với điều mới mẻ, thay vì chính trị Mỹ hay chuyện đời tư ai bị hấp dẫn bởi giới nào. Ai quan tâm chứ
Nostr thì thú vị về mặt kỹ thuật, nhưng đáng tiếc là cuối cùng vẫn không thoát khỏi giai đoạn crypto bro
Khá tuyệt. BlueSky API được thiết kế tốt. Đồng nghiệp của tôi đã làm một dạng trực quan hóa như thế này dựa trên Firehose: https://bigmood.blue/
Nguồn: https://bsky.app/profile/even.westvang.com/post/3laob7tefxk2...
Khó mà nói quá lên được tôi thích thứ này đến mức nào. Kết quả cuối cùng không chỉ truyền tải thông tin theo nhiều chiều mà còn rất hấp dẫn về mặt thị giác
Cảm giác hạt sinh ra khi render số lượng node khổng lồ đặc biệt làm nó có cảm giác hay hơn. Đây là yếu tố không thường thấy trong các trực quan hóa đồ thị khác
Điểm hay nhất của Bluesky là có thể dùng tên miền làm tên người dùng. Tôi dùng @bradgessler.com ở đó, và nếu mọi người muốn “xác minh” tôi, họ sẽ thấy website của tôi, thứ có ý nghĩa hơn nhiều so với dấu tick xanh
Dù tôi bị chặn, bị cấm hay bị đuổi khỏi nền tảng, mọi người vẫn có thể nhìn vào tên miền của tôi, vào đó và kiểm tra chuyện gì đã xảy ra. Theo một nghĩa nào đó, đây là cấu trúc khiến kiểm duyệt lộ diện. Tôi nghĩ nó cũng tốt cho doanh nghiệp. Gọi doanh nghiệp bằng @example.com và nhận phản hồi sẽ ít mơ hồ hơn nhiều. Tôi cũng đã tạo một starter pack tập hợp các SaaS dựa trên Rails đang làm như vậy: https://go.bsky.app/JQyXa2u
Tôi thật sự thích những gì BlueSky đang làm, và hy vọng nó sẽ không bị xuống cấp về chất lượng. Ngay cả nếu điều đó xảy ra, hiện tại có vẻ là thời điểm Goldilocks với bầu không khí rất tốt. Tạo tài khoản và liên kết với tên miền của mình chỉ mất 5 phút, nên tôi rất khuyến nghị
https://joinmastodon.org/verification
Có đoạn viết: “Điều gì sẽ xảy ra nếu đưa ma trận BlueSky vào UMAP? Ít nhất là không thể làm trực tiếp. UMAP về mặt kỹ thuật có nhận ma trận thưa, nhưng quy mô này quá lớn đối với home server của tôi. Thay vào đó, có thể dùng kỹ thuật khác để rút embedding của mọi người dùng xuống một chiều trung gian cỡ 32, rồi đưa nó vào UMAP. Dễ thôi!”, và tôi tò mò chính xác thì embedding được suy ra như thế nào
Thấy câu “việc tạo và truy vấn cây tứ phân về bản chất là có tính phân cấp”, tôi vui vì nhận ra không chỉ mình bị nhầm lẫn với hierarchy
Đây là một công việc thú vị ở nhiều tầng. Không chơi chữ đâu. Có nhiều thứ đáng xem, từ khả năng sẵn có của dữ liệu Bluesky, xử lý dữ liệu, cho tới thuật toán trực quan hóa. Tuy vậy, hơi không rõ nên đặt kiểu trực quan hóa này ở đâu trong phổ khoa học dữ liệu. Đồ họa số truyền thống theo thời gian đã phát triển một ngữ pháp khá tinh vi, cho phép suy luận và diễn giải tương đối chính xác. Vì vậy nó được dùng nhiều để truyền tải thông tin thực tế trong bài báo khoa học, tài chính, v.v., và người ta thậm chí còn reverse-engineer biểu đồ để khôi phục dữ liệu
Với mạng và đồ thị, ngoài cảm nhận tổng quát về topology, kết nối và cụm, khá khó xác định thông tin được truyền tải là gì. Tôi không rõ liệu một ngữ pháp hữu ích cho các đồ thị quy mô lớn như thế này vẫn chưa được phát minh, hay bản chất của chúng vốn là vậy
Tôi muốn xem dữ liệu này thêm từ góc nhìn xử lý ngôn ngữ tự nhiên. Sẽ hay nếu có thể thấy, giống Google Trends, những chủ đề diễn ngôn nào xuất hiện định kỳ và điều gì tăng vọt trong một giai đoạn nhất định
Liệu có thể tóm tắt các nhà kinh tế đang thảo luận gì không? Tôi tò mò liệu có thể tìm những người không nằm trong mạng lưới của nhau nhưng đang nói về cùng một thứ không