Bối cảnh và vấn đề nghiên cứu
Khóa luận tốt nghiệp của tác giả Nguyễn Thị Huỳnh Như, sinh viên ngành Hệ thống thông tin (Khoa Môi trường và Tài nguyên, Trường Đại học Nông Lâm Thành phố Hồ Chí Minh), tập trung giải quyết bài toán hỗ trợ người dùng tiếp cận nội dung giải trí phù hợp trong bối cảnh bùng nổ dữ liệu trực tuyến. Báo cáo trích dẫn số liệu từ tổ chức DataReportal (Kemp, 2023) cho biết tính đến tháng 1 năm 2023, thế giới đã ghi nhận 5,16 tỷ người dùng Internet. Lượng dữ liệu số hóa khổng lồ được tạo ra mỗi ngày dẫn đến tình trạng quá tải thông tin, khiến người dùng gặp nhiều khó khăn trong việc tự tìm kiếm và sàng lọc các sản phẩm phù hợp với nhu cầu cá nhân.
Trong bối cảnh đó, hệ thống đề xuất (Recommendation System) đóng vai trò là một dạng hệ thống hỗ trợ ra quyết định, phân tích hành vi và sở thích trong quá khứ để đưa ra gợi ý mang tính cá nhân hóa mà không đòi hỏi thao tác tìm kiếm phức tạp. Tác giả chỉ ra rằng các hệ thống đề xuất có nguồn gốc từ mạng thảo luận phân tán Usenet tại Đại học Duke vào cuối những năm 1970 (Smith, 2012). Đến nay, hiệu quả thực tiễn của công nghệ này đã được khẳng định thông qua nghiên cứu của McKinsey (Ian MacKenzie và cộng sự, 2013), cụ thể giúp tăng 40% lượt cài đặt ứng dụng trên Google Play, đóng góp 60% thời lượng xem trên YouTube, 35% doanh thu mua sắm trên Amazon và chiếm 75% lượt xem phim trên nền tảng Netflix. Song song đó, thị trường phim hoạt hình toàn cầu (anime/cartoons) đang thu hút hơn 100 triệu khán giả với thể loại và nội dung phong phú (Wise, 2023), đặt ra yêu cầu cấp thiết về các công cụ gợi ý phim chính xác nhằm nâng cao trải nghiệm người xem.
Khóa luận xác định rõ ràng mục tiêu nghiên cứu và các giới hạn phạm vi như sau:
- Mục tiêu chung: Xây dựng ứng dụng web tích hợp hệ thống đề xuất phim hoạt hình dựa trên nền tảng học máy.
- Mục tiêu cụ thể:
- Chuyển đổi và xử lý bộ dữ liệu thứ cấp MyAnimeList (nguồn Kaggle, tải lên năm 2020) thành thông tin có cấu trúc phục vụ mô hình học máy.
- Ứng dụng kỹ thuật lọc cộng tác (Collaborative Filtering) kết hợp thuật toán K láng giềng gần nhất (K-Nearest Neighbors - KNN) để xây dựng mô hình đề xuất phim hoạt hình.
- Thiết kế và phát triển giao diện ứng dụng web bằng ngôn ngữ lập trình Python, cho phép người dùng tra cứu và nhận kết quả đề xuất trực quan gồm tên và hình ảnh phim.
- Đối tượng nghiên cứu: Hệ thống đề xuất phim hoạt hình ứng dụng kỹ thuật học máy.
- Phạm vi thời gian: Đề tài được triển khai thực hiện từ tháng 03 năm 2024 đến tháng 07 năm 2024.
- Phạm vi không gian dữ liệu: Khai thác dữ liệu thứ cấp quy mô lớn từ nền tảng trực tuyến MyAnimeList được cộng đồng chia sẻ trên kho lưu trữ Kaggle.
Cơ sở lý thuyết và phương pháp
Khóa luận thiết lập nền tảng lý luận dựa trên các khái niệm chuẩn mực về trí tuệ nhân tạo (AI), học máy (Machine Learning) và các phân loại chuyên sâu của hệ thống đề xuất:
- Tổng quan trí tuệ nhân tạo và học máy: AI được định nghĩa theo Saleh (2019) và phân chia thành bốn cấp độ nhận thức theo Park Thaichon và cộng sự (2022), bao gồm: Máy phản ứng (Reactive Machines), Bộ nhớ hạn chế (Limited Memory), Lý thuyết tâm trí (Theory of Mind) và Tự nhận thức (Self-Awareness). Học máy (Alam, 2023) đóng vai trò là một nhánh của AI và khoa học dữ liệu, chia làm hai hướng chính là học có giám sát (Supervised Learning - huấn luyện dựa trên nhãn dữ liệu) và học không giám sát (Unsupervised Learning - tự động khám phá cấu trúc từ dữ liệu chưa gắn nhãn). Hệ thống đề xuất được định vị là một phân nhánh thực hành của học máy (Shetty, 2023; Apáthy, 2019).
- Phân loại hệ thống đề xuất: Tác giả hệ thống hóa các kỹ thuật đề xuất theo cấu trúc của Farhin Mansur và cộng sự (2017) cùng Burke (2000), phân biệt rõ các hướng tiếp cận:
- Lọc dựa trên nội dung (Content-based Filtering): Khai thác thuộc tính sản phẩm và hồ sơ người dùng.
- Lọc cộng tác (Collaborative Filtering - CF): Đưa ra đề xuất dựa trên sự tương đồng về hành vi hoặc xếp hạng giữa các người dùng. Phương pháp này gồm hai nhóm chính: Lọc dựa trên bộ nhớ (Memory-based, phân tách thành User-based và Item-based) và Lọc dựa trên mô hình (Model-based, sử dụng các kỹ thuật như phân cụm, khai phá luật kết hợp, mạng Bayes, mạng nơ-ron).
- Lọc lai (Hybrid Filtering): Kết hợp giữa lọc cộng tác và lọc nội dung để triệt tiêu nhược điểm đơn lẻ.
- Lọc dựa trên kiến thức (Knowledge-based): Khai thác tri thức chuyên gia và tài liệu phân tích (Mathias Uta và cộng sự).
- Khái niệm về phim hoạt hình và anime: Phim hoạt hình được định nghĩa dưới góc độ kỹ thuật hoạt họa và truyền tải chuyển động (Yatti, 2024), trong khi anime được tiếp cận theo nghĩa hẹp là phong cách hoạt hình đặc trưng có xuất xứ từ Nhật Bản (Aeschliman, 2024).
Phương pháp nghiên cứu thực tế của đề tài bao gồm phân tích dữ liệu khám phá (EDA), xây dựng bảng xoay chiều (pivot table) và ứng dụng thuật toán học máy cụ thể:
- Mô hình Lọc cộng tác (Collaborative Filtering): Dựa trên nguyên lý nhóm người dùng có cùng sở thích đối với các mục tương tự trong quá khứ sẽ có xu hướng đánh giá giống nhau trong tương lai (Debashis Das và cộng sự). Tác giả thiết lập ma trận tương quan người dùng - phim hoạt hình (thang điểm 1 đến 10).
- Kỹ thuật ma trận thưa (Sparse Matrix): Khi chuyển đổi dữ liệu đánh giá sang ma trận tương quan, các giá trị khuyết (NaN) được thay thế bằng giá trị 0 thông qua hàm
fillna(0). Để tránh việc thuật toán tiêu tốn tài nguyên tính toán trên các ô có giá trị bằng 0, tác giả áp dụng định dạng hàng thưa nén csr_matrix từ thư viện SciPy, chỉ lưu trữ các vị trí có giá trị đánh giá thực tế.
- Thuật toán K láng giềng gần nhất (KNN): Được xếp vào nhóm học lười (Lazy Learning) (Jiaye Li và cộng sự, 2021). Thuật toán không yêu cầu bước huấn luyện mô hình phức tạp mà lưu trữ toàn bộ dữ liệu, chỉ tính toán khoảng cách hình học khi có điểm truy vấn mới để tìm ra $k$ phần tử gần nhất. Thuật toán được khởi tạo bằng lớp
NearestNeighbors(algorithm='brute') của Scikit-learn để tính toán khoảng cách trong không gian nén.
- Nguồn dữ liệu: Bộ dữ liệu thứ cấp MyAnimeList do tác giả QUANG-VINH DO chia sẻ trên Kaggle vào năm 2020 với tổng dung lượng xấp xỉ 943 MB, bao gồm ba tệp tin định dạng
.csv và một tệp cơ sở dữ liệu mal_db.dump (PostgreSQL).
Thiết kế và triển khai
Hệ thống được thiết kế theo quy trình hai giai đoạn rõ ràng: xử lý dữ liệu - huấn luyện mô hình đề xuất và phát triển ứng dụng web tương tác.
[Người dùng truy vấn tên phim]
[Giao diện Web Streamlit]
[Ánh xạ vị trí trong bảng chỉ mục anime_pivot]
[Mô hình KNN (NearestNeighbors brute-force)]
(Tính khoảng cách vector trên ma trận thưa csr_matrix)
[Trích xuất 10 chỉ số láng giềng gần nhất (n_neighbors=11)]
[Truy xuất tên phim + URL hình ảnh từ animes.csv]
[Hiển thị kết quả trực quan trên giao diện Web-app]
1. Môi trường và công nghệ triển khai
Khóa luận sử dụng hệ sinh thái mã nguồn mở dựa trên ngôn ngữ Python với các công cụ chi tiết:
- Hệ điều hành và trình quản lý: Anaconda Navigator đóng vai trò quản lý môi trường ảo và gói cài đặt; Visual Studio Code dùng để phát triển, chạy ứng dụng web; Jupyter Notebook phục vụ việc thực thi các khối mã tiền xử lý dữ liệu và huấn luyện mô hình; Microsoft Excel 2019 dùng để rà soát thống kê sơ bộ các tệp dữ liệu bảng.
- Ngôn ngữ lập trình: Python phiên bản 3.12 (phát hành tháng 10 năm 2023).
- Các thư viện phần mềm cốt lõi:
numpy: Tính toán số học và thao tác với mảng đa chiều.
pandas: Xử lý cấu trúc dữ liệu bảng, thực hiện phân tích thống kê và biến đổi bảng xoay chiều (pivot_table).
scipy: Sử dụng cấu trúc scipy.sparse.csr_matrix để nén ma trận thưa.
scikit-learn (sklearn): Triển khai thuật toán tìm kiếm láng giềng gần nhất NearestNeighbors.
pickle (hoặc pickle5): Đóng gói và tuần tự hóa đối tượng mô hình dữ liệu.
streamlit: Xây dựng giao diện ứng dụng web tương tác trực tiếp từ tập lệnh Python.
2. Thiết kế logic đề xuất và kiểm thử
Nội dung chính theo từng chương
Chương 1: Mở đầu
Chương 1 làm rõ tính cấp thiết của đề tài xuất phát từ sự bùng nổ của 5,16 tỷ người dùng Internet trên toàn cầu cùng lượng dữ liệu khổng lồ phát sinh mỗi ngày, dẫn đến nhu cầu sàng lọc thông tin tự động. Tác giả giới thiệu khái quát lịch sử hình thành hệ thống đề xuất từ mạng Usenet cuối thập niên 1970 và dẫn chứng các chỉ số gia tăng tương tác thực tế từ khảo sát của McKinsey trên các nền tảng thương mại, giải trí trực tuyến. Chương này xác định rõ mục tiêu tổng quát, mục tiêu cụ thể, đối tượng nghiên cứu là hệ thống đề xuất phim hoạt hình và thời gian triển khai từ tháng 03/2024 đến tháng 07/2024.
Chương 2: Tổng quan tài liệu
Chương 2 trình bày khung lý thuyết nền tảng về trí tuệ nhân tạo (4 loại: Reactive Machines, Limited Memory, Theory of Mind, Self-Awareness), học máy (học có giám sát, học không giám sát) và bản chất của hệ thống đề xuất. Tác giả phân loại chi tiết các kỹ thuật đề xuất chính: Lọc dựa trên nội dung, Lọc cộng tác (chia thành Lọc dựa trên mô hình và Lọc dựa trên bộ nhớ), Lọc lai và Lọc dựa trên kiến thức. Cơ chế hoạt động của thuật toán Lọc cộng tác được minh họa qua ma trận tương quan người dùng - phim (thang điểm 1-10) cùng kỹ thuật nén ma trận thưa csr_matrix. Cơ chế thuật toán KNN được diễn giải cụ thể qua việc xác định tham số $k$ láng giềng và tính toán khoảng cách.
Chương này cũng tổng hợp, đối sánh 4 công trình nghiên cứu liên quan tiêu biểu trên thế giới:
| Tác giả & Năm công bố |
Phương pháp áp dụng |
Tập dữ liệu / Quy mô |
Ưu điểm & Hạn chế ghi nhận |
| Simbolon và cộng sự (2020) |
Lọc cộng tác (CF) cơ bản |
Dữ liệu xếp hạng người dùng anime |
Đơn giản, dễ triển khai; nhưng hiệu quả bị giới hạn do chỉ sử dụng xếp hạng đơn thuần. |
| Athira Ramasundaran và cộng sự (2023) |
Lọc cộng tác kết hợp phương pháp bình phương ít luân phiên (ALS) |
Kaggle: 73.516 người dùng, 12.294 anime |
Khai phá tốt lịch sử xem phim tương tự; tuy nhiên gặp khó khăn khi đối mặt với dữ liệu quá thưa thớt. |
| Jiyue Chen (2023) |
Kết hợp Lọc cộng tác, Lọc nội dung và phân tích khám phá dữ liệu (EDA) |
Dữ liệu phim hoạt hình trực tuyến |
Khả năng đề xuất đa dạng hơn; nhược điểm là tốn nhiều thời gian và tài nguyên tính toán để triển khai. |
| Shashidhar Reddy Javaji & Krutika Sarode (2023) |
Mạng nơ-ron đồ thị (GNN) kết hợp nhúng biến đổi câu (BERT embeddings) |
Tương tác người dùng và đặc trưng phim |
Nắm bắt tốt đặc trưng liên cấp và nội cấp, dự đoán chính xác; nhưng đòi hỏi kiến thức chuyên sâu và hạ tầng phức tạp. |
Chương 3: Dữ liệu và phương pháp nghiên cứu
Chương 3 đi sâu vào cấu trúc của bộ dữ liệu MyAnimeList (năm 2020) gồm 4 tệp dữ liệu: animes.csv (17.058 bản ghi, 10 cột thuộc tính), user.csv (302.674 bản ghi, 7 cột thuộc tính), user_watches.csv (68.235.827 lượt xếp hạng, 5 cột thuộc tính) và tệp kết xuất PostgreSQL mal_db.dump.
Chương này công bố chi tiết các kết quả phân tích thống kê khám phá:
- Đặc trưng tập phim: Thuộc tính
num_episodes của tệp animes.csv có giá trị nhỏ nhất là 1 tập, lớn nhất là 3.057 tập, giá trị trung bình đạt 12 tập, độ lệch chuẩn 48 tập; các bách phân vị lần lượt là Q1 = 1 tập, Q2 = 2 tập, Q3 = 12 tập.
- Đặc trưng điểm đánh giá và lượt xem: Thuộc tính
score trong user_watches.csv dao động từ 0 đến 10 điểm, điểm trung bình là 4,42, độ lệch chuẩn 3,94 (Q1 = 0, Q2 = 6, Q3 = 8). Cột num_watched_episodes có giá trị từ 0 đến 65.535 tập, trung bình đạt 14,53 tập, độ lệch chuẩn 395,81 tập (Q1 = 0, Q2 = 4, Q3 = 13).
- Phân bố hệ thống nhãn độ tuổi MPAA trên 17.058 phim: PG-13 (5.909 phim - chiếm tỷ lệ cao nhất), G - All Ages (5.658 phim), PG - Children (1.426 phim), Rx - Hentai (1.328 phim), R - 17+ (1.130 phim), R+ - Mild Nudity (978 phim) và nhóm không gắn nhãn (None) chiếm 629 phim.
- Phân bố giới tính trên 302.674 người dùng: Nhãn Nam (Male) chiếm 135.181 tài khoản; nhãn Nữ (Female) chiếm 81.374 tài khoản; Phi nhị nguyên giới (Non-Binary) chiếm 1.245 tài khoản; nhóm không khai báo thông tin chiếm 84.874 tài khoản.
- Quy trình phương pháp luận: Được chia thành hai giai đoạn rõ rệt (Giai đoạn 1: Thu thập, chuẩn bị dữ liệu, chọn mô hình, điều chỉnh thông số và đưa ra kết quả đề xuất; Giai đoạn 2: Thiết kế chức năng và giao diện web). Đồng thời, tác giả mô tả chi tiết các phần mềm, công cụ hỗ trợ như Anaconda Navigator, Python 3.12, Jupyter Notebook, Visual Studio Code, Excel 2019 cùng các thư viện chuyên dụng.
Chương 4: Kết quả và thảo luận
Chương 4 thể hiện kết quả tiền xử lý từ các bảng dữ liệu ban đầu. Tác giả xác định các chỉ số duy nhất và giá trị trung bình trên tệp user_watches.csv: số lượng xếp hạng thực tế là 68.235.827, số lượng mã phim duy nhất (anime_id) là 17.058, số lượng người dùng duy nhất (user_id) là 259.137, xếp hạng trung bình trên mỗi người dùng là 263,32 và xếp hạng trung bình trên mỗi bộ phim là 4.000,22.
Tác giả trình bày chi tiết việc tạo ma trận bảng xoay chiều anime_pivot (thể hiện kích thước mẫu là 12.322 hàng $\times$ 8.840 cột), xử lý các giá trị NaN thành 0 và nén không gian bằng cấu trúc csr_matrix. Tiếp theo, chương báo cáo mã lệnh khởi tạo hàm recommend_anime sử dụng NearestNeighbors(algorithm='brute') với $k=11$. Kết quả kiểm thử thực nghiệm trên tựa phim "Minami-ke" xác nhận mô hình trích xuất thành công 10 tác phẩm liên quan mật thiết. Về phần ứng dụng web, chương trình bày chi tiết giao diện Streamlit với thanh tìm kiếm tích hợp, cấu hình hiển thị và khả năng hiển thị đồng thời cả tiêu đề lẫn hình ảnh poster của 10 bộ phim gợi ý. Phần thảo luận khẳng định ứng dụng đã giải quyết được vấn đề tiếp cận thông tin, hỗ trợ người dùng ra quyết định xem phim nhanh chóng dựa trên hành vi cộng đồng mà không bị quá tải thông tin.
Chương 5: Kết luận và kiến nghị
Chương cuối tóm lược các kết quả thực tế đạt được về mô hình học máy và ứng dụng web. Tác giả nhấn mạnh ý nghĩa khoa học trong việc chứng minh khả năng khai phá dữ liệu giải trí quy mô lớn phục vụ hỗ trợ ra quyết định, đồng thời nêu rõ ý nghĩa thực tiễn đối với trải nghiệm của khán giả xem anime. Các kiến nghị mở rộng về bổ sung dữ liệu mới và thử nghiệm thêm các thuật toán khác (Lọc nội dung, Lọc lai, Lọc dựa trên kiến thức) cũng được đề xuất chi tiết.
Kết quả và đóng góp
1. Kết quả định lượng và kỹ thuật đạt được
Khóa luận đã hoàn thành toàn diện các mục tiêu đặt ra với những dữ kiện kỹ thuật và thống kê chính xác:
- Xử lý và chuẩn hóa dữ liệu lớn: Xử lý thành công tập dữ liệu dung lượng 943 MB với các chỉ số tổng hợp được ghi nhận trong bảng sau:
| Tệp dữ liệu |
Số lượng bản ghi (hàng) |
Số cột thuộc tính |
Các chỉ số thống kê tiêu biểu |
animes.csv |
17.058 |
10 |
Trung bình 12 tập/phim; Nhãn MPAA lớn nhất: PG-13 (5.909 phim), G (5.658 phim). |
user.csv |
302.674 |
7 |
Giới tính: Nam (135.181), Nữ (81.374), Non-Binary (1.245), Không gắn nhãn (84.874). |
user_watches.csv |
68.235.827 |
5 |
259.137 người dùng duy nhất, 17.058 phim duy nhất; Điểm TB: 4,42; Điểm TB/người dùng: 263,32. |
- Tối ưu hóa tính toán ma trận: Triển khai giải pháp nén ma trận thưa
csr_matrix từ bảng pivot_table, loại bỏ tải tính toán không cần thiết đối với hàng triệu giá trị khuyết (được gán bằng 0), tạo điều kiện cho thuật toán KNN thực hiện tìm kiếm láng giềng nhanh chóng trên bộ nhớ máy tính để bàn thông thường.
- Hoàn thiện hàm đề xuất: Xây dựng phương thức
recommend_anime trả về đúng 10 phim hoạt hình có khoảng cách vector gần nhất với từ khóa truy vấn đầu vào ($k=11$).
- Hiện thực hóa ứng dụng Web-app: Tích hợp thành công mô hình học máy vào ứng dụng web cục bộ thông qua thư viện Streamlit, cung cấp giao diện trực quan hỗ trợ tìm kiếm phim qua danh sách thả xuống hoặc nhập văn bản, xuất kết quả gợi ý kèm hình ảnh poster lấy trực tiếp từ đường dẫn web tĩnh.
2. Đóng góp của đề tài
Theo tác giả tự đánh giá trong phần thảo luận và kết luận, khóa luận có những đóng góp cụ thể:
- Về mặt khoa học: Cung cấp cơ sở thực nghiệm khẳng định tính khả thi của việc ứng dụng kỹ thuật học máy (Machine Learning) và Lọc cộng tác (Collaborative Filtering) trong khai phá dữ liệu giải trí quy mô lớn trên nền tảng Internet nhằm phục vụ quá trình hỗ trợ ra quyết định của người dùng.
- Về mặt thực tiễn và ứng dụng: Khác với một số nghiên cứu tiền nhiệm chỉ dừng lại ở bước kiểm nghiệm mô hình tính toán thuần túy trên tập dữ liệu tĩnh hoặc xuất kết quả dạng bảng chữ (text), đề tài đã hoàn thiện một sản phẩm ứng dụng web hoàn chỉnh, có khả năng phản hồi trực quan cả tên và hình ảnh phim, giúp người dùng tiết kiệm thời gian tìm kiếm và hạn chế quá tải thông tin khi lựa chọn phim hoạt hình.
Hạn chế và hướng nghiên cứu tiếp
Khóa luận trình bày các hạn chế và đề xuất các hướng mở cụ thể dựa trên phạm vi nghiên cứu thực tế:
- Hạn chế của đề tài:
- Mô hình chỉ khai thác thuộc tính xếp hạng đơn thuần: Phương pháp Lọc cộng tác áp dụng trong khóa luận mới chỉ dựa vào ma trận điểm số (
score) giữa người dùng và phim, chưa kết hợp được các trường thông tin ngữ cảnh quan trọng khác có sẵn trong bộ dữ liệu như tóm tắt nội dung phim (synopsis), phân loại độ tuổi MPAA, thể loại, thời lượng, hay các đặc trưng nhân khẩu học của người dùng (giới tính, địa điểm, độ tuổi).
- Tính cập nhật của dữ liệu: Bộ dữ liệu MyAnimeList được tải lên từ năm 2020, do đó chưa phản ánh được các bộ phim hoạt hình mới phát hành cũng như thị hiếu thay đổi của cộng đồng người xem từ sau thời điểm này.
- Hạn chế thuật toán KNN: Thuật toán KNN sử dụng phương pháp tính khoảng cách trực tiếp (brute-force) có thể gặp thách thức về độ trễ tính toán khi ma trận người dùng và phim tiếp tục gia tăng kích thước theo thời gian.
- Hướng phát triển tiếp theo:
- Về dữ liệu: Cần tiếp tục thu thập và cập nhật các tập dữ liệu mới nhất từ nền tảng
myanimelist.net.
- Về giải thuật: Tiến hành thử nghiệm, huấn luyện và đánh giá đối sánh thêm các mô hình đề xuất tiên tiến khác, bao gồm: Lọc dựa trên nội dung (Content-based Filtering), Lọc lai (Hybrid Filtering) và Lọc dựa trên kiến thức (Knowledge-based).
- Về tiêu chí đề xuất: Bổ sung thêm nhiều biến số đầu vào như phần tóm tắt mô tả phim, phân loại độ tuổi theo chuẩn MPAA, giới tính, khu vực địa lý, thời lượng phim và bình luận của người xem nhằm tăng tiêu chí gợi ý, nâng cao độ chính xác và cải thiện trải nghiệm cá nhân hóa.
Giá trị tham khảo
Báo cáo khóa luận là tài liệu tham khảo thực hành hữu ích cho các nhóm đối tượng cụ thể:
- Đối tượng tham khảo: Sinh viên chuyên ngành Hệ thống thông tin, Công nghệ thông tin, Khoa học dữ liệu hoặc các nhà phát triển phần mềm đang tìm kiếm tài liệu hướng dẫn xây dựng hệ thống đề xuất từ dữ liệu thực tế.
- Các nội dung đáng tham khảo nhất trong tài liệu:
- Kỹ thuật tiền xử lý dữ liệu lớn bằng Pandas và SciPy: Quy trình xoay chiều dữ liệu (
pivot_table) và phương pháp chuyển đổi ma trận thưa nén (csr_matrix) giải quyết bài toán bộ nhớ đối với tập dữ liệu hàng chục triệu dòng (được minh họa rõ nét tại Chương 3 và Phụ lục 1).
- Phương pháp liên kết mô hình học máy với giao diện Web bằng Streamlit: Cách thức đóng gói logic đề xuất của Scikit-learn và kết nối hiển thị kết quả truy vấn đa phương tiện (văn bản kết hợp hình ảnh) trên ứng dụng web cục bộ (Chương 4).
- Phương pháp phân tích khám phá dữ liệu (EDA): Cách trích xuất các thông số phân vị, trung bình, độ lệch chuẩn và phân bố phân loại trên các tập dữ liệu người dùng và tác phẩm điện ảnh (Chương 3).
Câu hỏi thường gặp
1. Bộ dữ liệu MyAnimeList được sử dụng trong khóa luận có quy mô và cấu trúc như thế nào?
Bộ dữ liệu có dung lượng khoảng 943 MB, do tài khoản QUANG-VINH DO đăng tải trên Kaggle vào năm 2020. Bộ dữ liệu chứa 4 tệp chính: tệp animes.csv gồm 17.058 phim hoạt hình (10 cột thuộc tính); tệp user.csv gồm 302.674 tài khoản người dùng (7 cột thuộc tính); tệp user_watches.csv gồm 68.235.827 dòng xếp hạng (5 cột thuộc tính); và một tệp kết xuất cơ sở dữ liệu PostgreSQL mal_db.dump chứa toàn bộ dữ liệu có ràng buộc khóa chính/khóa ngoại và chỉ mục.
2. Tại sao tác giả phải chuyển đổi ma trận xoay chiều anime_pivot sang định dạng csr_matrix?
Khi thực hiện xoay bảng dữ liệu đánh giá, các vị trí người dùng chưa xem hoặc chưa chấm điểm cho phim sẽ mang giá trị rỗng (NaN) và được gán bằng 0. Nếu để nguyên ma trận đặc, thuật toán KNN sẽ phải duyệt và tính toán khoảng cách trên toàn bộ các ô mang giá trị 0, gây lãng phí lớn về thời gian và bộ nhớ. Việc chuyển sang cấu trúc hàng thưa nén csr_matrix từ thư viện SciPy giúp hệ thống chỉ lưu trữ và xử lý các ô có giá trị thực, tự động bỏ qua các ô bằng 0, tối ưu hóa tốc độ tính toán.
3. Thuật toán KNN được thiết lập với các thông số nào và cơ chế trả về kết quả ra sao?
Thuật toán KNN được khởi tạo bằng lớp NearestNeighbors(algorithm='brute') của Scikit-learn. Trong hàm recommend_anime, tác giả thiết lập tham số $k$ cố định là n_neighbors=11. Khi người dùng nhập tên một bộ phim, mô hình tìm kiếm 11 láng giềng có khoảng cách vector gần nhất; phần tử đầu tiên chính là bộ phim được tìm kiếm, do đó hệ thống loại trừ phần tử này và trả về danh sách chính xác 10 bộ phim tương đồng nhất còn lại.
4. Kết quả thực nghiệm khi kiểm thử hàm đề xuất với từ khóa "Minami-ke" trả về những tác phẩm nào?
Khi truyền tham số "Minami-ke" vào hàm recommend_anime, mô hình trả về danh sách 10 phim hoạt hình gợi ý gồm: Minami-ke Okawari, Minami-ke Okaeri, Minami-ke Tadaima, Minami-ke Betsubara, Minami-ke Omatase, Minami-ke Natsuyasumi, Kannagi, Hyakko, Ichigo Mashimaro và Mitsudomoe.
5. Giao diện ứng dụng web được xây dựng bằng công cụ nào và có những chức năng gì?
Giao diện ứng dụng web được lập trình bằng thư viện Streamlit trên nền tảng Python 3.12, chạy trên môi trường cục bộ (localhost). Ứng dụng cung cấp thanh tìm kiếm hỗ trợ nhập văn bản hoặc chọn phim từ danh sách thả xuống (dropdown list). Sau khi nhấn Enter hoặc bấm nút "Show Recommendation", giao diện hiển thị tiêu đề và hình ảnh poster minh họa của 10 bộ phim được hệ thống gợi ý.
Kết luận
Khóa luận tốt nghiệp của tác giả Nguyễn Thị Huỳnh Như đã nghiên cứu và triển khai thành công mô hình học máy ứng dụng kỹ thuật Lọc cộng tác và thuật toán K láng giềng gần nhất (KNN) trên tập dữ liệu lớn MyAnimeList gồm hơn 68 triệu lượt đánh giá. Đề tài không chỉ hoàn thành việc tính toán đề xuất mà còn xây dựng thành công ứng dụng web tương tác bằng Python và Streamlit, cho phép gợi ý 10 tựa phim hoạt hình kèm hình ảnh trực quan dựa trên sở thích tương đồng của cộng đồng người xem. Kết quả đạt được mang giá trị ứng dụng thực tiễn trong việc giảm tải tình trạng quá tải thông tin, đồng thời cung cấp tài liệu tham khảo chi tiết về quy trình xử lý ma trận thưa và triển khai hệ thống đề xuất từ mã nguồn mở.