Xây dựng tính năng trending bài viết
Bối cảnh
Sau 2 năm kể từ khi ra mắt, số lượng bài viết trên Viblo đã đạt được những cột mốc nhất định. Trong đó bao gồm cả những bài viết từ những tác giả mới, và cả những bài viết được đầu tư vô cùng chỉn chu với những kiến thức được chia sẻ vô cùng bổ ích.
Chính vì vậy, nhằm mang lại cho các lập trình viên danh sách những bài viết nổi bật trong thời điểm hiện tại, đội ngũ phát triển của Viblo đã đưa ra đề xuất Trending cho những bài viết chất lượng, đề cập đến những xu hướng công nghệ mà mọi người quan tâm, nội dung được mọi người tìm kiếm nhiều trong quá trình làm việc hoặc nghiên cứu.
Vậy phải làm thế nào để tính toán và đánh giá bài viết hay? Tiêu chuẩn nào được xem là trending?... Từ những câu hỏi đó, các ý tưởng ban đầu cho tính năng này đã được hình thành.
Một bài viết hay phải căn cứ vào rất nhiều yếu tố như:
- Nội dung kiến thức.
- Cách diễn đạt.
- Trình bày.
- ....
Nhưng cái quan trọng nhất để đánh giá một bài viết chất lượng vẫn là người đọc. Một bài viết hay phải là bài viết thu hút được lượng lớn người đọc, và được đánh giá bằng chính người đọc. Nếu bài viết đó không hay thì các tiêu chí view
, upvote
, bookmark
sẽ không cao.
Tất nhiên, những tiêu chí trên chỉ là tương đối và được sử dụng như phương tiện để xây dựng logic tính điểm, chúng có thể không luôn đúng. Lượt view
có thể được tăng bằng việc xem lại nhiều lần - như việc cày view cho bài hát của idol vậy. upvote
hay bookmark
cũng có thể đạt được bằng cách huy động người quen.
Từ những yếu tố trên, Viblo Team đã dần xây dựng nên tính năng Trending trên Viblo.
Cơ chế hoạt động
Cách tính điểm
- Trong đó:
- P => Pageview tương ứng với 1 điểm/1 pageview (điều kiện: P >= 200).
- C => Comment tương ứng với 24 điểm/1 comment (điều kiện: tính trên các comment có từ 15 ký tự trở lên).
- U, B => Upvote, Bookmark tương ứng với 40 điểm/1upvote/bookmark
- (now - published_at)/2 => Số giờ kể từ thời điểm publish bài viết đến hiện tại /2 (làm tròn xuống lấy số nguyên). Có thể hiểu là cứ mỗi 2h trôi qua sẽ bị trừ đi 6 điểm.
Khi tổng điểm của các tiêu chí trên đạt score >= 700
điểm thì bài viết sẽ được gắn tag trending. Và bạn có thể thấy những bài viết ấy ở Tab Trending
Chu kỳ
Tất nhiên để tránh việc 1 bài viết lên trending mãi thì chúng tôi cũng đã đưa ra chu kỳ:
- Một bài viết tối đa được nằm trong tab trending là 2 tuần.
- Trong vòng 6 tháng sau khi hết trending thì sẽ không được lên lại.
Tại sao lại có chu kỳ như vậy? Vì trong thời gian đầu của tính năng, một số bài viết cũ được nằm trong top trending mãi do số điểm trending quá cao. Nên để tránh vấn đề đó, đồng thời ưu tiên những bài viết mới hợp xu hướng hơn, chúng tôi đã đưa ra một chu kỳ cố định cho thời gian trending của bài viết và tất nhiên khi kết thúc trending thì điểm sẽ trở lại 0.
Những lần cải thiện
1. Đưa ra cơ chế trừ điểm
Vì số điểm của các bài viết chỉ gia tăng chứ không giảm đi theo thời gian dẫn đến tab trending hoạt động không đúng với mục đích ban đầu nên cơ chế trừ điểm đã được thêm vào - mỗi 2 tiếng điểm trending của bài viết sẽ bị trừ 6 điểm.
Ngoài ra, cũng để tránh việc gian lận - như việc cày view bài hát của các idol - thì cơ chế này được đưa ra là một cách để kiểm soát điều đó.
Thời gian đầu, số điểm trừ được đưa ra là 8 điểm/2 tiếng nhưng sau đó chúng tôi nhận thấy số lượng bài viết chất lượng được lên trending không khả quan. Thống kê tại thời điểm ấy thì trung bình sẽ có 2 bài viết trending/1 tuần
, số lượng rất ít so với tưởng tượng.
Sau đó điểm trừ được hạ từ 8 điểm -> 6 điểm/2 tiếng
thì số lượng bài trending đã tăng lên như hiện tại 10 - 15 bài trending / 2 tuần
- vào thời gian sự kiện có thể đạt từ 15 - 30 bài viết trending.
2. Chu kỳ Trending
Như đã đề cập ở trên thì nguyên nhân có chu kỳ cho bài viết Trending là để những nội dung khác có cơ hội được giới thiệu tới mọi người. Thời gian 2 tuần trending cũng đã giúp người dùng biết tới nội dung đó và nâng cao khả năng tìm kiếm nội dung đó trên các công cụ tìm kiếm như Google.
Nếu mọi người thấy thời gian trên chưa hợp lý thì hãy feedback tới chúng tôi. Chúng tôi sẽ tiếp nhận ý kiến và đưa ra một thời gian hợp lý hơn cho thời gian Trending cũng như chu kỳ quay lại Trending của bài viết.
Kết luận
Chúng tôi mong rằng việc đưa ra tính năng sẽ mang đến cho người dùng những bài viết chất lượng. Trong thời gian tới, chúng tôi sẽ cố gắng cải thiện các vấn đề còn tồn tại và tiếp tục phát triển sản phẩm để đưa tới người dùng những nội dung có chất lượng nhất.
©️ Tác giả: Software Engineer Giang Nguyen
All Rights Reserved