Bối cảnh và vấn đề nghiên cứu
Trong bối cảnh công nghệ di động và các dịch vụ giải trí trực tuyến phát triển mạnh mẽ, nhu cầu tiếp cận và lựa chọn phim ảnh của người dùng trên điện thoại thông minh ngày càng gia tăng. Khóa luận tốt nghiệp "Phát triển ứng dụng di động gợi ý phim cho người dùng" do sinh viên Vũ Cao Nguyên (Trường Đại học Công nghệ Thông tin, Đại học Quốc gia TP. Hồ Chí Minh) thực hiện dưới sự hướng dẫn của ThS. Phạm Thế Sơn vào tháng 8 năm 2021, tập trung giải quyết bài toán hoàn thiện ứng dụng di động và nâng cấp hệ thống khuyến nghị nội dung phim.
Đề tài được phát triển dựa trên sự kế thừa trực tiếp từ khóa luận tốt nghiệp "Phát triển hệ khuyến nghị phim cho ứng dụng di động" (năm học 2019-2020) của hai tác giả Quách Phú Quốc và Nguyễn Tiến Đạt. Ở nghiên cứu tiền nhiệm, nhóm tác giả đã xây dựng mô hình phân rã giá trị số ít (Singular Value Decomposition - SVD) trên bộ dữ liệu MovieLens để gợi ý phim cho những người dùng đã có lịch sử xem và đánh giá. Tuy nhiên, đề tài trước mới chỉ giải quyết được bài toán gợi ý cho người dùng cũ, đồng thời ứng dụng di động và hệ thống API truyền nhận dữ liệu chưa hoàn thiện đầy đủ các chức năng tương tác cơ bản.
Từ thực tiễn đó, tác giả xác định 4 nhiệm vụ nghiên cứu cụ thể:
- Tìm hiểu ngôn ngữ và Framework để xây dựng giao diện ứng dụng di động đa nền tảng (Flutter Framework).
- Khảo sát giao diện và chức năng của các ứng dụng xem phim hiện có trên các kho ứng dụng CH Play và Apple Store (iTunes Store, IMDb, Galaxy Play).
- Tìm hiểu và xây dựng hệ thống Web API Server bằng Django REST Framework kết nối hệ quản trị cơ sở dữ liệu PostgreSQL để truyền, nhận, lưu trữ và phản hồi dữ liệu cho ứng dụng di động.
- Xây dựng hoàn chỉnh ứng dụng gợi ý phim chạy trên máy ảo và thiết bị thật hệ điều hành Android, tích hợp cơ chế gợi ý cho người dùng cũ lẫn giải quyết bài toán khởi đầu lạnh cho người dùng mới đăng ký.
Đối tượng nghiên cứu của khóa luận là ứng dụng di động gợi ý phim, các phương pháp xây dựng mô hình gợi ý cho người dùng mới, hệ thống Web API và kiến trúc cơ sở dữ liệu quan hệ phục vụ truyền thông tin. Phạm vi nghiên cứu giới hạn ở việc triển khai ứng dụng trên hệ điều hành Android (chạy thử nghiệm trên máy ảo và thiết bị thật), sử dụng mô hình SVD kế thừa cho tập dữ liệu MovieLens, xây dựng logic gợi ý cho người dùng mới dựa trên thể loại yêu thích/độ phổ biến/phim mới, và cung cấp tính năng xem trailer/tóm tắt phim (không bao gồm phát toàn bộ nội dung phim do giới hạn nguồn dữ liệu).
Cơ sở lý thuyết và phương pháp
Khung lý thuyết và công nghệ sử dụng
Tác giả đã tổng hợp và đánh giá các cơ sở lý thuyết, mô hình và công nghệ phục vụ cho việc phát triển hệ thống:
- Mô hình gợi ý phim: Kế thừa thuật toán phân rã giá trị số ít (Singular Value Decomposition - SVD) được áp dụng trên tập dữ liệu MovieLens từ khóa luận của Quách Phú Quốc và Nguyễn Tiến Đạt.
- Công nghệ phát triển ứng dụng di động: Khảo sát 3 phương pháp xây dựng ứng dụng di động:
- Native Code: Lập trình bằng ngôn ngữ gốc (Swift, Objective-C cho iOS; Java, Kotlin cho Android) với ưu điểm hiệu năng cao, ít lỗi, truy cập đầy đủ phần cứng nhưng nhược điểm là chi phí cao và phải phát triển hai mã nguồn độc lập.
- Cross-Platform: Sử dụng một mã nguồn duy nhất biên dịch sang nhiều nền tảng (Flutter, React Native, Xamarin, Ionic) giúp tối ưu thời gian, công sức và chi phí phát triển. Tác giả lựa chọn Flutter Framework.
- Hybrid: Kết hợp HTML, CSS và JavaScript; tuy tiết kiệm chi phí nhưng độ mượt và trải nghiệm người dùng không cao.
- Công nghệ xây dựng Web API: Khảo sát các framework phổ biến (Nodejs, Go, Flask, Django, Spring Boot, FastAPI, Laravel, Phoenix, ASP.NET Core, Ruby on Rails). Tác giả lựa chọn Django và Django REST Framework (ngôn ngữ Python, kiến trúc MVC/MVT) nhờ khả năng xây dựng nhanh, tích hợp sẵn các gói bảo mật (chống SQL injection, Cross-site scripting), hỗ trợ Serialization chuyển đổi model thành JSON object và hỗ trợ các giao thức xác thực OAuth1a, OAuth2.
- Quy trình phát triển phần mềm: Tìm hiểu và so sánh 3 mô hình quy trình:
- Mô hình thác nước (Waterfall model): Tiến trình tuần tự gồm 5 giai đoạn (Requirements, Design, Implementation, Verification, Maintenance); dễ hiểu, dễ nắm bắt nhưng khó sửa lỗi khi thay đổi yêu cầu ở giai đoạn trước.
- Mô hình tạo bản mẫu (Prototyping model): Xây dựng bản mẫu thử nghiệm để người dùng đánh giá và điều chỉnh lặp lại; giúp xác định nhanh yêu cầu nhưng có nguy cơ thiếu tài liệu hoàn chỉnh.
- Mô hình xoắn ốc (Spiral model): Kết hợp giữa mô hình thác nước và các vòng lặp đánh giá rủi ro; phù hợp cho dự án lớn nhưng tốn kém thời gian và chi phí.
- Hệ quản trị cơ sở dữ liệu: Hệ quản trị cơ sở dữ liệu quan hệ PostgreSQL.
Phương pháp nghiên cứu và nguồn dữ liệu
- Phương pháp khảo sát ứng dụng thực tế: Tác giả tiến hành cài đặt, trải nghiệm và phân tích giao diện, chức năng của 3 ứng dụng phim:
- iTunes Store (Apple Inc., phát hành 28/04/2003): Giao diện nền đen chữ trắng, nút nhấn màu xanh da trời, thanh điều hướng đáy màn hình gồm 5 nút, chức năng mua/thuê phim, xem trailer, đánh giá.
- IMDb (Internet Movie Database): Giao diện hỗ trợ 2 chế độ sáng/tối, nút điều hướng màu vàng ở cuối màn hình, chức năng xem thông tin đạo diễn, diễn viên, điểm đánh giá trung bình, tìm kiếm.
- Galaxy Play (tiền thân là Film+, ra đời 2015): Giao diện nền đen chữ xám, nút nhấn màu trắng, cung cấp phim độc quyền Việt Nam, tải về thiết bị, thêm vào danh sách yêu thích.
- Phương pháp phân tích - tổng hợp và thiết kế: Xây dựng biểu đồ ca sử dụng (Use Case Diagram), mô hình quan hệ thực thể (ERD), lược đồ cơ sở dữ liệu và sơ đồ kiến trúc phân lớp hệ thống.
- Nguồn dữ liệu nghiên cứu: Tập dữ liệu chuẩn MovieLens kết hợp cùng dữ liệu phim, tài khoản người dùng, bảng xếp hạng, đánh giá và bình luận được tổ chức trong cơ sở dữ liệu PostgreSQL.
Thiết kế và triển khai
Khóa luận là công trình thuộc loại xây dựng phần mềm và hệ thống kỹ thuật. Tác giả đã thiết kế toàn diện từ kiến trúc, cơ sở dữ liệu đến giao diện và các ca sử dụng.
Kiến trúc hệ thống
Hệ thống được thiết kế theo mô hình phân tầng Client - Server:
- Client (Mobile Application): Ứng dụng di động xây dựng bằng Flutter SDK, chạy trên hệ điều hành Android, đảm nhận việc hiển thị giao diện người dùng, tiếp nhận thao tác, điều hướng màn hình và gửi/nhận dữ liệu dưới dạng JSON thông qua HTTP/RESTful calls.
- Server (Web API): Project
movielens_api xây dựng bằng Django REST Framework (Python), quản lý logic ứng dụng, xử lý xác thực tài khoản, thực hiện serialization dữ liệu và điều phối các truy vấn cơ sở dữ liệu.
- Database: Hệ quản trị cơ sở dữ liệu quan hệ PostgreSQL lưu trữ tập trung dữ liệu người dùng, thông tin phim, đánh giá, bình luận và danh sách phim gợi ý.
+-------------------------------------------------------------+
| Mobile Application (Flutter / Android) |
| - Đăng ký, Đăng nhập, Trang chủ, Xem chi tiết, Tìm kiếm |
| - Đánh giá (1-5 sao), Bình luận, Xem trailer (Coming soon)|
+-------------------------------------------------------------+
|
REST API (HTTP / JSON)
|
+-------------------------------------------------------------+
| Web API Server (Django REST Framework) |
| - Serialization / Deserialization |
| - Xử lý nghiệp vụ người dùng cũ (SVD) & người dùng mới |
| - Xác thực tài khoản, kiểm tra form, điều phối dữ liệu |
+-------------------------------------------------------------+
|
SQL Queries
|
+-------------------------------------------------------------+
| Database Management System (PostgreSQL) |
| - Tables: customer, movie, ratings, comment, |
| recommended_movies |
+-------------------------------------------------------------+
Thiết kế cơ sở dữ liệu quan hệ
Cơ sở dữ liệu của hệ thống gồm 5 bảng chính với các ràng buộc và kiểu dữ liệu cụ thể:
| STT |
Tên bảng |
Khóa chính (PK) |
Khóa ngoại (FK) |
Các trường dữ liệu chính |
Mô tả chức năng |
| 1 |
customer |
user_id (Integer) |
Không |
user_name (Text), password (Text), name (Text), email (Text), adress (Text), birthday (Date), gender (Text), favorite_genres (Text, allow null) |
Lưu trữ thông tin cá nhân và tài khoản đăng nhập của người dùng. |
| 2 |
movie |
movie_id (Integer) |
Không |
title (Text), overview (Text), genres (Text), runtime (Integer), release_date (Text), vote_average (Real), vote_count (Integer), actor (Text), director (Text), popularity (Real), budget (Integer), revenue (Bigint), poster_path (Text), backdrop_path (Text), homepage (Text), original_language (Text), tagline (Text), belongs_to_collection (Text), production_companies (Text) |
Lưu trữ toàn bộ thông tin chi tiết, chỉ số đánh giá và dữ liệu truyền thông của từng bộ phim. |
| 3 |
ratings |
Cặp (user_id, movie_id) |
user_id $\rightarrow$ customer, movie_id $\rightarrow$ movie |
rating (Real), time_rating (Bigint) |
Lưu trữ điểm đánh giá của người dùng cho từng bộ phim; mỗi người chỉ có 1 đánh giá/phim (có thể cập nhật). |
| 4 |
comment |
id (Integer) |
user_id $\rightarrow$ customer, movie_id $\rightarrow$ movie |
content (Text), time_rating (Date) |
Lưu trữ các bình luận và phản hồi văn bản của người dùng đối với các bộ phim. |
| 5 |
recommended_movies |
user_id (Integer) |
user_id $\rightarrow$ customer |
recommendations (Text) |
Lưu trữ danh sách các movie_id được mô hình SVD tính toán sẵn để gợi ý cho người dùng cũ. |
Phân tích ca sử dụng (Use Case) và cơ chế gợi ý phim
Tác giả đã phân tích và thiết lập các ca sử dụng chính trong ứng dụng cùng các điều kiện ràng buộc dữ liệu:
- Đăng nhập: Yêu cầu tên đăng nhập và mật khẩu (độ dài mật khẩu bắt buộc $> 3$ ký tự); chuyển đến trang chủ nếu hợp lệ, thông báo lỗi nếu không thành công.
- Đăng ký tài khoản: Kiểm tra biểu mẫu với mật khẩu $> 3$ ký tự, email bắt buộc chứa ký tự
@; kiểm tra trùng lặp user_name và email trên cơ sở dữ liệu customer.
- Tìm kiếm phim: Nhận từ khóa tìm kiếm; ràng buộc độ dài từ khóa phải lớn hơn 2 ký tự (nếu $\le 2$ ký tự hệ thống từ chối tìm kiếm và gửi thông báo lỗi).
- Đánh giá phim: Cho phép chọn số sao từ 1 đến 5 sao; tự động cập nhật lại đánh giá nếu người dùng đã từng đánh giá bộ phim đó.
- Bình luận: Hỗ trợ nhập văn bản và biểu tượng cảm xúc (icon); hiển thị danh sách bình luận theo chiều dọc kèm tên người dùng và thời gian.
- Xem trailer: Phát video trailer qua đường dẫn URL; trường hợp đường dẫn lỗi hoặc chưa có, hệ thống hiển thị hình ảnh thông báo "Coming soon".
- Cơ chế gợi ý phân loại theo 3 đối tượng người dùng:
- Người dùng cũ: Hệ thống đối soát
user_id trong cơ sở dữ liệu, truy xuất danh sách movie_id tương ứng từ bảng recommended_movies (kết quả tính toán của mô hình SVD).
- Người dùng mới có chọn thể loại yêu thích: Khi đăng nhập, hệ thống lọc và đề xuất các bộ phim thuộc thể loại người dùng đã tích chọn khi đăng ký, đồng thời các bộ phim đó phải có điểm đánh giá cao trên bảng xếp hạng.
- Người dùng mới không chọn thể loại yêu thích: Hệ thống hiển thị danh mục các bộ phim mới phát hành kết hợp các phim gợi ý ngẫu nhiên; khi người dùng chọn xem chi tiết một bộ phim bất kỳ, hệ thống tự động gợi ý danh sách các bộ phim có cùng thể loại với bộ phim đang xem.
Nội dung chính theo từng chương
Chương 1. Tổng quan
Chương mở đầu trình bày lý do chọn đề tài, bối cảnh kế thừa từ nghiên cứu năm học 2019-2020 của Quách Phú Quốc và Nguyễn Tiến Đạt, xác định đối tượng nghiên cứu (ứng dụng di động, phương pháp gợi ý cho người dùng mới), phạm vi triển khai (hệ điều hành Android, máy ảo và thiết bị thật, tập dữ liệu MovieLens), phương pháp thực hiện (Flutter, Django REST Framework, PostgreSQL), các đóng góp chính và bố cục 7 chương của khóa luận.
Chương 2. Khảo sát
Chương 2 tập trung khảo sát thực tiễn và cơ sở công nghệ:
- Khảo sát chi tiết giao diện, bảng màu, thanh điều hướng và tính năng của 3 ứng dụng: iTunes Store (Apple), IMDb và Galaxy Play; rút ra nguyên tắc thiết kế giao diện nền tối chữ sáng để tối ưu trải nghiệm xem phim trong không gian tối.
- So sánh 3 cách tiếp cận lập trình di động: Native Code, Cross-Platform và Hybrid; phân tích ưu nhược điểm và lựa chọn Flutter.
- Đánh giá các framework Web API (Nodejs, Go, Flask, Django, Spring Boot, FastAPI, Laravel, ASP.NET Core...) và làm rõ lý do chọn Django / Django REST Framework (bảo mật, ORM, JSON serialization).
- Phân tích 3 quy trình phát triển phần mềm: Mô hình thác nước, mô hình tạo bản mẫu và mô hình xoắn ốc.
Chương 3. Phân tích yêu cầu ứng dụng
Chương 3 xây dựng các mô hình phân tích chức năng và dữ liệu:
- Phân tích các ca sử dụng (Use Case) thông qua sơ đồ Use Case Diagram và các bảng đặc tả chi tiết: Đăng ký, Đăng nhập, Tìm kiếm, Xem danh sách phim, Xem chi tiết phim, Bình luận, Đánh giá (1-5 sao), Xem trailer.
- Đặc tả chi tiết 3 kịch bản gợi ý phim: người dùng cũ (mô hình SVD), người dùng mới có thể loại yêu thích (phim thể loại yêu thích rating cao), người dùng mới không có thể loại yêu thích (phim mới, ngẫu nhiên, phim cùng thể loại khi xem chi tiết).
- Phân tích bố cục các màn hình giao diện (Đăng nhập, Đăng ký, Trang chủ, Chi tiết phim, Tìm kiếm, Thông tin cá nhân).
- Phân tích các thực thể và xây dựng sơ đồ quan hệ thực thể (ERD) với các mối quan hệ 1-1, 1-N và N-N giữa
customer, movie, ratings, comment, recommended_movies.
Chương 4. Thiết kế ứng dụng
Chương 4 mô tả chi tiết các bản thiết kế kỹ thuật:
- Thiết kế cơ sở dữ liệu quan hệ PostgreSQL gồm cấu trúc chi tiết của 5 bảng (
customer, movie, ratings, comment, recommended_movies) với đầy đủ kiểu dữ liệu, ràng buộc khóa chính và khóa ngoại.
- Thiết kế chi tiết giao diện người dùng cho các màn hình chức năng.
- Thiết kế kiến trúc phân lớp ứng dụng và kiến trúc hệ thống Client - Server kết nối qua REST API.
Chương 5. Cài đặt và triển khai ứng dụng
Chương 5 trình bày toàn bộ quá trình hiện thực hóa hệ thống:
- Triển khai Web API Server: Kích hoạt môi trường ảo, cài đặt Django, tạo project
movielens_api, tạo các app chức năng, cấu trúc thư mục, cấu hình kết nối cơ sở dữ liệu PostgreSQL trong file settings.py. Triển khai các API xử lý lấy thông tin bộ phim, đăng nhập, đăng ký mới (bắt lỗi trùng username, trùng email), truy vấn thông tin người dùng, tạo mới và cập nhật đánh giá, thống kê đánh giá, thêm và hiển thị bình luận, trả về danh sách gợi ý phim (movie_id) và danh sách phim theo diễn viên.
- Triển khai ứng dụng di động Flutter: Cài đặt Flutter SDK, xây dựng và hoàn thiện các màn hình: Đăng nhập, Đăng ký, Trang chủ (hiển thị danh mục phim mới, phim phổ biến, phim gợi ý), Màn hình xem thêm phim, Màn hình xem chi tiết phim (thông tin đạo diễn, diễn viên, thời lượng, thể loại, tóm tắt, gợi ý phim liên quan), Màn hình tìm kiếm, Màn hình bình luận, Màn hình đánh giá và Màn hình quản lý thông tin người dùng.
Chương 6. Đánh giá với khóa luận kế thừa
Chương 6 thực hiện so sánh, đối chiếu kết quả đạt được của khóa luận so với khóa luận kế thừa của Quách Phú Quốc và Nguyễn Tiến Đạt thông qua 2 phương diện:
- Về Web API: Khóa luận hiện tại đã bổ sung toàn diện các endpoint phục vụ đăng ký tài khoản mới, kiểm tra trùng lặp dữ liệu, quản lý bình luận, cập nhật đánh giá phim linh hoạt và cung cấp API gợi ý theo phân loại người dùng mới.
- Về ứng dụng di động: Bổ sung các màn hình tương tác người dùng hoàn chỉnh (đăng ký, bình luận văn bản/icon, đánh giá số sao, tìm kiếm có ràng buộc ký tự, xem danh sách theo thể loại/diễn viên), khắc phục giao diện sơ khai và hoàn thiện trải nghiệm người dùng trên thiết bị Android.
Chương 7. Kết luận và hướng phát triển
Chương 7 tổng kết toàn bộ kết quả đạt được của khóa luận trong việc xây dựng hệ thống gợi ý phim di động hoàn chỉnh và đề xuất các hướng nghiên cứu mở rộng trong tương lai.
Kết quả và đóng góp
Kết quả chính đạt được
- Xây dựng thành công ứng dụng di động xem và gợi ý phim chạy trên hệ điều hành Android (kiểm thử trên cả máy ảo và thiết bị thật) bằng Flutter Framework.
- Xây dựng và triển khai hoàn chỉnh hệ thống Web API Server bằng Django REST Framework kết nối cơ sở dữ liệu PostgreSQL (
movielens_api), đảm bảo việc truyền nhận và xử lý dữ liệu JSON ổn định giữa client và server.
- Thiết lập cơ chế gợi ý phim đa tầng:
- Người dùng cũ: Gợi ý chính xác dựa trên danh sách tính toán từ mô hình phân rã giá trị số ít (SVD) trên bộ dữ liệu MovieLens.
- Người dùng mới: Giải quyết thành công bài toán khởi đầu lạnh bằng cách phân luồng thông minh dựa trên thể loại yêu thích kết hợp bảng xếp hạng đánh giá cao, danh mục phim mới phát hành, gợi ý ngẫu nhiên và đề xuất phim cùng thể loại tại màn hình chi tiết.
- Hoàn thiện toàn bộ các tính năng tương tác người dùng: đăng ký mới (có kiểm tra tính hợp lệ của mật khẩu $> 3$ ký tự, định dạng email có
@, chống trùng lặp username/email), đăng nhập, tìm kiếm phim (ràng buộc từ khóa $> 2$ ký tự), đánh giá phim từ 1 đến 5 sao (hỗ trợ cập nhật điểm số), bình luận phim bằng văn bản và biểu cảm, xem tóm tắt thông tin và xem trailer phim (tự động hiển thị "Coming soon" nếu lỗi link).
Bảng tổng hợp so sánh đóng góp so với nghiên cứu kế thừa
| Hạng mục so sánh |
Khóa luận kế thừa (Quách Phú Quốc & Nguyễn Tiến Đạt, 2019-2020) |
Khóa luận của Vũ Cao Nguyên (2021) |
| Phạm vi gợi ý người dùng |
Chỉ gợi ý cho người dùng cũ đã có lịch sử đánh giá phim qua mô hình SVD. |
Gợi ý toàn diện cho cả người dùng cũ (SVD) và người dùng mới đăng ký (theo thể loại yêu thích, rating cao, phim mới, ngẫu nhiên và cùng thể loại). |
| Chức năng tài khoản |
Chỉ hỗ trợ đăng nhập cho các tài khoản có sẵn trong hệ thống dữ liệu. |
Bổ sung tính năng đăng ký người dùng mới hoàn chỉnh với các ràng buộc kiểm tra form và kiểm tra trùng lặp trên cơ sở dữ liệu. |
| Chức năng tương tác phim |
Giới hạn ở việc xem danh sách gợi ý và thông tin cơ bản. |
Bổ sung chức năng bình luận (văn bản + icon), đánh giá/chỉnh sửa đánh giá (1-5 sao), xem trailer phim và tìm kiếm phim theo từ khóa. |
| Hệ thống Web API |
Cung cấp các API cơ bản cho việc đăng nhập và lấy gợi ý SVD. |
Xây dựng hệ thống Django REST Framework hoàn chỉnh với đầy đủ API cho đăng ký, thông tin cá nhân, bình luận, đánh giá, tìm kiếm và gợi ý đa luồng. |
| Giao diện di động (UI) |
Giao diện thử nghiệm sơ khai. |
Giao diện hoàn chỉnh bằng Flutter theo phong cách Dark Mode, tối ưu trải nghiệm xem phim, thanh điều hướng đáy và danh sách cuộn linh hoạt. |
Hạn chế và hướng nghiên cứu tiếp
Dựa trên phạm vi và nội dung văn bản khóa luận trình bày, công trình còn một số điểm hạn chế và định hướng phát triển:
Hạn chế
- Ứng dụng mới chỉ được cài đặt, kiểm thử và chạy thực nghiệm trên hệ điều hành Android (bao gồm máy ảo và thiết bị thật), chưa được đóng gói và thử nghiệm thực tế trên hệ điều hành iOS dù sử dụng Flutter Framework.
- Do không có nguồn cung cấp dữ liệu phim trực tiếp, ứng dụng mới chỉ dừng lại ở tính năng xem tóm tắt giới thiệu, thông tin chi tiết và phát video trailer phim; chưa hỗ trợ tính năng phát toàn bộ nội dung phim trực tuyến.
- Danh sách phim gợi ý cho người dùng cũ dựa trên mô hình SVD là kết quả tính toán ngoại tuyến (offline) được lưu cố định trong bảng
recommended_movies, chưa có cơ chế tự động cập nhật lại mô hình học máy theo thời gian thực (online training) ngay sau khi người dùng thực hiện các lượt đánh giá mới.
Hướng nghiên cứu tiếp
- Mở rộng việc đóng gói, tối ưu hóa giao diện và phát hành ứng dụng trên nền tảng iOS để tận dụng tối đa thế mạnh đa nền tảng của Flutter.
- Tìm kiếm nguồn dữ liệu phim hợp pháp hoặc tích hợp dịch vụ phát video trực tuyến hoàn chỉnh khi có nguồn tài nguyên phù hợp.
- Nghiên cứu xây dựng cơ chế tự động cập nhật lại trọng số và danh sách gợi ý của mô hình học máy theo thời gian thực (real-time recommendation) khi người dùng phát sinh thêm các tương tác đánh giá và bình luận trong ứng dụng.
Giá trị tham khảo
Khóa luận là tài liệu tham khảo có giá trị học thuật và thực tiễn đối với:
- Đối tượng người đọc: Sinh viên các ngành Công nghệ Thông tin, Kỹ thuật Phần mềm, Hệ thống Thông tin và Khoa học Dữ liệu đang thực hiện đồ án môn học hoặc khóa luận tốt nghiệp liên quan đến lập trình ứng dụng di động và hệ thống khuyến nghị.
- Nội dung giá trị nên tham khảo:
- Cấu trúc thiết kế cơ sở dữ liệu quan hệ hoàn chỉnh (5 bảng chuẩn hóa) lưu trữ thông tin hệ thống phim và hệ khuyến nghị trên PostgreSQL.
- Phương pháp giải quyết bài toán khởi đầu lạnh (Cold-start problem) trong thực tế cho ứng dụng di động thông qua việc kết hợp thể loại yêu thích, bảng xếp hạng và lọc theo thuộc tính phim.
- Quy trình từng bước cài đặt, cấu hình và triển khai Web API bằng Django REST Framework (xử lý Serialization, viết các Views và định tuyến URL) kết nối ứng dụng di động Flutter.
- Bộ tài liệu đặc tả Use Case chi tiết, bao gồm luồng sự kiện chính, luồng sự kiện phụ và các ràng buộc dữ liệu cụ thể cho ứng dụng giải trí.
Câu hỏi thường gặp
1. Đề tài của tác giả Vũ Cao Nguyên kế thừa những kết quả cụ thể nào từ nghiên cứu trước đó?
Tác giả kế thừa trực tiếp từ khóa luận tốt nghiệp năm học 2019-2020 của Quách Phú Quốc và Nguyễn Tiến Đạt, bao gồm: mô hình gợi ý phim Singular Value Decomposition (SVD) áp dụng trên bộ dữ liệu MovieLens, một số cấu trúc Web API cho chức năng đăng nhập và một phần giao diện thử nghiệm ban đầu.
2. Hệ thống xử lý bài toán gợi ý phim cho người dùng mới đăng ký (chưa có mô hình SVD) như thế nào?
Hệ thống chia người dùng mới thành hai trường hợp:
- Người dùng mới có chọn thể loại yêu thích khi đăng ký: Ứng dụng gợi ý các bộ phim thuộc thể loại đó và đồng thời có điểm đánh giá cao trên bảng xếp hạng.
- Người dùng mới không chọn thể loại yêu thích: Ứng dụng hiển thị danh mục phim mới phát hành kết hợp gợi ý ngẫu nhiên; khi người dùng bấm vào xem một bộ phim cụ thể, ứng dụng sẽ gợi ý danh sách các phim có cùng thể loại với bộ phim đó.
3. Cơ sở dữ liệu của ứng dụng gồm những bảng nào và khóa chính của từng bảng là gì?
Cơ sở dữ liệu PostgreSQL gồm 5 bảng:
customer: Khóa chính là user_id.
movie: Khóa chính là movie_id.
ratings: Khóa chính là cặp (user_id, movie_id).
comment: Khóa chính là id.
recommended_movies: Khóa chính là user_id.
4. Các ràng buộc hợp lệ dữ liệu (validation) đối với chức năng Đăng ký và Tìm kiếm được quy định ra sao?
- Đăng ký: Mật khẩu phải có độ dài từ 3 ký tự trở lên; địa chỉ email bắt buộc phải chứa ký tự
@; tên đăng nhập (user_name) và email không được trùng với dữ liệu đã tồn tại trong bảng customer.
- Tìm kiếm: Từ khóa tìm kiếm do người dùng nhập vào bắt buộc phải có độ dài lớn hơn 2 ký tự; nếu nhập từ 2 ký tự trở xuống hệ thống sẽ báo lỗi và không thực hiện truy vấn.
5. Tại sao ứng dụng chưa hỗ trợ phát trực tiếp toàn bộ nội dung phim?
Theo giải trình của tác giả trong văn bản khóa luận, do nhóm nghiên cứu không có nguồn cung cấp bản quyền và tài nguyên phim đầy đủ nên ứng dụng chỉ dừng lại ở phạm vi hiển thị thông tin chi tiết, tóm tắt nội dung và phát video trailer giới thiệu phim (hoặc hiển thị thông báo "Coming soon" khi không có trailer).
Kết luận
Khóa luận tốt nghiệp của sinh viên Vũ Cao Nguyên đã hoàn thành trọn vẹn mục tiêu phát triển ứng dụng di động gợi ý phim đa nền tảng bằng Flutter Framework và hệ thống Web API bằng Django REST Framework kết hợp PostgreSQL. Đề tài không chỉ kế thừa thành công mô hình gợi ý SVD từ nghiên cứu trước mà còn giải quyết hiệu quả bài toán khởi đầu lạnh cho người dùng mới đăng ký thông qua phân loại thể loại và bảng xếp hạng. Toàn bộ các chức năng tương tác như đăng ký, đăng nhập, tìm kiếm, đánh giá, bình luận và xem trailer đều được thiết kế chặt chẽ và triển khai thực nghiệm thành công trên hệ điều hành Android.