Gợi ý content-based và đồng xuất hiện
Hồ sơ món, vector đặc trưng, tương đồng nội dung, ma trận đồng xuất hiện và gợi ý không cá nhân hóa.
Trung bìnhThuật toán ~60 phút
Ôn lại trước khi học
Giới thiệu
Bài này học gợi ý theo nội dung món đã thích. Cách này giúp gợi phim mới mà không cần cộng đồng.
Kiến thức cần nhớ
Content-based là gì
- Mỗi món thành vector thể loại, tác giả, từ khóa TF-IDF.
- Mỗi người thành trung bình có trọng số món đã thích.
- Điểm gợi ý là độ giống giữa người và món chưa xem.
- Ví dụ đời thường: hay xem phim không gian thì gợi tiếp phim không gian.
Đồng xuất hiện
- Đếm hai món hay đi chung giỏ bao nhiêu lần.
- Cao thì gợi chéo, ai mua máy ảnh gợi thẻ nhớ.
- Không cần biết bạn là ai nên gọi là không cá nhân hóa.
- Ví dụ đời thường: top phổ biến và mua kèm trên trang chủ.
Mạnh yếu
- Mạnh: giải thích được, gợi được món mới toanh.
- Yếu: giam trong bong bóng, khó phát hiện sở thích mới.
- Cần metadata tốt, thiếu thể loại thì đói dữ liệu.
- Ví dụ đời thường: càng gợi giống quá khứ càng chán.
| Cách | Cần gì | Khi thắng |
|---|---|---|
| Content | Mô tả món | Món mới chưa ai xem |
| Đồng xuất hiện | Giỏ chung | Khách mới, trang chủ |
| Phổ biến | Đếm lượt | Món ai cũng thích |
Ví dụ
- Input: người chỉ xem hành động, hệ chỉ gợi hành động -> Output: mới mẻ thấp, chẩn đoán kén lọc.
- Câu này cho thấy bong bóng lọc giam người dùng.
- Input: món mới ra không ai xem -> Output: content vẫn gợi được nhờ mô tả.
- Câu này cho thấy lợi thế với món mới toanh.
💻 Bài tập
Ngôn ngữ: Python 3 với NumPy và pandas. Dùng TF-IDF ngày 57. Nộp vào day-058/. Dữ liệu: MovieLens 100K (công khai).
Bài 1: Gợi ý theo nội dung
| Hàm | Yêu cầu |
|---|---|
item_vectors(movies) | Vector nhị phân thể loại, ghép thêm TF-IDF của tên phim |
user_profile(user_id, ratings, item_vecs) | Trung bình có trọng số các phim đã chấm, trọng số = rating - mean_rating_của_user |
recommend(user_id, n=10) | Top n phim chưa xem có cosine cao nhất với hồ sơ |
explain(user_id, movie_id) | Trả 3 thể loại đóng góp nhiều nhất vào điểm |
User chỉ chấm cao phim Action -> 10 gợi ý đa số có thể loại Action
Phim mới chưa ai chấm -> vẫn xuất hiện được trong gợi ý nếu hợp nội dung
Bài 2: Đồng xuất hiện
- Dựng ma trận đồng xuất hiện:
C[i][j]là số người chấm ≥ 4 cho cả phimivàj. also_liked(movie_id, n): topnphim theoC[i][j] / sqrt(count[i] * count[j]).- In kết quả cho 3 phim nổi tiếng. So sánh với khi dùng
C[i][j]thô: phim phổ biến có lấn át không?
Bài 3: Đánh giá và bong bóng lọc (nâng cao)
- Chia rating theo thời gian: 80% cũ để train, 20% mới để test.
- Tính precision@10 và recall@10 (phim được chấm ≥ 4 trong test coi là liên quan).
- Tính độ đa dạng: trung bình khoảng cách thể loại giữa các cặp phim trong top 10. Tính độ mới lạ: tỉ lệ thể loại chưa từng xuất hiện trong lịch sử người dùng.
- So với baseline "top phim phổ biến nhất".
✅ Tiêu chí hoàn thành
- Test mẫu cho user Action pass.
-
explaintrả lý do đọc hiểu được. - Bảng precision@10, recall@10, đa dạng, mới lạ cho 2 phương pháp.
- Viết 3 câu về bong bóng lọc dựa trên số đo của mình.
❓ Câu hỏi ôn tập
- Hồ sơ người dùng xây từ đâu?
- Đồng xuất hiện đếm cái gì?
- Vì sao content giam vào bong bóng?
- Món mới toanh thì cách nào thắng?
🌕 Bạn đã hoàn thành ngày 58. Làm hết bài tập phía trên rồi sang ngày tiếp theo.