Mục đích nghiên cứu
Khách quan
Đáp ứng nhu cầu cho những người dùng cần xem phim giải trí sau những giờ làm việc căng thẳng.
Cung cấp một ứng dụng đa nền tảng, tăng khả năng tiếp cận người dùng, không yêu cầu cao về mặt phần cứng.
Là một ứng dụng xem phim làm tròn vai trò, không thêm bớt những tính năng dư thừa và không có giá trị đối với người dùng.
Chủ quan
Nhóm đã luôn có sự tò mò và hứng thú đối với các công nghệ liên quan đến đề tài như Cross Platform, đặc biệt hơn là máy học Thông qua đề tài và sự dẫn dắt của giáo viên hướng dẫn để mở mang hiểu biết, nghiên cứu và có được một cái nhìn tổng quan hơn, chuyên sâu hơn về các công nghệ và vấn đề trên.
Bên cạnh đó, nhóm cho rằng đây là một cơ hội để có thể phát triển và áp dụng các kĩ năng đã học vào thực tế, tạo nên một thành phẩm từ những năm học vừa qua.
Mục tiêu đề tài
Xây dựng mô hình
▫ Xây dựng mô hình (Model) đề xuất phim dựa trên lịch sử, hành vi của người dùng về những phim đã xem như đánh giá, bình luận.
▫ Đề xuất nhanh, độ chính xác cao và phù hợp với sở thích của người xem.
Xây dựng ứng dụng
▫ Ứng dụng có thể chạy trên mobile với giao diện thân thiện.
▫ Chạy được đa nền tảng IOS và Android.
▫ Xem phim trực tuyến hỗ trợ nội dung phù hợp với người xem.
▫ Hiệu năng ứng dụng ổn định, tương thích nhiều thiết bị, không yêu cầu cao về phần cứng.
CHƯƠNG 2: KIẾN THỨC NỀN TẢNG
Flutter
Flutter là một SDK phát triển ứng dụng di động nguồn mở được tạo ra bởi Google, ra mắt vào năm 2017, bản thân nó là một thư viện cực kỳ mạnh mẽ để phát triển ứng dụng đa nền tảng (Android, IOS, Mac, Window, Linux) Một trong những điểm nổi bật nhất của Flutter đó là hiệu năng cực kỳ cao nhờ sử dụng ngôn ngữ Dart làm ngôn ngữ chính để phát triển các thành phần.
Flutter bỏ xa các tiền bối như React Native về hiệu năng vì nó gần như native, Dart code được Flutter SDK compile sang Native code và chạy trực tiếp trên hệ điều hành máy Flutter dùng ngôn ngữ Dart để viết cả UI và logic của ứng dụng, nó được tối ưu đến mức có thể quét 60 lần / giây để kiểm tra, so sánh cập nhật UI mà không hề tiêu tốn nhiều tài nguyên Flutter so sánh sự thay đổi giữa các component (hay ở đây gọi là Widget) của lần render này với lần render trước dựa vào RenderTree Trước khi đến cài đặt và cấu hình, chúng ta sẽ đi đến một số khái niệm cơ bản:
- Giới thiệu về Widget Tree :
Widget Tree chỉ đơn giản là tất cả các Widget mà chúng ta đang dùng để xây dựng ứng dụng, tức là code mà chúng ta viết sẽ tạo nên widget tree Nó hoàn toàn do chúng ta kiểm soát Khai báo các widget lồng ghép chúng lại với nhau để tạo nên bố cục mong muốn Cái Tree này được xây dựng bởi Flutter khi call phương thức build(){ } từ code của chúng ta, chúng chỉ là một loạt các cài đặt cấu hình mà Flutter sẽ xử lý Nó không chỉ đơn giản xuất hiện ra trên màn hình rồi thôi Thay vào đó, nó sẽ cho Flutter biết những gì sẽ vẽ lên màn hình ở lần tiếp theo Widget tree được rebuild rất thường xuyên
- Giới thiệu về Element Tree :
Element Tree liên kết vào Widget Tree, là thông tin được thiết lập với các đối tượng/phần tử thực sự được hiển thị Nó rất hiếm khi rebuild Element Tree được quản lý theo một cách khác và sẽ không rebuild khi phương thức build(){ } được gọi Ở mỗi Widget trong Widget Tree, Flutter sẽ tự động tạo một element cho nó.
Nó được thực hiện ngay khi Flutter xử lý Widget ở lần đầu tiên Ở đây chúng ta có thể nói rằng một element là một đối tượng được quản lý trong bộ nhớ bởi Flutter, nó có liên quan đến Widget trong Widget Tree Element chỉ giữ một tham chiếu tới Widget (trong Widget Tree) đang giữ các thông số giao diện đầu cuối
- Giới thiệu về Render Tree :
Render Tree đại diện của các element/đối tượng thực sự được hiển thị trên màn hình Render Tree cũng không rebuild thường xuyên! Element Tree cũng được liên kết với Render Tree Element trong Element Tree trỏ đến render object mà chúng ta thực sự thấy trên màn hình Bất cứ khi nào Flutter thấy một element chưa được render trước đó thì nó sẽ tham chiếu đến Widget trong Widget Tree để thiết lập, sau đó tạo một element trong element tree Flutter cũng có một layout phase, giai đoạn mà nó tính toán và lấy không gian diện tích có sẵn trên màn hình, chiều, kích thước, hướng, v.v Nó cũng có một phase khác để thiết lập các listeners với các Widget để chúng ta có thể thao tác các sự kiện, v.v
Widget: Là toàn bộ các thành phần giao diện của ứng dụng, Widget bản chất chỉ là
1 class nhưng nó được thiết kế để chúng có thể lồng vào nhau tạo nên một WidgetTree Trong Flutter có 2 Widget chính đó là StatelessWidget và Statefulwidget.State: thể hiện trạng thái của ứng dụng, khi state thay đồi thì Widget đồng thời render lại để cập nhật UI (chỉ có ở StatefulWidget).
Dart
Hình 2.2: Ngôn ngữ lập trình Dart
Dart là một ngôn ngữ lập trình hiện đại cấp cao, được phát triển ban đầu bởi Google Đây là ngôn ngữ lập trình mới xuất hiện vào năm 2011, nhưng phiên bản ổn định của nó đã được phát hành vào tháng 6 năm 2017 Dart không quá phổ biến vào thời điểm đó, nhưng nó đã trở nên phổ biến khi được sử dụng bởi Flutter. Dart là một ngôn ngữ lập trình động, dựa trên lớp, hướng đối tượng Về mặt cú pháp, nó khá giống với Java, C và JavaScript Nếu chúng ta biết bất kỳ ngôn ngữ lập trình nào trong số này, chúng ta có thể dễ dàng học ngôn ngữ lập trình Dart.
Dart là một ngôn ngữ lập trình mã nguồn mở được sử dụng rộng rãi để phát triển ứng dụng di động, ứng dụng web hiện đại, ứng dụng máy tính để bàn và Internet of Things (IoT) bằng cách sử dụng khung Flutter Nó cũng hỗ trợ một số khái niệm nâng cao như Interface, mixin, lớp trừu tượng, generic type Nó là một ngôn ngữ biên dịch và hỗ trợ hai loại kỹ thuật biên dịch:
- Ahead Of Time (AOT): Với AOT thì trình biên dịch chuyển ngôn ngữ Dart thẳng sang Native Code giúp hiệu năng tốt nhất có thể (tức là khi chạy chương trình, nó sẽ biên dịch từ đầu đến cuối).
- Just In Time (JIT): Cho phép hot reloading hoạt động, giúp phát triển sản phẩm nhanh và tiện dụng hơn (được hiểu như việc debug trong ngôn ngữ khác là debug hàm nào chạy hàm đó thì ở đây nó sẽ viết đến đâu biên dịch ngay đến đấy).
Một số khái niệm quan trọng cần nắm khi học Dart:
- Do Dart là ngô ngữ thuần OOP nên tất cả những thứ bạn gán cho biến đều là object, mọi object đều là instance (thể hiện) của một class.
- Kể cả số, method (hàm) và null cũng đều là object Tất cả các object đều kế thừa từ Object class.
- Type của 1 variable (biến) là optional bởi vì Dart có thể tự suy ra type dựa trên giá trị truyền vào cho biến.
- Biến number được hiểu là kiểu int Khi bạn muốn khai báo 1 variable mà type của nó không được xác định và có thể thay đổi, hãy sử dụng type dynamic
- Như các ngôn ngữ khác, Dart hỗ trợ generic type, ví dụ như List (1 danh sách kiểu số nguyên) hoặc List (1 danh sách các object mà type không xác định, Dart có thể chấp nhận mọi loại type).
- Dart hỗ trợ top-level function (giống như main()), đồng nghĩa bạn có thể sử dụng hàm đó ở bất cứ đâu mà không cần thông qua tên class hay bất kì instance của class nào cả.
- Bạn cũng có thể tạo một hàm bên trong hàm (còn gọi là nested function hoặc local function).
- Tương tự Dart cũng hỗ trợ top-level variable.
- Không giống với Java, Dart không hỗ trợ public, protected và private. Nếu như identifier (tên biến, hàm, ) bắt đầu với dấu gạch dưới (_), thì nó private trong library của nó.
- Mỗi file dart được coi là 1 library Identifier có thể bắt đầu bằng một chữ cái hoặc dấu gạch dưới (_).
- Dart tools có thể báo cho bạn 2 loại vấn đề: warning và errors.
ASP.Net Core
ASP.NET Core đã được xuất hiện từ lâu và được biết đến như là một sản phẩm của Net Framework ASP.NET được cộng động ủng hộ và phát triển ổn định đến nay Tuy nhiên đã có sự thay đổi mạnh mẽ khi ASP.NET Core xuất hiện, mang những đặc tính của công nghệ lập trình hiện đại.
ASP.NET Core là kết quả của sự học hỏi từ các Framework Module hóa khác Nó chạy trên cơ sở là tập hợp của các gói Module được gọi là Nuget Packages Nuget Packages cho phép bạn tối ưu thiết kế ứng dụng chỉ bao gồm những gì cần thiết. Cho nên những ứng dụng được thiết kế trên nền tảng ASP.NET cho ra kết quả có dung lượng nhỏ hơn, bảo mật tốt hơn, hiệu năng hoạt động tốt và ổn định Quá trình xây dựng cũng không còn quá phức tạp nên vấn đề phát triển và bảo trì sau này cũng dễ hơn nhiều.
Khi làm việc với ASP.NET core bạn đã được những cải tiến đáng kể như:
- Tương thích hệ thống xây dựng Web UI và Web APIs.
- Tích hợp những client – side frameworks hiện đại và những luồng phát triển
- Hệ thống cấu hình dựa trên mô hình đám mây
- Dependency injection được xây dựng sẵn
- HTTP request được tối ưu nhẹ hơn
- Có thể host trên IIS hoặc self- host trong process của riêng mình
- Được xây dựng trên NET Core, hỗ trợ app vesioning
- Chuyển thực thể, thành phần, module như những NuGet packages
- Các công cụ mới để đơn giản hóa quá trình phát triển web hiện đại.
- Xây dựng và chạy đa nền tảng, mã nguồn mở, tập trung vào cộng đồng
C#
Hình 2.4: Ngôn ngữ lập trình C#
C# là ngôn ngữ lập trình hướng đối tượng do Microsoft tạo ra chạy trên NET Framework C# có nguồn gốc từ C và ngôn ngữ này gần giống với các ngôn ngữ phổ biến khác như C++ và Java.
Phiên bản đầu tiên được phát hành vào năm 2002 Phiên bản mới nhất, C# 11, được phát hành vào tháng 11 năm 2022
Ngôn ngữ lập trình C# có những đặc trưng cơ bản sau:
- Là một ngôn ngữ thuần hướng đối tượng.
- Là ngôn ngữ khá đơn giản, chỉ có khoảng 80 từ khóa và hơn mười mấy kiểu dữ liệu được dựng sẵn.
- Cung cấp những đặc tính hướng thành phần (component-oriented) như là Property, Event.
- C# không khuyến khích sử dụng con trỏ như trong C++ nhưng nếu bạn thực sự muốn sử dụng thì phải đánh dấu đây là mã không an toàn(unsafe).
- C# có bộ Garbage Collector sẽ tự động thu gom vùng nhớ khi không còn sử dụng nữa.
- C# đã loại bỏ đa kế thừa trong C++ mà thay vào đó C# sẽ hỗ trợ thực thi giao diện.
Một số ưu điểm nổi bật của C#:
- Gần gũi với các ngôn ngữ lập trình thông dụng (C++, Java, Pascal).
- Xây dựng dựa trên nền tảng của các ngôn ngữ lập trình mạnh nên thừa hưởng những ưu điểm của những ngôn ngữ đó.
- Cải tiến các khuyết điểm của C/C++ như con trỏ, các hiệu ứng phụ.
- Dễ tiếp cận, dễ phát triển.
MS SQL Server
SQL Server là một hệ quản trị cơ sở dữ liệu quan hệ được phát triển bởi Microsoft Nó được sử dụng để lưu trữ và quản lý dữ liệu trong các ứng dụng doanh nghiệp và web SQL Server có khả năng xử lý các tác vụ liên quan đến cơ sở dữ liệu, bao gồm tạo, xóa, sửa đổi và truy vấn dữ liệu.
SQL Server được thiết kế để hỗ trợ các ứng dụng với nhiều người dùng đồng thời và có khả năng mở rộng đáp ứng các nhu cầu tăng trưởng của doanh nghiệp.
SQL Server cũng cung cấp các tính năng bảo mật cao để bảo vệ dữ liệu khỏi các cuộc tấn công từ bên ngoài và đảm bảo tính toàn vẹn của dữ liệu.
SQL Server hỗ trợ nhiều ngôn ngữ lập trình, bao gồm C++, Java, Python và NET Nó cũng có thể tích hợp với nhiều hệ thống khác nhau, bao gồm các ứng dụng doanh nghiệp, các hệ thống quản lý nội dung, các hệ thống quản lý quan hệ khách hàng và các hệ thống phân tích dữ liệu.
SQL Server cung cấp các tính năng nâng cao như khả năng sao lưu và khôi phục dữ liệu, phân tích dữ liệu và báo cáo, khả năng phân vùng dữ liệu và khả năng xử lý dữ liệu phân tán Nó cũng hỗ trợ các tính năng mới như in-memory OLTP vàAlwaysOn, cho phép tăng tốc độ xử lý và đảm bảo tính sẵn sàng cao cho các ứng dụng quan trọng.
Microsoft-ML
Microsoft-ML là một thư viện machine learning mã nguồn mở được phát triển bởi Microsoft Thư viện này cung cấp cho người dùng các công cụ và thuật toán machine learning tiên tiến, giúp họ xây dựng các mô hình dự đoán và phân tích dữ liệu.
Microsoft-ML hỗ trợ các ngôn ngữ lập trình như R và Python, cho phép người dùng sử dụng các công cụ và thuật toán machine learning trong các môi trường lập trình phổ biến này Thư viện này cũng tích hợp tốt với các sản phẩm Microsoft như SQL Server và Azure, cho phép người dùng sử dụng các công cụ machine learning trong các môi trường đám mây.
Microsoft-ML cung cấp rất nhiều thuật toán machine learning như regression, classification, clustering, và recommendation Nó cũng cung cấp các công cụ và thuật toán cho việc xử lý dữ liệu, giúp người dùng chuẩn bị dữ liệu trước khi áp dụng các thuật toán machine learning Các công cụ này bao gồm các kỹ thuật tiền xử lý dữ liệu như loại bỏ dữ liệu thiếu, chuẩn hóa dữ liệu và mã hóa dữ liệu.
Microsoft-ML cũng có các chức năng nâng cao như học máy trên dữ liệu lớn và học máy trên dữ liệu phân tán Điều này cho phép người dùng xử lý các tập dữ liệu lớn và phân tán một cách hiệu quả, giúp tăng tốc độ xử lý và giảm thời gian huấn luyện mô hình.
Ngoài ra, Microsoft-ML cung cấp các công cụ và tính năng để đánh giá mô hình, giúp người dùng đánh giá hiệu suất của mô hình và điều chỉnh các tham số phù hợp với mục đích sử dụng.
Microsoft-ML được cung cấp dưới dạng các gói cài đặt cho R và Python, và có thểđược cài đặt trên các hệ điều hành như Windows, Linux và macOS Thư viện này cũng tích hợp với các công cụ phát triển tích hợp (IDE) như Visual Studio vàJupyter Notebook, cho phép người dùng dễ dàng sử dụng và phát triển các mô hình machine learning.
HỆ THỐNG GỢI Ý RECOMMENDER SYSTEM 35 3.1 Khái niệm
Recommendater System
Hệ thống gợi ý, hay tiếng anh là Recommender System, là một hệ thống có khả năng tự động gợi ý cho người dùng những sản phẩm họ có thể thích Đây là một giải pháp thay thế tốt nhất cho các thuật toán tìm kiếm, khi mà những sản phẩm họ có thể thích được tự động đề xuất kể cả khi người dùng có thực hiện hành động tìm tiếm hay không Bằng cách sử dụng bộ dữ liệu thu thập được từ phía người dùng trước đó, hệ thống sẽ tiến hành dự đoán và đưa ra kết quả gợi ý cho người dùng về những sản phẩm, tính năng, hay dịch vụ liên quan phù hợp với sở thích, độ quan tâm của người dùng Từ đó giúp nâng cao được chất lượng dịch vụ cho ứng dụng cũng như thu lại được lợi nhuận cao, đặc biệt trong các sàn thương mại điện tử
Recommemder System là một trong những mảng tương đối lớn của Học Máy Machine Learning và cũng có lịch sử khá lâu đời, khi lần đầu tiên hệ thống được đề cập trong một bài báo cáo kĩ thuật năm 1990 bởi Jussi Karlgren tại Đại Học Columbia và sau đó được triển khai quy mô lớn từ năm 1994 trở đi bởi Jussi Karlgren Tuy nhiên, thực tế Recommendation Systems là chỉ thực sự bùng nổ khoảng 10-15 năm gần đây, khi việc tương tác trực tuyến của người dùng gia tăng, và sự phát triển mạnh mẽ của các sàn thương mại điện tử, và cũng không thể thiếu sự tiến bộ của ngành Khoa học dữ liệu hiện nay.
Các thuật ngữ sau đây sẽ thường được sử dụng,
- Đối tượng, hay người dùng mà hệ thống gợi ý hướng đến được gọi là users,
- Sản phẩm mà hệ thống đưa ra gợi ý được gọi là items
- Sự tương quan giữa các đối tượng và sản phẩm, mức độ quan tâm của đối tượng đối với sản phẩm đó được gọi là rating
Về phân loại, các Recommender Systems thường được chia thành hai nhóm lớn:
- Content-based systems: hoạt động dựa vào đặc điểm của items
- Collaborative filtering: hoạt động với sự cộng tác của users và rating.
Trong đề tài này, nhóm chúng em tập trung phát triển hệ thống gợi ý,Recommender System theo hướng thứ hai: Collaborative filtering
Phương pháp Collaborative Filtering
Lọc cộng tác, hay còn gọi là Collaborative filtering, là một nhóm phương pháp thuộc hệ thống gợi ý, Recommender System, hoạt động dựa trên sự tương quan giữa các users, items và rating, nhằm tìm ra sản phẩm mà người dùng có khả năng thích dựa vào những sản phẩm mà những người dùng khác có hành vi tương tự đã lựa chọn trước đó. Ưu điểm của Collaborative filtering,
- Hệ thống tận dụng được những thông tin từ các users khác Nếu biết được đặc điểm hành vi của một vài users tương tự nhau, hệ thống có thể suy luận ra hành vi của những users còn lại.
- Đơn giản, không cần phải mô tả đặc điểm mỗi item như Content-base
Nhược điểm của Collaborative filtering,
- Hệ thống không giải quyết được các bài toán khởi đầu lạnh (cold-start problem) khi mà người dùng mới không có đặc điểm gì về hành vi, chưa đánh giá sản phẩm bất nào, hay các sản phẩm mới chưa được người dùng nào đánh giá
- Khi ma trận đánh giá lớn, tức số lượng người dùng lẫn sản phẩm lớn thì thời gian tính toán sẽ tăng cao, khó đáp ứng tư vấn thời gian thực hoặc gần thời gian thực
Ví dụ: Hai users A, và B đều thích cùng những items (tức là đều đánh giá điểm rating cho các items yêu thích ở mức từ 4 -> 5) Khi đó, dựa vào dữ liệu thu thập được trước đó của userA, ta thấy A thích một số items khác, như vậy nhiều khả năng, userB cũng sẽ thích những items này Từ đó hệ thống sẽ đề xuất những items này cho userB.
Hình 3.1: Cách thức hoạt động của Collaborative filtering
Việc xác định mức độ quan tâm của mỗi user tới một item dựa trên mức độ quan tâm của similar users tới item đó còn được gọi là User-user Collaborative Filtering
Trên thực tế, User-user Collaboration filtering cũng tồn tại mặt hạn chế
- Số lượng users luôn lớn hơn số lượng items rất nhiều Kéo theo việc tính toán rất lớn và phức tạp, và cũng gặp nhiều khó khăn trong việc lưu trữ ma trân dữ liệu.
- Khi một user thay đổi rating, hoặc rating thêm items, toàn bộ tính toán sẽ phải thực hiện lại
Vì vậy mà, cũng có một hướng tiếp cận khác thay vì xác định user similarities, hệ thống sẽ xác định item similarities Hướng này được gọi là Item- Item Collaborative Filtering, có thể giải quyết các mặt hạn chế của User-user, và cũng được sử dụng nhiều trong thực tế hơn.
Trong đề tài này, nhóm chúng em phát triển hệ thống gợi ý, Collaborative filtering Recommender System theo hướng thứ nhất: User-user
Các thành phần chính
Có hai thực thể chính trong các Recommendation Systems là users và items. Mỗi user sẽ có mức độ quan tâm tới từng item khác nhau Mức độ quan tâm này, được gọi là rating, sẽ được gán cho một giá trị ứng với mỗi cặp user-item Tập hợp tất cả các ratings, bao gồm cả những giá trị chưa biết cần được dự đoán, tạo nên một ma trận gọi là utility matrix.
Ví dụ: Các Items 1,2,3 được Users lần lượt đánh giá điểm rating theo mức độ quan tâm từ 0 đến 5 Các dấu '?' ứng với việc dữ liệu chưa tồn tại trong cơ sở dữ liệu và Recommendation Systems cần phải tính toán, đưa ra kết quả dự đoán giá trị cho các vị trí này.
Trên thực tế, có rất nhiều users và items trong hệ thống, và mỗi user thường chỉ đánh giá điểm rating cho một số lượng rất nhỏ các items, thậm chí có những user không rate item nào Với việc các ô được điền càng nhiều thì độ chính xác của hệ thống gợi ý sẽ càng được cải thiện, vì vậy, các hệ thống luôn luôn hỏi người dùng về sự quan tâm của họ tới sản phẩm, và muốn người dùng đánh giá càng nhiều sản phẩm càng tốt Việc đánh giá các sản phẩm của một người dùng, không những giúp cho các người dùng khác biết được chất lượng sản phẩm mà còn giúp hệ thống biết được sở thích của người dùng, qua đó có những đề xuất với độ chính xác cho những người dùng sau.
Phân tích ma trận thành nhân tử, hay còn gọi là Matrix Factorization, hoặc Matrix Decomposition là một thuật toán của phương pháp Collaborative Filtering Recommendation System.
Hình 3.3: Hình minh họa thuật toán Matrix Factorization với M,N lần lượt là số items và số users. Ý tưởng chính của Matrix Factorization áp dụng cho Recommendation Systems là giả định tồn tại các tính chất ẩn mô tả sự liên quan giữa các items và users Tính chất ẩn có thể là đặc điểm mô tả của items, và cũng có thể là một sự kết hợp của những đặc điểm mô tả này hoặc cũng có thể là bất cứ điều gì mà ta không thực sự cần đặt tên Mỗi item sẽ mang tính chất ẩn ở một mức độ nào đó tương ứng với các hệ số trong vector X của nó, hệ số càng cao tương ứng với việc mang tính chất đó càng cao Tương tự, mỗi user cũng sẽ có xu hướng thích những tính chất ẩn nào đó và được mô tả bởi các hệ số trong vector W của nó
Hình 3.4: Hình minh họa thuật toán Matrix Factorization dưới dạng biểu thức
Sau khi tìm được các ma trận items X và ma trận users W, giá trị ước lượng rating của một user j lên mt item i bằng biểu thức ^ y ij =x i T w j
Giá trị kết quả của biểu thức sẽ cao nếu các thành phần tương ứng của X và
W đều cao Điều này nghĩa là item mang các tính chất ẩn mà user thích, vậy thì nên gợi ý item này cho user.
Xây dựng hàm mất mát
Việc xây dựng hàm mất mát cũng được dựa trên các thành phần đã được điền của Utility Matrix Y dựa trên biểu thức sau:
Hình 3.5: Hàm mất mát của thuật toán Matrix Factorization
Trong đó r mn = 1 nếu item thứ m đã được đánh giá bởi user thứ n, là căn bậc hai của tổng bình phương tất cả các phần tử của ma trận, s là toàn bộ số ratings đã có
Việc tối ưu đồng thời X , W là tương đối phức tạp, thay vào đó, phương pháp được sử dụng là lần lượt tối ưu một ma trận trong khi cố định ma trận kia, tới khi hội tụ Ví dụ:
Khi cố định X, việc tối ưu W đưa về việc tối ưu hàm:
Hình 3.6: Hàm tối ưu W khi cố định X
Khi cố định W, việc tối ưu X đưa về viêc tối ưu hàm:
Hình 3.7: Hàm tối ưu X khi cố định W
Áp dụng vào đề tài
Sau khi hệ thống nhận diện được người dùng với thông tin về các bộ phim đã xem, bộ phim đã đánh giá, hệ thống sẽ tiếp tục gửi kết quả này đến Recommender System Tại đây, Recommender System sử dụng bộ dữ liệu (dataset) lấy từ Movielens kết hợp với dữ liệu mới và áp dụng thuật toán Matrix Factorization Collaborative filtering xử lý bộ dữ liệu và cuối cùng cho ra kết quả gồm các bộ phim được đề xuất cho người dùng mà những người dùng trước đó cũng đã đánh giá cao.
3.3.2 Phân tích bộ dữ liệu
Nhóm lấy bộ dữ liệu từ Movielens, bao gồm:
- Bộ dữ liệu train với 100836 dòng dữ liệu, gồm 610 users, 9724 bộ phim được đánh giá, mỗi user đều rating giá trị từ 0 đến 5, bước giá trị 0,5.
- Bộ dữ liệu test với 500 dòng dữ liệu, gồm các dữ liệu được lọc random từ bộ dữ liệu train.
Hình 3.8: Hình minh họa bộ dữ liệu train
Tiếp đó, nhóm xây dựng hệ thống gợi ý, Recommender System, áp dụng thuật toán Matrix Factorization bằng cách sử dụng thư viện Microsoft.ML và Microsoft.ML.Recommender trong ứng dụng web API cùng với ASP.NET Core phiên bản 6.0
3.3.4 Thử nghiệm và đánh giá
Hình 3.9: Đánh giá mô hình và kết quả dự đoán của từng mã khóa học-thời gian
Trong đó, xét theo thang giá trị từ 0 -> 1:
- Sai số dự đoán, Root Mean Squared Error (RMS hoặc RMSE), dùng để đánh giá sự khác biệt giữa giá trị được dự đoán bởi mô hình nghiên cứu và giá trị trong bộ dữ liệu Test của hệ thống, được tính bằng căn bậc hai của mức trung bình của các sai số bình phương Sai số dự đoán này càng thấp, thì Recommender System đề xuất càng chính xác.
- R bình phương, R Squared, cho biết mức độ phù hợp bộ dữ liệu so với mô hình nghiên cứu, được tính toán dựa trên phần biến thiên do Hồi quy và phần biến thiên do Phần dư Số liệu này càng lớn, thì mô hình nghiên cứu càng phù hợp với bộ data.
XÂY DỰNG HỆ THỐNG 44 4.1 Kiến trúc hệ thống tổng quan
Kiến trúc phía Client
Hình 4.2: Sơ đồ kiến trúc hệ thống phía client
4.2.2 Chi tiết các thành phần trong hệ thống
STT Thành phần Chi tiết
Service locator là một pattern có nhiệm vụ như một kho chứa tất cả các phụ thuộc mà các module khác trong hệ thống cần để hoạt động, nó cung cấp các phụ thuộc cho module khác thông qua cơ chế dependency injection.
2 Presentation Module Đây là nơi trực tiếp quản lý các hành vi tương tác của người dùng.
Khi user interface nhận được một tương tác từ người dùng, nó sẽ gửi một sự kiện gọi là Bloc Event xuống khối BloC (UI Logic), khối BloC này tiến hành các thao tác logic cần thiết (gọi tới Usecase) sau đó bắn ra một trạng thái gọi là Bloc State. User interface nhận State trên và render ra giao diện tương ứng.
3 Domain Module Đây là nơi chủ chốt xử lý các business logic của ứng dụng.
Entity sẽ là các thực thể dùng để lưu trữ dữ liệu nhận từ Repository và UI sẽ dùng các entity này để render.
Use case là nơi dùng để viết business logic và gọi tới Repository Abstract repository là một interface thuộc domain module, nó được kế thừa và thực thi bởi lớp Repository thuộc Data module Mục đích của việc này là để tháo gỡ sự phụ thuộc giữa hai module lớn đó là Domain và Data
4 Data Module Đây là nơi chủ chốt để xử lý các thao tác lưu trữ dữ liệu, thao tác gọi API.
Trong đó sẽ bao gồm remote data tức là API service và local data tức là Local Storage Ngoài ra còn có RemoteConfig để lấy các cài đặt cấu hình.
Một thành phần quan trọng nữa đó chính là Model, nó sẽ là thực thể dùng để lưu trữ dữ liệu nhận được từ phía cơ sở dữ liệu, và quá trình parse data sẽ được Data mapper xử lý.
5 Shared Module Đây là thành phần chứa các chức năng chung nhất mà toàn hệ thống đều cần sử dụng tới Chẳng hạn như các cấu hình đa ngôn ngữ, các hàm trợ giúp tính toán, các component phổ biến, các hằng số và cài đặt tổng quá.
Bảng 4.1: Các thành phần trong hệ thống phía client
Kiến trúc phía Server
Hình 4.3: Sơ đồ kiến trúc hệ thống phía server
4.3.2 Chi tiết các thành phần trong hệ thống
STT Thành phần Chi tiết
Máy chủ Web dùng để hosting API Nó dùng để nhận và xử lý các yêu cầu HTTP đến, chuyển hướng đến endpoint phù hợp.
2 Web API Controllers Đóng vai trò là điểm vào cho các endpoint
API chịu trách nhiệm xử lý các yêu cầu
HTTP đến, xử lý các logic liên quan và tạo ra các phản hồi về phù hợp
Là các đối tượng cung cấp định dạng cấu trúc để trao đổi thông tin giữa Controller và Unit of Work
4 Unit of Work Đây là phần chính xử lý các thao tác liên quan đến việc đọc/thêm/xóa/sửa. Ở đây sử dụng 2 mẫu kết hợp với nhau là Unit Of Work(UoW) Pattern và Repository Pattern để tạo ra cấu trúc rõ ràng, dễ dàng cho việc CRUD và cung cấp lớp trung gian để truy xuất dữ liệu một cách trừu tượng.
MlContext đọc mô hình đã được dạy kết hợp với các phần khác trong UoW để thực hiện việc tính toán, kết xuất và đưa ra gợi ý cho người dùng.
5 EF 6 Đây là Object-Relational Mapping cung cấp lớp trừu tượng cấp cao chịu trách nhiệm tương tác với cơ sở dữ liệu.
Là mô hình đã được dạy để hỗ trợ cho việc gợi ý phim cho người dùng đã tồn tại trong dataset.
7 TMDB API Là API ngoài cung cấp thông tin các phim như: Tên phim, hình ảnh, diễn viên.
Là thành phần quản lý các phụ thuộc, quản lý phạm vi và cung cấp các phụ thuộc qua cơ chế Dependency Injection.
Cung cấp lớp trừu tượng cấp cao đóng vai trò như ổ đĩa lớn được kết hợp từ nhiều ổ đĩa nhỏ hơn để tăng khả năng mở rộng chiều ngang cho hệ thống.
10 Indexing Đánh chỉ mục cho các file có trong hệ thống để dễ dàng tìm kiếm và quản lý các tập tin.
11 Stream Processing Đóng vai trò tương tác với các file do RAID Storage cung cấp để chia nhỏ, chuyển đổi nhằm mục đích phù hợp với kích thước, nhu cầu khi client có nhu cầu.
12 Controllers Đóng vai trò là điểm vào cho các endpoint chịu trách nhiệm xử lý các yêu cầu HTTP đến, kiểm tra các tập tin và trả về tập tin(Stream) phù hợp.
Là một loại máy chủ tệp tin cho phép người dùng truy cập và chia sẻ tệp qua giao thức HTTP.
14 Ngrok Là công cụ tạo đường hầm (tunnel) hỗ trợ việc kết nối giữa localhost và internet giúp cho người dùng trên internet có thể truy cập được vào localhost.
Bảng 4.2: Các thành phần trong hệ thống phía server
Sơ đồ Use case
Hình 4.4: Sơ đồ Use case
4.4.1 Danh sách các tác nhân
- User (người dùng): Có quyền truy cập tất cả các tính năng.
STT Use case chính Phân rã Use case Ý nghĩa/Ghi chú
1 Đăng nhập Đăng nhập Người dùng đăng nhập vào hệ thống bằng tài khoản
Xác nhận sẽ đăng ký tài khoản với các thông tin mà người dùng đã nhập
Xác thực email mà người dùng sử dụng để đăng ký là hợp lệ
Kiểm tra xem tài khoản đang yêu cầu có tồn tại trong hệ thống không
Xác minh người đang yêu cầu khôi phục là chủ của tài khoản
Lập mật khẩu mới Thiết lập mật khẩu mới cho người dùng
Tra cứu phim Duyệt phim theo các tiêu chuẩn tra cứu
Tra cứu diễn viên Duyệt diễn viên theo các tiêu chuẩn tra cứu
5 Xem thông tin phim Yêu thích phim Lưu phim vào danh sách yêu thích Đánh giá phim Để lại bình luận và đánh giá phimXem phim Trình chiếu phim đang được chọn
Tải phim Tải phim về máy cục bộ
Chia sẻ phim qua tin nhắn văn bản hoặc QR (Chưa phát triển)
Lưu lịch sử Lưu lịch sử xem phim của người dùng Đánh giá phim Để lại bình luận và đánh giá phim
7 Xem thông tin diễn viên Xem thông tin Xem thông tin diễn viên cụ thể
8 Quản lý tài khoản Đổi mật khẩu Đổi mật khẩu tài khoản
Quản lý yêu thích Tra cứu hoặc xoá phim yêu thích Quản lý lịch sử Tra cứu, xoá phim đã xem
Quản lý đánh giá Tra cứu, xoá, sửa các đánh giá trong quá khứ
Cài đặt ứng dụng Đổi ngôn ngữ hoặc chủ đề ứng dụng
Bảng 4.3: Danh sách các Use case
4.4.3 Mô tả chi tiết Use case
Tóm tắt Khi muốn hoạt động trong hệ thống, người dùng cần phải đăng nhập Tính năng đăng nhập hỗ trợ xác thực người dùng thông qua tài khoản và mật khẩu
Pre-Condition 1 Đã được cung cấp sẵn tài khoản
2 Hệ thống đang vận hành ổn địnhPost-Condition 1 Hệ thống hiển thị màn hình làm việc chính
2 Hệ thống ghi nhận hoạt động của người dùng Main Flow 1 Người dùng khởi động ứng dụng
3 Người dùng nhập mật khẩu
4 Người dùng Click Button Đăng nhập trên màn hình
5 Hệ thống xác nhận thông tin đăng nhập cho người dùng
6 Hệ thống ghi nhận thông tin đăng nhập người dùng
7 Kết thúc Use-case Alternative Flow 5a Hệ thống kiểm tra tài khoản người dùng nhập có tồn tại trong hệ thống hay không.
5a1 Hệ thống hiển thị thông báo “Người dùng không tồn tại”
5a2 Kết thúc Use-case 5b Hệ thống kiểm tra tài khoản người dùng có mật khẩu không chính xác
5b1 Hệ thống hiển thị thông báo “Sai mật khẩu”
Bảng 4.4: Đặc tả use case dăng nhập
4.4.3.1 Use case Quên mật khẩu
Tên Use-case Khôi phục mật khẩu
Tóm tắt Cho phép người dùng truy cập lại tài khoản khi quên mật khẩu đăng nhập
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Người dùng nhấn vào tuỳ chọn “Quên mật khẩu”.
2 Hệ thống hiển thị giao diện khôi phục mật khẩu.
3 Người dùng nhập tài khoản mail liên kết với tài khoản cần khôi phục.
4 Nếu tài khoản hợp lệ thì hệ thống tiến hành gửi mã xác thực và chuyển sang giao diện nhập mã
5 Người dùng nhập mã xác thực được gửi tới mail trước đó và nhấn “Xác thực”.
6 Nếu mã hợp lệ thì hệ thống chuyển sang màn hình nhập mật khẩu
7 Người dùng nhập mật khẩu mới và sau đó nhấn “Xác nhận”
8 Nếu mật khẩu hợp lệ thì hệ thống chuyển sang màn hình Trang chủ
Alternative Flow 3a Hệ thống kiểm tra email vừa nhập Nếu không tồn tại email thì báo lỗi và kết thúc Usecase.
5a Hệ thống kiểm tra mã vừa nhập Nếu không hợp lệ thì báo lỗi và kết thúc Usecase.
6a Hệ thống kiểm tra m t khẩu vừa nhập Nếu xảy raật khẩu vừa nhập Nếu xảy ra các trường hợp sau đây thì kết thúc Usecase
6a1 M t khẩu mới (New password) và nh p lại m tật khẩu vừa nhập Nếu xảy ra ật khẩu vừa nhập Nếu xảy ra ật khẩu vừa nhập Nếu xảy ra khẩu mới (Re-enter new password) không khớp thì báo lỗi. 6a2 M t khẩu mới ngắn hơn 6 ký tự thì báo lỗi.ật khẩu vừa nhập Nếu xảy ra
Bảng 4.5: Đặc tả use case quên mật khẩu
4.4.3.2 Use case Đăng ký tài khoản
Tên Use-case Đăng ký tài khoản
Tóm tắt Cho phép người dùng tạo tài khoản mới
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Người dùng nhấn vào tuỳ chọn “Đăng ký”.
2 Hệ thống hiển thị giao diện đăng ký tài khoản.
3 Người dùng nhập tài khoản email và mật khẩu.
4 Nếu tài khoản hợp lệ thì hệ thống tiến hành gửi mã xác thực và chuyển sang giao diện nhập mã
5 Người dùng nhập mã xác thực được gửi tới mail trước đó và nhấn “Xác thực”.
6 Nếu mã hợp lệ thì hệ thống chuyển sang màn hình Trang chủ
Alternative Flow 3a1 Hệ thống kiểm tra email vừa nhập Nếu đã tồn tại email thì báo lỗi và kết thúc Usecase
3a2 H thống kiểm tra m t khẩu, nếu không khớp ho cệ ật khẩu vừa nhập Nếu xảy ra ặc ngắn hơn 6 ký tự thì báo lỗi và kết thúc Usecase
5a Hệ thống kiểm tra mã vừa nhập Nếu không hợp lệ thì báo lỗi và kết thúc Usecase
Bảng 4.6: Đặc tả use case đăng ký tài khoản
4.4.3.3 Use case Tra cứu phim – diễn viên
Tên Use-case Tra cứu phim – diễn viên
Tóm tắt Cho phép người dùng tìm kiếm thông tin về phim hoặc diễn viên
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Người dùng nhấn vào tuỳ chọn tìm kiếm.
2 Hệ thống hiển thị giao diện tìm kiếm.
3 Người dùng có thể chọn phim tìm theo hoặc diễn viên (thao tác tương tự nhau).
4 Người dùng nhập chuỗi ký tự cần tìm kiếm
5 Người dùng nhấn xác nhận “Tìm kiếm”.
6 Hệ thống trả về danh sách kết quả phù hợp
Alternative Flow 3a1 Hệ thống kiểm tra chuỗi vừa nhập Nếu chuỗi rỗng thì kết thúc Usecase
Bảng 4.7: Đặc tả use case tra cứu phim, diễn viên
4.4.3.4 Use case Yêu thích phim
Tên Use-case Yêu thích phim
Tóm tắt Cho phép người dùng lưu hoặc xoá phim đang chọn vào danh sách yêu thích
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Người dùng nhấn vào một bộ phim
2 Tại màn hình thông tin phim, người dùng nhấn vào biểu tượng Trái tim (yêu thích).
3 Hệ thống cập nhật phim vào danh sách phim yêu thích.
Alternative Flow 3a Hệ thống kiểm tra nếu danh sách phim yêu thích, nếy đã tồn tại phim thì xoá, ngược lại thêm vào danh sách. Kết thúc use case
Bảng 4.8: Đặc tả use case yêu thích phim
4.4.3.5 Use case Đánh giá phim
Tên Use-case Đánh giá phim
Tóm tắt Cho phép người dùng bình luận và đánh giá phim.
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Người dùng nhấn vào một bộ phim
2 Tại màn hình thông tin phim, người dùng điền bình luận vào ô nội dung, chọn mức đánh giá từ 1 đến 5.
3 Người dùng nhấn vào nút Xác nhận.
4 Hệ thống lưu bình luận của người dùng.
Alternative Flow 3a Hệ thống kiểm tra nếu bình luận trống hoặc đánh giá
= 0 thì báo lỗi Kết thúc use case
Bảng 4.9: Đặc tả use case đánh giá phim
Tên Use-case Xem phim
Tóm tắt Cho phép người dùng xem phim.
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Người dùng nhấn vào một bộ phim
2 Tại màn hình thông tin phim, người dùng nhấn vào áp phích của bộ phim.
3 Hệ thống chuyển sang màn hình xem phim
4 Hệ thống lưu phim hiện tại vào lịch sử xem phim của người dùng.
5 Hệ thống khởi tạo và lấy dữ liệu phim.
6 Hệ thống trình chiếu phim lên giao diện
Alternative Flow 5a Hệ thống thử lấy dữ liệu về phim, nếu lấy thất bại thì báo lỗi Kết thúc use case.
Bảng 4.10: Đặc tả use case xem phim
Tên Use-case Tải phim
Tóm tắt Cho phép người dùng tải phim đang xem.
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Tại màn hình xem phim, người dùng nhấn vào biểu tượng Tải xuống
2 Hệ thống khởi tạo phiên tải xuống và thông báo ra giao diện.
3 Khi tải xuống hoàn tất, hệ thống lưu tệp phim vào thư mục ứng dụng.
4 Kết thúc use case Alternative Flow 1a Nếu đã trong quá trình tải xuống, hệ thống sẽ huỷ phiên tải hiện tại Kết thúc use case.
Bảng 4.11: Đặc tả use case tải phim
4.4.3.8 Use case Xem thông tin phim
Tên Use-case Xem thông tin phim
Tóm tắt Cho phép người dùng xem thông tin chi tiết một bộ phim
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Tại màn hình bất kỳ nếu có thể điều hướng tới màn chi tiết phim, người dùng nhấn vào phim cần xem thông tin.
2 Hệ thống tải tất cả thông tin cần thiết về phim.
3 Người dùng có thể thao tác các trường hợp như xem phim, đánh giá, xem diễn viên trong phim, cảnh nổi bật.
4 Kết thúc use caseAlternative Flow 2a Nếu trong quá trình lấy thông tin lỗi, hệ thống sẽ trở về màn trước và thông báo lỗi Kết thúc use case
Bảng 4.12: Đặc tả use case xem thông tin phim
4.4.3.9 Use case Xem thông tin diễn viên
Tên Use-case Xem thông tin phim
Tóm tắt Cho phép người dùng xem thông tin chi tiết một diễn viên
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Tại màn hình bất kỳ nếu có thể điều hướng tới màn chi tiết diễn viên, người dùng nhấn vào diễn viên cần xem thông tin.
2 Hệ thống tải tất cả thông tin cần thiết về diễn viên.
3 Người dùng có thể thao tác các trường hợp như xem tiểu sử, các phim diễn viên này tham gia.
Alternative Flow 2a Nếu trong quá trình lấy thông tin lỗi, hệ thống sẽ trở về màn trước và thông báo lỗi Kết thúc use case.
Bảng 4.13: Đặc tả use case xem thông tin diễn viên
4.4.3.10 Use case Đổi mật khẩu
Tên Use-case Đổi mật khẩu
Tóm tắt Cho phép người dùng đổi mật khẩu tài khoản
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Tại màn hình Profile, người dùng nhấn tuỳ chọn Đổi mật khẩu.
2 Hệ thống hiển thị hộp thoại mật khẩu mới.
3 Người dùng nhập mật khẩu cũ, mật khẩu mới và nhập lại mật khẩu mới.
4 Người dùng nhấn xác nhận.
5 Hệ thống cập nhật dữ liệu mới
6 Kết thúc Use case Alternative Flow 5a Hệ thống kiểm tra mật khẩu cũ tài khoản, nếu không khớp thì báo lỗi và kết thúc use case.
5b Hệ thống kiểm tra mật khẩu mới, nếu không trùng khớp hoặc ngắn hơn 6 ký tự thì báo lỗi và kết thúc use case.
Bảng 4.14: Đặc tả use case đổi mật khẩu
4.4.3.11 Use case Quản lý yêu thích
Tên Use-case Quản lý yêu thích
Tóm tắt Cho phép người dùng quản lý các bộ phim đã lưu
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Tại màn hình Profile, người dùng nhấn tuỳ chọn
2 Hệ thống chuyển sang giao diện Saved.
3 Người dùng nhấn vào một mục phim trong danh sách, sau đó nhấn huỷ yêu thích.
4 Hệ thống cập nhật dữ liệu mới.
5 Kết thúc Use case Alternative Flow
Bảng 4.15: Đặc tả use case quản lý yêu thích
4.4.3.12 Use case Quản lý lịch sử
Tên Use-case Quản lý lịch sử
Tóm tắt Cho phép người dùng quản lý lịch sử các phim đã xem.
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Tại màn hình Profile, người dùng nhấn tuỳ chọn
2 Hệ thống chuyển sang giao diện History.
3 Người dùng nhấn giữ một mục trong danh sách.
4 Hệ thống hiển thị hộp thoại xác nhận xoá mục.
5 Kết thúc Use case Alternative Flow 4a Nếu người dùng nhấn đồng ý thì hệ thống thực hiện xoá mục phim ra khỏi danh sách, kết thúc use case.
Bảng 4.16: Đặc tả use case quản lý lịch sử
4.4.3.13 Use case Quản lý đánh giá
Tên Use-case Quản lý đánh giá
Tóm tắt Cho phép người dùng quản lý các bình luận của bản thân của tất cả các phim.
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Tại màn hình Profile, người dùng nhấn tuỳ chọn
2 Hệ thống chuyển sang giao diện Review.
3 Người dùng nhấn giữ một mục trong danh sách.
4 Hệ thống hiển thị hộp thoại xác nhận xoá mục.
5 Người dùng nhấn vào một mục trong danh sách.
6 Hệ thống hiển thị thông tin chi tiết của mục đó
7 Người dùng nhấn vào biểu tượng chỉnh sửa
8 Hệ thống hiển thị hộp thoại chỉnh sửa đánh giá
9 Kết thúc Use caseAlternative Flow 4a Nếu người dùng nhấn đồng ý thì hệ thống thực hiện xoá mục ra khỏi danh sách, kết thúc use case.
6a Nếu người dùng nhấn vào áp phích phim trong đánh giá thì hệ thống chuyển sang màn hình xem phim, kết thúc use case.
8a Người dùng nhập thông tin cần chỉnh sửa và nhấn xác nhận
8b Hệ thống kiểm tra điều kiện nhập và cập nhật lại đánh giá Kết thúc use case.
Bảng 4.17: Đặc tả use case quản lý đánh giá
4.4.3.14 Use case Cài đặt ứng dụng
Tên Use-case Cài đặt ứng dụng
Tóm tắt Cho phép người dùng thay đổi ngôn ngữ hoặc chủ đề của ứng dụng
Pre-Condition Hệ thống đang ở trạng thái hoạt động
Main Flow 1 Tại màn hình Profile, người dùng nhấn tuỳ chọn
2 Hệ thống chuyển sang giao diện Settings.
3 Người dùng nhấn vào mục Ngôn ngữ.
4 Hệ thống hiển thị hộp thoại chọn ngôn ngữ.
5 Người dùng nhấn vào công tắc Chủ đề.
6 Hệ thống cập nhật giao diện tương ứng với chủ đề
7 Kết thúc Use case Alternative Flow 3a Nếu người dùng nhất chọn một ngôn ngữ mới, hệ thống sẽ cập nhật lại giao diện tương ứng Kết thúc use case.
Bảng 4.18: Đặc tả use case cài đặt ứng dụng
Sơ đồ hoạt động
4.5.1 Sơ đồ hoạt động cho Xem thông tin phim
Hình 4.5: Xem thông tin phim Activity Diagram
4.5.2 Sơ đồ hoạt động cho Xem phim
Hình 4.6: Xem phim Activity Diagram
4.5.3 Sơ đồ hoạt động cho Gợi ý phim
Thiết kế cơ sở dữ liệu
Hình 4.8: Sơ đồ liên kết các màn hình
4.6.2 Danh sách các bảng dữ liệu
Thứ tự Tên bảng dữ liệu Diễn giải
Mô tả thông tin người dùng gồm Mã người dùng, Tên hiển thị, Email, Mật khẩu, Mã quốc gia.
Mô tả thông tin quốc gia gồm Mã quốc gia, Tên quốc gia, Mã quốc gia trên thế giới theo tiêu chuẩn ISO-3166-2, Tên quốc gia theo tiếng Việt.
Mô tả thông tin đánh giá phim gồm Mã đánh giá, Mã người dùng, Mã phim, Đánh giá phim vào lúc, Điểm số đánh giá, Nội dung đánh giá của người dùng.
Mô tả thông tin lịch sử xem phim của người dùng gồm Mã người dùng, Mã phim, Xem phim vào lúc.
5 FAVOURITE Mô tả thông tin phim yêu thích gồm Mã người dùng, Mã phim, Thời gian thêm.
Mô tả tiêu đề và mô tả phịm theo từng quốc gia gồm Mã phim, Mã quốc gia, Tiêu đề, Miêu tả.
Mô tả thông tin phim gồm Mã phim, ngôn ngữ chính của bộ phim, Điểm số phổ biến của bộ phim, Ngày ra mắt, Ngân sách sản xuất phim, Doanh thu phim, Độ dài phim,
Mã trạng thái của phim, Điểm đánh giá trung bình, Số lượng đánh giá.
8 MOVIE_STATUS Mô tả thông tin trạng thái của phim gồm
Mã trạng thái, Tên trạng thái.
9 DEPARTMENT Mô tả thông tin vai trò của diễn viên trong phim gồm Mã vai trò, Tên vai trò
Mô tả thông tin diễn viên tham gia vào phim gồm Mã vai trò, Mã phim, Mã diễn viên, Tên nhân vật.
Mô tả thông tin các mã định danh trên các cơ sở dữ liệu khác gồm Mã phim, Mã định danh trên TMDB, Mã định danh trên IMDB.
12 MOVIE_GENRES Mô tả thông tin phim thuộc về thể loại phim gồm Mã phim, Mã thể loại.
13 MOVIE_VIDEO Mô tả thông tin về các tư liệu video của phim gồm Mã phim, Mã nguồn phim
14 MOVIE_IMAGE Mô tả thông tin về các tư liệu hình ảnh của phim gồm Mã phim, Mã nguồn ảnh.
Mô tả thông tin của diễn viên gôm Mã diễn viên, Mã định danh của diễn viên trên IMDB, Tên diễn viên, Ngày sinh, Ngày mất, Nơi sinh, Giới tính, Tổng quan về diễn viên, Được biết đến, Mã vai trò được biết đến, Đường dẫn chân dung.
16 GENRES Mô tả thông tin thể loại phim gồm Mã thể loại, Tên thể loại
Mô tả thông tin tư liệu phim gồm Mã tư liệu phim, Mã loại tư liệu phim, Mã tập tin.
Mô tả thông tin tư liệu hình ảnh gồm Mã tư liệu ảnh, Mã loại tư liệu ảnh, Mã tập tin.
Mô tả thông tin tập tin gồm Mã tập tin,Đường dẫn trên hệ thống, Thời gian chỉnh sửa cuối cùng, Kích thước của tập tin.
20 MOVIE_VIDEO_TYPE Mô tả loại tư liệu phim gồm Mã tư liệu phim, Tên loại tự liệu phim.
21 MOVIE_IMAGE_TYPE Mô tả loại tư liệu hình ảnh gồm Mã tư liệu ảnh, Tên loại tư liệu ảnh
Mô tả thông tin dữ liệu thô trước khi đem đi dạy mô hình gồm Mã người dùng, Mã phim, Điểm số đánh giá.
23 PARAMS Mô tả các tham số của hệ thóng gồm Mã tham số, giá trị của tham số
Bảng 4.19: Danh sách các bảng
4.6.3 Mô tả chi tiết các bảng dữ liệu
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng USER
2 Username NVARCHAR(200) Tên người dùng/Tên hiển thị
Thuộc tính là khóa ngoại tham chiếu đến
Bảng 4.20: Mô tả bảng USER
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
1 Id INT PRIMARY Thuộc tính định danh
KEY, NOT NULL cho mỗi bảng ghi trong bảng COUNTRY
2 Name NVARCHAR(50) Tên quốc gia
3 Code VARCHAR (10) Mã quốc gia theo tiêu chuẩn quốc tế
4 Name_Vi NVARCHAR(100) Tên quốc gia theo tiếng Việt
Bảng 4.21: Mô tả bảng COUNTRY
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng REVIEW
Thuộc tính là khóa ngoại tham chiếu đến
Thuộc tính là khóa ngoại tham chiếu đến
4 Timestam p DATETIME Dấu thời gian
5 Rating DECIMAL(3,1) Điểm đánh giá
6 Content NVARCHAR(MAX) Nội dung đánh giá
Bảng 4.22: Mô tả bảng REVIEW
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
1 UserId INT PRIMARY Thuộc tính vừa tham
KEY, FOREIGN KEY, NOT NULL gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng USER
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng MOVIE
3 Timestam p DATETIME Dấu thời gian
Bảng 4.23: Mô tả bảng HISTORY
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng USER
KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng
3 Timestam p DATETIME Dấu thời gian
Bảng 4.24: Mô tả bảng FAVOURITE
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng MOVIE
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng COUNTRY
3 Title NVARCHAR(MAX) Tiêu đề
4 Overview NVARCHAR(MAX) Mô tả
Bảng 4.25: Mô tả bảng MOVIE_LANGUAGE
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảngMOVIE
Thuộc tính là khóa ngoại tham chiếu đến Id của bảng COUNTRY
3 Popularity DECIMAL(5,3) Điểm bổ biến
4 ReleaseDate DATETIME Ngày ra mắt
7 Runtime INT Thời lượng phim
Thuộc tính là khóa ngoại tham chiếu đến Id của bảng MOVIE_STATUS
9 VoteAverage DECIMAL(3,1) Điểm đánh giá trung bình
10 VoteCount INT Mẫu số đánh giá
Bảng 4.26: Mô tả bảng MOVIE
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng MOVIE_STATUS
Bảng 4.27: Mô tả bảng MOVIE_STATUS
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng DEPARTMENT
Bảng 4.28: Mô tả bảng DEPARTMENT
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng MOVIE
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng PERSON
4 Character VARCHAR(100) Đóng trong vai
Bảng 4.29: Mô tả bảng MOVIE_CREDIT
Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính định danh cho mỗi bảng ghi trong bảng MOVIE_EXTENAL_IDS
2 IdTmdb INT Mã số định danh trên
3 IdImdb VARCHAR(100) Mã số định danh trên
Bảng 4.30: Mô tả bảng MOVIE_EXTERNAL_IDS
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng MOVIE
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng GENRES
Bảng 4.31: Mô tả bảng MOVIE_GENRES
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng MOVIE
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng VIDEO
Bảng 4.32: Mô tả bảng MOVIE_VIDEO
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
PRIMARY KEY, FOREIGN KEY, NOT
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng MOVIE
2 ImageId INT PRIMARY KEY, Thuộc tính vừa tham
NULL gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng IMAGE
Bảng 4.33: Mô tả bảng MOVIE_IMAGE
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng PERSON
Mã số định danh trên IMDB
7 Gender SMALLINT Giới tính (1: Nữ, 2: Nam)
MAX) Tổng quan diễn viên
Thuộc tính là khóa ngoại tham chiếu đến Id của bảng DEPARTMENT
MAX) Đường dẫn chân dung
Bảng 4.34: Mô tả bảng PERSON
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng GENRES
2 Name VARCHAR(100) Tên thể loại
Bảng 4.35: Mô tả bảng GENRES
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng VIDEO
Thuộc tính là khóa ngoại tham chiếu đến Id của bảng
Thuộc tính là khóa ngoại tham chiếu đến Id của bảng FILE
Bảng 4.36: Mô tả bảng VIDEO
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
1 Id INT PRIMARY Thuộc tính định danh cho
KEY, NOT NULL mỗi bảng ghi trong bảng IMAGE
Thuộc tính là khóa ngoại tham chiếu đến Id của bảng
Thuộc tính là khóa ngoại tham chiếu đến Id của bảng FILE
Bảng 4.37: Mô tả bảng IMAGE
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng FILE
2 Path NVARCHAR(MAX) Đường dẫn tập tin trên hệ thống
3 LastModified DATETIME Thời gian chỉnh sửa cuối cùng
4 Size INT Kích thước tập tin.
Bảng 4.38: Mô tả bảng FILE
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng
Bảng 4.39: Mô tả bảng MOVIE_VIDEO_TYPE
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
Thuộc tính định danh cho mỗi bảng ghi trong bảng
2 Name VARCHAR(100) Loại hình ảnh
Bảng 4.40: Mô tả bảng MOVIE_IMAGE_TYPE
Thứ tự Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng USER
PRIMARY KEY, FOREIGN KEY, NOT NULL
Thuộc tính vừa tham gia làm khóa chính vừa là khóa ngoại tham chiếu đến khóa chính Id của bảng MOVIE
3 Rating DECIMAL(3,1) Điểm số đánh giá
Bảng 4.41: Mô tả bảng TRAINING
Thứ Thuộc tính Kiểu dữ liệu Ràng buộc Diễn giải tự
Thuộc tính định danh cho mỗi bảng ghi trong bảng PARAMS
2 Value NVARCHAR(MAX) Giá trị của tham số.
Bảng 4.42: Mô tả bảng PARAMS
THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG 87 5.1 Sơ đồ liên kết màn hình
Danh sách các màn hình
STT Tên màn hình Loại màn hình Diễn giải
1 Get started Màn hình chính
Màn hình giới thiệu đầu tiên khi mở ứng dụng
2 Login Màn hình nhập liệu
Cho phép người dùng đăng nhập vào hệ thống
3 Signup Màn hình nhập liệu Cho phép người dùng tạo tài khoản mới
4 Verify signup Màn hình nhập liệu Xác thực để tạo tài khoản mới
5 Forgot pass Màn hình nhập liệu Khôi phục mật khẩu đã quên
6 Verify forgot pass Màn hình nhập liệu
Xác thực là chủ tài khoản đang quên mật khẩu
7 New pass Màn hình nhập liệu Thiết lập mật khẩu mới tài khoản
8 Congrats page Màn hình thông báo
Thông báo thành công khi khôi phục hoặc tạo tài khoản mới
9 Bottom bar Màn hình chính
Cho phép người dùng điều hướng để sử dụng các tính năng chính của ứng dụng
10 Home Màn hình tra cứu Hiển thị danh sách các phim theo từng cụm
11 Search Màn hình tra cứu
Cho phép người dùng tìm kiếm phim hoặc diễn viên
Cho phép người dùng xem phim đã chọn và đánh giá phim
Màn hình tra cứu Màn hình chính
Cho phép cài đặt tài khoản, quản lý phim cá nhân
14 List movie Màn hình tra cứu
Hiển thị danh sách các bộ phim thuộc cụm phim vừa chọn
Màn hình tra cứu Màn hình nhập liệu
Xem thông tin của phim và đánh giá phim
16 Actor detail Màn hình tra cứu Xem thông tin diễn viên
17 Filter search Màn hình nhập liệu
Thiết lập tiêu chuẩn tra cứu cho màn Search
18 Saved Màn hình tra cứu Quản lý danh sách các phim đã yêu thích
19 Review Màn hình tra cứu Quản lý các đánh giá phim của bản thân
20 History Màn hình tra cứu Quản lý lịch sử các phim đã xem
21 Setting Màn hình chính Cài đặt ngôn ngữ và chủ đề ứng dụng
22 Movie search Màn hình tra cứu Danh sách kết quả tìm kiếm phim
23 Actor search Màn hình tra cứu Danh sách kết quả tìm kiếm diễn viên
Bảng 5.1: Danh sách các màn hình
Mô tả chi tiết các màn hình
Hình 5.2: Màn hình Get Started
STT Kiểu Ràng buộc Ý nghĩa
Bảng 5.2: Mô tả đối tượng trên màn hình Get Started
STT Biến cố Xử lý
1 Nhấn nút Get Started Chuyển qua màn hình tiếp theo
Bảng 5.3: Biến cố và xử lý trên màn hình Get Started
STT Kiểu Ràng buộc Ý nghĩa
4 Text Nút quên mật khẩu
Bảng 5.4: Mô tả đối tượng trên màn hình Login
STT Biến cố Xử lý
1 Nhấn nút Login Kiểm tra điều kiện nhập và chuyển sang màn tiếp theo
2 Nhấn forgotpass Chuyển sang màn forgot pass
3 Nhấn Signup Chuyển sang màn sign up
Bảng 5.5: Biến cố và xử lý trên màn hình Login
STT Kiểu Ràng buộc Ý nghĩa
Trường nhập lại mật khẩu
4 TextField Not null Trường nhập tên người dùng
Bảng 5.6: Mô tả đối tượng trên màn hình Signup
STT Biến cố Xử lý
1 Nhấn nút Signup Kiểm tra điều kiện nhập và chuyển sang màn tiếp theo
2 Nhấn nút Login Quay trở về màn Login
Bảng 5.7: Biến cố và xử lý trên màn hình Signup
Hình 5.5: Màn hình Verify Signup
Bảng 5.8: Mô tả đối tượng trên màn hình Verify Signup
STT Biến cố Xử lý
1 Nhấn nút Confirm Kiểm tra mã và chuyển sang màn tiếp theo
2 Nhấn Back Trở về màn trước
Bảng 5.9: Biến cố và xử lý trên màn hình Verify Signup
Hình 5.6: Màn hình Forgot pass
STT Kiểu Ràng buộc Ý nghĩa
Bảng 5.10: Mô tả đối tượng trên màn hình Forgot pass
STT Biến cố Xử lý
1 Nhấn nút Confirm Kiểm tra email và chuyển sang màn tiếp theo
2 Nhấn Login instead? Trở về màn Login
Bảng 5.11: Biến cố và xử lý trên màn hình Forgot pass
5.3.6 Màn hình Verify forgot pass
Hình 5.7: Màn hình Verify forgot pass
STT Kiểu Ràng buộc Ý nghĩa
Bảng 5.12: Mô tả đối tượng trên màn hình Verify forgot pass
STT Biến cố Xử lý
1 Nhấn nút Confirm Kiểm tra mã và chuyển sang màn tiếp theo
2 Nhấn Back Trở về màn trước
Bảng 5.13: Biến cố và xử lý trên màn hình Verify forgot pass
Hình 5.8: Màn hình New pass
STT Kiểu Ràng buộc Ý nghĩa
2 TextField Not null Trường nhập lại mật khẩu
Bảng 5.14: Mô tả đối tượng trên màn hình New pass
STT Biến cố Xử lý
1 Nhấn nút Confirm Kiểm tra điều kiện nhập và chuyển sang màn tiếp theo
Bảng 5.15: Biến cố và xử lý trên màn hình New pass
STT Kiểu Ràng buộc Ý nghĩa
Bảng 5.16: Mô tả đối tượng trên màn hình Congrats
STT Biến cố Xử lý
1 Nhấn nút Get started Chuyển sang màn hình Bottom bar
Bảng 5.17: Biến cố và xử lý trên màn hình Congrats
STT Kiểu Ràng buộc Ý nghĩa
Bảng 5.18: Mô tả đối tượng trên màn hình Home
STT Biến cố Xử lý
1 Nhấn nút Play Chuyển sang màn hình xem phim
2 Vuốt màn hình Lướt qua phim tiếp theo
3 Nhấn See all Chuyển sang màn hình Movie List
4 Nhấn vào mục phim Chuyển sang màn Movie Detail
Bảng 5.19: Biến cố và xử lý trên màn hình Home
Hình 5.11: Màn hình Movie list
STT Kiểu Ràng buộc Ý nghĩa
Bảng 5.20: Mô tả đối tượng trên màn hình Movie list
STT Biến cố Xử lý
1 Nhấn vào 1 mục phim Chuyển sang màn hình Movie detail
Bảng 5.21: Biến cố và xử lý trên màn hình Movie list
Hình 5.12: Màn hình Movie detail
STT Kiểu Ràng buộc Ý nghĩa
2 ListView Danh sách thể loại phim
3 Container Nút yêu thích phim
4 Text Nút mở rộng nội dung
5 Container Các mục diễn viên
6 Slider Danh sách ảnh nổi bật trong phim
7 Card Các mục bình luận
8 Rating Bar Value > 0 Thanh đánh giá
9 TextField Not null Trường nhập đánh giá
Bảng 5.22: Mô tả đối tượng trên màn hình Movie detail
STT Biến cố Xử lý
1 Nhấn vào nút Play Chuyển sang màn hình xem phim
2 Lướt danh sách thể loại Hiển thị thêm các thể loại của phim
3 Nhấn nút yêu thích Lưu phim hiện tại vào Saved
4 Nhấn see more Mở rộng nội dung mô tả phim
5 Nhấn vào mục diễn viên Mở màn hình Actor detail
6 Lướt Slider Hiển thị danh sách các ảnh nổi bật trong phim Nhấn để xem toàn màn hình
7 Nhấn vào một mục bình luận Mở popup bình luận chi tiết
8 Nhấn vào Rating bar Cập nhật số sao đánh giá
9 Nhấn vào Submit Gửi thông tin review và rating lên Server
Bảng 5.23: Biến cố và xử lý trên màn hình Movie detail
Hình 5.13: Màn hình Actor detail
STT Kiểu Ràng buộc Ý nghĩa
Bảng 5.24: Mô tả đối tượng trên màn hình Actor detail
STT Biến cố Xử lý
1 Nhấn vào ảnh đại diện Mở chế độ toàn màn hình
2 Nhấn see more Mở rộng nội dung mô tả diễn viên
3 Nhấn mục phim Mở màn hình Movie detail
Bảng 5.25: Biến cố và xử lý trên màn hình Actor detail
Hình 5.14: Màn hình Actor search
STT Kiểu Ràng buộc Ý nghĩa
Bảng 5.26: Mô tả đối tượng trên màn hình Actor search
STT Biến cố Xử lý
1 Nhấn mục phim Mở màn hình Movie detail
Bảng 5.27: Biến cố và xử lý trên màn hình Actor search
Hình 5.15: Màn hình Search filter
STT Kiểu Ràng buộc Ý nghĩa
3 Rating Bar Value > 0 Thanh đánh giá
4 TextField Not null Trường đánh giá
Bảng 5.28: Mô tả đối tượng trên màn hình Watching
STT Biến cố Xử lý
1 Nhấn vào nút chia sẻ Tạo link chia sẻ phim
2 Nhấn nút tải xuống Tải phim về local
Bảng 5.29: Biến cố và xử lý trên màn hình Watching
STT Kiểu Ràng buộc Ý nghĩa
Bảng 5.30: Mô tả đối tượng trên màn hình Saved
STT Biến cố Xử lý
1 Nhấn vào mục phim Mở màn hình Movie detail
Bảng 5.31: Biến cố và xử lý trên màn hình Saved
STT Kiểu Ràng buộc Ý nghĩa
Bảng 5.32: Mô tả đối tượng trên màn hình Review
STT Biến cố Xử lý
1 Nhấn vào mục đánh giá Mở pop up xem chi tiết đánh giá
2 Nhấn vào icon Edit Mở popup edit đánh giá
3 Nhấn giữ mục đánh giá Mở popup hỏi xoá đánh giá
4 Nhấn vào phim trong mục đánh giá Chuyển tới màn Movie detail
Bảng 5.33: Biến cố và xử lý trên màn hình Review
STT Kiểu Ràng buộc Ý nghĩa
Bảng 5.34: Mô tả đối tượng trên màn hình History
STT Biến cố Xử lý
1 Nhấn vào mục phim Mở màn hình Movie detail
2 Nhấn giữ mục phim Mở popup hỏi xoá history
Bảng 5.35: Biến cố và xử lý trên màn hình History
STT Kiểu Ràng buộc Ý nghĩa
Bảng 5.36: Mô tả đối tượng trên màn hình Settings
STT Biến cố Xử lý
1 Nhấn vào mục ngôn ngữ Mở popup chọn ngôn ngữ
2 Nhấn vào switch chủ đề Đổi chủ đề ứng dụng
Bảng 5.37: Biến cố và xử lý trên màn hình Settings
CÀI ĐẶT VÀ KIỂM THỬ 118 6.1 Kiểm thử phía ứng dụng
Môi trường kiểm thử
Môi trường cài đặt: Android 10.0 hoặc hơn (target API 33), IOS 14 hoặc hơn.
+ Điện thoại cá nhân hệ điều hành Android API 30.
+ IOS Simulator ver 14 trên Macbook M1.
Kết quả kiểm thử
STT Tính năng Mức độ hoàn thiện Ghi chú
2 Tra cứu phim, diễn viên 100%
4 Quản lý phim, đánh giá 100%
8 Quản lý đánh giá, lịch sử, yêu thích 100%
Bảng 6.1: Kết quả kiểm thử
Kiểm thử hệ thống khyến nghị
Môi trường dạy: Visual Studio 2022, Microsoft.ML bản 2.0.1.
+ Máy tính cá nhân Windows 10 Pro.
Hình 6.1: Kết quả đánh giá mô hình bằng đánh giá hồi quy (Regression
Hình 6.2: Tích hợp vào API
Như kết quả cho thấy thì RMSE của mô hình ≈ 0.471 và RSquared ≈ 0.829, cho thấy mô hình gợi ý dựa trên phân rã ma trận đã hoạt động tốt, với mức độ sai số thấp và khả năng giải thích phương sai cao đối với biến mục tiêu.
TỔNG KẾT 121 7.1 Kết quả đạt được
- Hoàn thành tất cả các tính năng chính theo kế hoạch dự kiến được đưa ra.
- Hiểu được thêm về cách hoạt động của hệ thống gợi ý Recommender System cũng như những kiến thức về phân tích dữ liệu, đánh giá mô hình
- Biết cách quản lý mã nguồn và làm việc thông qua Github.
- Cải thiện kỹ năng lập trình, biết cách kiểm tra lỗi và tự sửa lỗi.
- Cải thiện được khả năng đọc tài liệu bằng tiếng Anh.
- Cải thiện kỹ năng làm việc nhóm và giao tiếp ứng xử.
- Các tính năng chưa được tối ưu tốt nên đôi khi xảy ra hiện tượng giật hình.
- Giao diện người dùng chỉ ở mức tạm được.
- Dữ liệu lưu trữ trên MSSQL Azure bị hạn chế về tốc độ phản hồi
- Hệ thống gợi ý chưa thật sự tối ưu trong một vài trường hợp chưa có dữ liệu.
- Chưa đề cập đến vấn đề bản quyền các tác phẩm phim sử dụng trong ứng dụng.
Qua quá trình thực hiện, nhóm nhận thấy những hạn chế của đồ án vẫn còn có thể được cải thiện và được mở rộng thêm nữa Cụ thể như sau:
- Tìm giải pháp training dữ liệu liên tục dựa trên hành vi người dùng.
- Áp dụng thêm nhiều thuật toán, hướng xử lý khác để tìm ra phương pháp
“học” tối ưu nhất cho hệ thống.
- Cải thiện giao diện người dùng trực quan hơn
- Ổn định và tối ưu các tính năng hiện có
- Phát triển thêm tính năng mới như chia sẻ phim, thông báo phim sắp có.
- Đa dạng hoá chủ đề và ngôn ngữ ứng dụng.