Giới thiệu dự án

Trong bối cảnh chuyển đổi số giáo dục toàn cầu, thị trường E-Learning đang ghi nhận mức tăng trưởng kép hàng năm (CAGR) đạt 14.2% giai đoạn 2021–2028. Tuy nhiên, việc chia sẻ tri thức qua các nền tảng mạng xã hội truyền thống bộc lộ nhiều hạn chế nghiêm trọng: cấu trúc bài giảng bị phân mảnh, thiếu công cụ đo lường tiến độ học tập, không thể kiểm soát chất lượng học liệu và thiếu vắng khả năng tương tác học thuật thời gian thực (real-time).

Dự án "Xây dựng hệ thống quản lý khóa học trực tuyến" (Building Online Course Management System - LMS) của nhóm tác giả Bùi Thiện Nhân và Nguyễn Yến Nhi (Khoa Công nghệ Phần mềm, Trường Đại học Công nghệ Thông tin – ĐHQG-HCM, 2023) được nghiên cứu và phát triển nhằm giải quyết triệt để các rào cản trên bằng một nền tảng học tập di động hiện đại, toàn diện và tối ưu hóa trải nghiệm người dùng.

+-----------------------------------------------------------------------------------+
|                           HỆ THỐNG QUẢN LÝ KHÓA HỌC LMS                           |
+-------------------------+-------------------------------+-------------------------+
|    Mobile Client        |        Backend Services       |    AI & Data Services   |
|   (Flutter v3.10+)      |       (NestJS v9.4+ / Node)   |  (Python RecSys / Engine)
| - Giao diện đa nền tảng | - RESTful API Gateway         | - User-Based CF         |
| - WebRTC P2P Streaming  | - Socket.IO Realtime Service  | - Cosine Similarity     |
| - VNPAY SDK Checkout    | - MongoDB v6.0 + Firebase     | - KNN Rating Predictor  |
+-------------------------+-------------------------------+-------------------------+

Mục tiêu dự án

  1. Xây dựng ứng dụng di động đa nền tảng (Cross-platform Mobile App): Cung cấp giao diện trực quan cho học viên và giảng viên trên Android và iOS từ một cơ sở mã (codebase) duy nhất.
  2. Thiết lập kiến trúc Backend hướng module vững chắc: Xử lý logic nghiệp vụ phân quyền, quản lý khóa học, bài giảng đa phương tiện và tổ chức bài kiểm tra trắc nghiệm tự động.
  3. Phát triển công cụ tương tác thời gian thực: Tích hợp giao thức truyền thông hai chiều để bình luận trực tiếp và chia sẻ livestream bài giảng với độ trễ siêu thấp.
  4. Tích hợp mô hình trí tuệ nhân tạo gợi ý khóa học (Recommendation System): Ứng dụng thuật toán lọc cộng tác (Collaborative Filtering) nhằm cá nhân hóa lộ trình học tập cho từng cá nhân.
  5. Đồng bộ cổng thanh toán trực tuyến an toàn: Tích hợp quy trình thanh toán chuẩn hóa qua VNPAY nhằm tự động hóa quy trình ghi danh khóa học.

Cách tiếp cận và phạm vi giải pháp

Hệ thống kết hợp sức mạnh của hệ sinh thái công nghệ tiên tiến: Flutter cho Mobile Client, NestJS (TypeScript) cho tầng Microservices/Backend API, Python cho Recommendation Engine, MongoDB kết hợp Firebase Storage cho tầng dữ liệu và WebRTC / Socket.IO cho truyền thông thời gian thực.

Phạm vi giải pháp tập trung vào môi trường học tập di động, tối ưu hóa năng lực tự học, đánh giá năng lực tự động và cá nhân hóa trải nghiệm. Giới hạn nghiên cứu hiện tại tập trung vào phương thức tương tác Peer-to-Peer (P2P) cho lớp học quy mô nhỏ đến vừa và mô hình lọc cộng tác trên dữ liệu đánh giá dạng tường minh (explicit ratings).


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Tiêu chí so sánh Nền tảng Mạng xã hội Moodle LMS Truyền thống Hệ thống Đề xuất (Nhóm tác giả)
Cấu trúc học liệu Rời rạc, trôi bài viết Phức tạp, giao diện cồng kềnh Module hóa (Khóa học -> Section -> Lesson)
Trải nghiệm Mobile Tốt nhưng không chuyên biệt Kém tối ưu trên di động Native-like mượt mà với Flutter Engine
Tương tác Realtime Bình luận đơn thuần Không hỗ trợ native WebRTC Socket.IO Chat + WebRTC Video Streaming
Cá nhân hóa (AI) Thuật toán câu view/tương tác Plugin rời rạc, khó cấu hình Collaborative Filtering tích hợp sẵn
Thanh toán nội địa Thủ công / Chuyển khoản Phức tạp qua cổng quốc tế Cổng VNPAY QR/Thẻ nội địa chuẩn IPN

Yêu cầu người dùng theo mô hình MoSCoW

  • Must-have (Bắt buộc): Quản lý xác thực (JWT Auth), xem video bài giảng, làm bài kiểm tra trắc nghiệm và tính điểm tự động, thanh toán học phí qua VNPAY, đề xuất khóa học tương tự.
  • Should-have (Cần có): Livestream bài giảng thời gian thực qua WebRTC, phòng chat/bình luận realtime qua Socket.IO, cập nhật hồ sơ và lịch sử học tập.
  • Could-have (Có thể có): Tích hợp tìm kiếm tin tức chuyên ngành thông qua Google API Custom Search, hỗ trợ đa ngôn ngữ.
  • Won't-have (Chưa thực hiện): Chấm điểm tự luận bằng AI, xuất chứng chỉ số Blockchain trong phiên bản này.

Thiết kế hệ thống

Danh mục công nghệ (Technology Stack)

  • Frontend Client: Flutter v3.10+ (Dart v3.0+), Provider/BLoC State Management, WebRTC Native Client SDK.
  • Backend API Server: NestJS v9.4+ (Node.js v18 LTS), TypeScript v5.0, Mongoose ODM, Class-Validator, JWT Passport.
  • Realtime Communication: Socket.IO v4.6+, WebRTC (STUN Server stun:stun.l.google.com:19302).
  • AI Recommendation Engine: Python v3.10, NumPy, Pandas, Scikit-learn (Flask/FastAPI microservice).
  • Database & Storage: MongoDB v6.0 Community Server (Dữ liệu phi quan hệ BSON), Firebase Cloud Storage (Lưu trữ video, hình ảnh, tài liệu PDF).
  • Payment Gateway: VNPAY Sandbox/Production API (Chuẩn mã hóa SHA-256/HMAC-SHA512).

Thiết kế cơ sở dữ liệu (Database Schema)

Hệ thống sử dụng MongoDB để quản lý các thực thể dữ liệu linh hoạt, bao gồm các bảng chính:

+------------------+       +-------------------+       +--------------------+
|      User        | 1   n |      Course       | 1   n |      Section       |
|------------------|-------|-------------------|-------|--------------------|
| _id: ObjectId    |       | _id: ObjectId     |       | _id: ObjectId      |
| email: string    |       | title: string     |       | courseId: ObjectId |
| password: string |       | teacherId: Object |       | title: string      |
| role: string     |       | price: number     |       | order: number      |
+------------------+       +-------------------+       +--------------------+
                                     | 1                         | 1
                                     | n                         | n
                           +-------------------+       +--------------------+
                           |    Rate/Comment   |       |       Lesson       |
                           |-------------------|       |--------------------|
                           | _id: ObjectId     |       | _id: ObjectId      |
                           | userId: ObjectId  |       | sectionId: Object  |
                           | rating: number    |       | videoUrl: string   |
                           | content: string   |       | duration: number   |
                           +-------------------+       +--------------------+
  • User: Lưu trữ danh tính, email xác thực, mật khẩu băm bcrypt, vai trò (student, teacher, admin).
  • Course, Section, Lesson: Cấu trúc phân cấp 3 tầng của khóa học, liên kết khóa ngoại bằng ObjectId.
  • Exam, Question, Result: Lưu trữ ngân hàng câu hỏi, đáp án đúng/sai, điểm số và thời gian làm bài của học viên.
  • Rate, Comment, History, RecentCourse: Lưu vết hành vi người dùng làm đầu vào cho hệ thống gợi ý.

Thiết kế API Endpoints chuẩn RESTful

  • POST /api/v1/auth/signup & POST /api/v1/auth/signin: Xác thực danh tính và phát hành JWT Token.
  • GET /api/v1/courses/recommendations: Nhận danh sách gợi ý Top-N khóa học dựa trên thuật toán Collaborative Filtering.
  • POST /api/v1/payment/vnpay/create-url: Khởi tạo liên kết giao dịch và chữ ký bảo mật gửi tới VNPAY.
  • GET /api/v1/payment/vnpay/ipn: Webhook tiếp nhận và xử lý cập nhật trạng thái thanh toán từ máy chủ VNPAY.
+-----------+            +---------------+            +-------------+
|  Flutter  | --(1) Req->| NestJS Server | --(2) URL->| VNPAY GW    |
|  Client   | <-(3) Pay--|               |            |             |
|           | --(4) Web->|               | <-(5) IPN--|             |
+-----------+            +---------------+            +-------------+

Phương pháp luận phát triển (Methodology)

Dự án áp dụng mô hình Agile/Scrum với chu kỳ Sprint 2 tuần/lần, kết hợp quy trình tích hợp liên tục (CI/CD) qua GitHub Actions:

  • Phase 1 (Tuần 1–3): Khảo sát yêu cầu, thiết kế mô hình thực thể dữ liệu NoSQL, xây dựng UI/UX trên Figma.
  • Phase 2 (Tuần 4–7): Xây dựng Core API NestJS, quản lý khóa học, tích hợp xác thực JWT, phát triển giao diện Flutter.
  • Phase 3 (Tuần 8–11): Cài đặt Socket.IO, cấu hình WebRTC Streaming, xây dựng thuật toán Collaborative Filtering bằng Python.
  • Phase 4 (Tuần 12–14): Tích hợp cổng thanh toán VNPAY, kiểm thử chức năng, kiểm thử tải và tối ưu độ trễ.
  • Phase 5 (Tuần 15–16): UAT (User Acceptance Testing), đóng gói ứng dụng di động và hoàn thiện khóa luận.

Implementation và kết quả

Quy trình hiện thực hóa các thuật toán then chốt

Thuật toán Đề xuất Lọc cộng tác dựa trên người dùng (User-Based Collaborative Filtering)

Hệ thống sử dụng kỹ thuật chuẩn hóa trừ giá trị trung bình (Mean-centering normalization) để triệt tiêu thiên vị đánh giá giữa người dùng khắt khe và người dùng dễ tính, sau đó tính toán độ tương đồng Cosine giữa vector đánh giá của các người dùng.

Công thức tính toán độ tương đồng Cosine:

$$\text{similarity}(u, v) = \frac{\sum_{i \in I_{uv}} (r_{u,i} - \bar{r}u)(r{v,i} - \bar{r}v)}{\sqrt{\sum{i \in I_{uv}} (r_{u,i} - \bar{r}u)^2} \cdot \sqrt{\sum{i \in I_{uv}} (r_{v,i} - \bar{r}_v)^2}}$$

Dự đoán mức độ yêu thích của người dùng $u$ cho khóa học $i$ chưa học thông qua $k$ người dùng tương đồng nhất (K-Nearest Neighbors - KNN):

$$\hat{r}{u,i} = \bar{r}u + \frac{\sum{v \in N_k(u)} \text{similarity}(u, v) \cdot (r{v,i} - \bar{r}v)}{\sum{v \in N_k(u)} |\text{similarity}(u, v)|}$$

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

class UserBasedCollaborativeFiltering:
    def __init__(self, n_neighbors=2):
        self.k = n_neighbors
        self.user_means = None
        self.norm_matrix = None
        self.sim_matrix = None
        
    def fit(self, R):
        # R: Ma trận đánh giá User-Item gốc (np.nan cho giá trị chưa đánh giá)
        n_users, n_items = R.shape
        self.user_means = np.nanmean(R, axis=1, keepdims=True)
        # Bước 1 & 2: Chuẩn hóa Mean-Centering
        R_centered = R - self.user_means
        # Bước 3: Điền 0 vào các ô trống (Sparse Matrix Representation)
        self.norm_matrix = np.nan_to_num(R_centered, nan=0.0)
        # Tính toán ma trận tương đồng Cosine giữa các người dùng
        self.sim_matrix = cosine_similarity(self.norm_matrix)
        return self

    def predict_rating(self, user_idx, item_idx):
        # Lấy danh sách người dùng đã đánh giá item_idx
        rated_users = np.where(self.norm_matrix[:, item_idx] != 0)[0]
        if len(rated_users) == 0:
            return float(self.user_means[user_idx])
            
        # Tìm k người dùng có độ tương đồng cao nhất
        sims = self.sim_matrix[user_idx, rated_users]
        top_k_indices = np.argsort(sims)[::-1][:self.k]
        
        selected_sims = sims[top_k_indices]
        selected_ratings = self.norm_matrix[rated_users[top_k_indices], item_idx]
        
        sim_sum = np.sum(np.abs(selected_sims))
        if sim_sum == 0:
            return float(self.user_means[user_idx])
            
        pred_normalized = np.dot(selected_sims, selected_ratings) / sim_sum
        return float(self.user_means[user_idx] + pred_normalized)

Xử lý tương tác thời gian thực với Socket.IO và WebRTC

Trong NestJS, WebSocket Gateway được khởi tạo nhằm quản lý kết nối signaling giữa các peer và điều phối luồng tin nhắn bình luận tức thời:

import { WebSocketGateway, SubscribeMessage, MessageBody, WebSocketServer, ConnectedSocket } from '@nestjs/websockets';
import { Server, Socket } from 'socket.io';

@WebSocketGateway({ cors: { origin: '*' }, namespace: '/learning' })
export class RealtimeLearningGateway {
  @WebSocketServer()
  server: Server;

  @SubscribeMessage('sendComment')
  handleComment(@MessageBody() payload: { courseId: string; userId: string; content: string }): void {
    // Phát tin nhắn trực tiếp đến room của khóa học trong thời gian thực
    this.server.to(payload.courseId).emit('newComment', {
      ...payload,
      timestamp: new Date().toISOString(),
    });
  }

  @SubscribeMessage('webrtcOffer')
  handleWebRtcOffer(@ConnectedSocket() client: Socket, @MessageBody() payload: { targetPeer: string; sdp: any }): void {
    client.to(payload.targetPeer).emit('webrtcOffer', { sdp: payload.sdp, from: client.id });
  }
}

Kiểm thử và đánh giá hiệu năng (Testing & Validation)

+-----------------------------------------------------------------------------------+
|                        KẾT QUẢ KIỂM THỬ TẢI HỆ THỐNG (JMETER)                     |
+----------------------+--------------------+--------------------+------------------+
|  Số lượng Requests   | Thời gian phản hồi |  Tỷ lệ lỗi HTTP    | Throughput TB    |
|   15.000 requests    |   112ms (Trung bình)|     0.00%          | 420 req/sec      |
+----------------------+--------------------+--------------------+------------------+
  1. Kiểm thử tải Backend (JMeter Load Test):
    • Kịch bản: Mô phỏng 200 người dùng ảo truy cập đồng thời vào các API tải danh sách bài học, gửi bình luận và lấy gợi ý khóa học.
    • Kết quả: Tỷ lệ lỗi 0.00%, thời gian phản hồi trung bình đạt 112ms, throughput đạt 420 req/giây.
  2. Độ chính xác mô hình đề xuất (RecSys Benchmark):
    • Đánh giá trên tập dữ liệu đánh giá 5 sao với độ thưa (sparsity) 88.5%.
    • Điểm số Root Mean Squared Error (RMSE) đạt 0.782 và Mean Absolute Error (MAE) đạt 0.614, cho thấy khả năng dự đoán sát sao với điểm đánh giá thực tế của học viên.
  3. Hiệu năng truyền phát trực tiếp (WebRTC Metrics):
    • Độ trễ truyền tín hiệu âm thanh và hình ảnh P2P đạt mức dưới 250ms trong điều kiện mạng nội địa tiêu chuẩn, suy hao gói tin (packet loss) < 1.2%.

Đổi mới và đóng góp

  1. Kiến trúc tích hợp đa công nghệ linh hoạt: Kết hợp thành công NestJS hiệu năng cao với framework di động Flutter, giải quyết bài toán đồng bộ dữ liệu đa nền tảng và cắt giảm 50% thời gian bảo trì mã nguồn client.
  2. Cá nhân hóa trải nghiệm với User-Based Collaborative Filtering: Áp dụng kỹ thuật trừ trung bình cá nhân kết hợp ma trận thưa, giúp giảm thiểu chi phí lưu trữ bộ nhớ và mang lại gợi ý chuẩn xác theo nhóm sở thích tương đồng.
  3. Môi trường học tập tương tác hai chiều toàn diện: Tích hợp trực tiếp lớp học video WebRTC P2P và bình luận Socket.IO ngay trên ứng dụng di động mà không cần phụ thuộc vào dịch vụ bên thứ ba tốn phí.
  4. Tự động hóa quy trình thương mại hóa giáo dục: Chuẩn hóa quy trình giao dịch qua VNPAY với cơ chế bảo mật mã hóa và xác thực dữ liệu tức thời (IPN Checksum), bảo vệ quyền lợi người học và tác giả khóa học.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế

  • Học tập cá nhân hóa: Học viên đăng ký tài khoản, tham gia các khóa học lập trình, hoàn thành bài kiểm tra trắc nghiệm cuối chương để mở khóa bài học tiếp theo. Hệ thống tự động phân tích điểm số và đánh giá để đề xuất các khóa nâng cao phù hợp.
  • Lớp học trực tiếp tương tác cao: Giảng viên mở phiên livestream giải đáp thắc mắc trước kỳ thi; học viên kết nối xem luồng trực tiếp với độ trễ thấp và đặt câu hỏi qua khung chat thời gian thực.
+-----------------------------------------------------------------------------------+
|                        MÔ HÌNH TRIỂN KHAI HỆ THỐNG CLOUD                          |
+-----------------------------------------------------------------------------------+
|                                 [ Cloudflare CDN ]                                |
|                                         |                                         |
|                             [ NGINX Reverse Proxy ]                               |
|                                         |                                         |
|           +-----------------------------+-----------------------------+           |
|           |                                                           |           |
|   [ NestJS Backend Container ]                             [ Python RecSys Engine]|
|   (Docker / Node.js 18 LTS)                                (Docker Microservice)  |
|           |                                                           |           |
|           +-----------------------------+-----------------------------+           |
|                                         |                                         |
|                           [ MongoDB v6.0 ReplicaSet ]                             |
+-----------------------------------------------------------------------------------+

Yêu cầu triển khai và khả năng mở rộng

  • Môi trường máy chủ khuyến nghị: Ubuntu 22.04 LTS, tối thiểu 4 vCPU, 8GB RAM, Docker Engine v24+, Nginx Reverse Proxy làm cổng cân bằng tải.
  • Khả năng mở rộng (Scalability): Tầng logic NestJS dạng Stateless dễ dàng mở rộng theo chiều ngang (Horizontal Scaling) thông qua Docker Swarm hoặc Kubernetes. Tầng cơ sở dữ liệu MongoDB hỗ trợ cấu hình Replica SetSharding khi dữ liệu người dùng tăng trưởng vượt bậc.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Vấn đề khởi đầu lạnh (Cold-Start Problem): Người dùng mới hoặc khóa học mới chưa có lịch sử đánh giá sẽ khó nhận được gợi ý chính xác từ thuật toán Collaborative Filtering thuần túy.
  • Giới hạn mô hình WebRTC P2P: Mô hình truyền phát điểm-điểm (P2P) tiêu tốn nhiều băng thông của giảng viên khi số lượng học viên cùng tham gia livestream vượt quá 10–15 người.

Hướng phát triển tương lai

  • Nâng cấp Hệ thống Đề xuất lai (Hybrid Recommendation System): Kết hợp Collaborative Filtering với Content-Based Filtering và mô hình học sâu (Deep Neural Networks / Matrix Factorization) để triệt tiêu điểm yếu Cold-Start.
  • Tích hợp kiến trúc Media Server (SFU/MCU): Sử dụng các giải pháp như Mediasoup hoặc Kurento Media Server để hỗ trợ các phòng học trực tuyến quy mô hàng trăm học viên đồng thời.
  • Ứng dụng Trí tuệ nhân tạo tạo sinh (Generative AI): Tích hợp trợ lý ảo thông minh giải đáp câu hỏi của học viên 24/7 dựa trên nội dung bài giảng.

Đối tượng hưởng lợi

  • Sinh viên & Người tự học: Tiếp cận lộ trình học tập có cấu trúc chặt chẽ, nhận gợi ý khóa học phù hợp với năng lực và sở thích, tương tác trực tiếp với người dạy.
  • Giảng viên & Nhà sáng tạo nội dung: Sở hữu công cụ quản lý khóa học, tổ chức thi trắc nghiệm tự động, chia sẻ video bài giảng và thương mại hóa kiến thức an toàn.
  • Doanh nghiệp & Đơn vị đào tạo: Tiết kiệm hơn 60% chi phí bản quyền so với việc thuê các nền tảng LMS đóng gói quốc tế, chủ động quản trị dữ liệu nội bộ.
  • Lập trình viên & Nhà nghiên cứu: Tham khảo kiến trúc kết hợp Flutter, NestJS và mô hình toán học giải quyết bài toán gợi ý khóa học trong thực tế.

Câu hỏi thường gặp

1. Hệ thống cần cấu hình tối thiểu như thế nào để triển khai?

Hệ thống backend yêu cầu máy chủ chạy hệ điều hành Linux (khuyên dùng Ubuntu 20.04/22.04 LTS), cài đặt Docker & Docker-Compose, RAM tối thiểu 4GB cho môi trường phát triển và 8GB cho môi trường sản xuất. Ứng dụng di động Flutter hỗ trợ hệ điều hành Android từ phiên bản 6.0 (API level 23) và iOS từ phiên bản 12.0 trở lên.

2. Hệ thống giải quyết bài toán ma trận đánh giá bị thưa (Sparse Matrix) như thế nào?

Để xử lý ma trận thưa khi người dùng chỉ đánh giá một số lượng nhỏ khóa học, hệ thống áp dụng kỹ thuật chuẩn hóa Mean-Centering (trừ điểm đánh giá cho điểm trung bình của người dùng), sau đó gán giá trị 0 cho các vị trí chưa đánh giá. Giải pháp này giúp giữ nguyên tính chất trung hòa của các mục chưa khám phá và tối ưu hóa không gian tính toán ma trận tương đồng Cosine.

3. Quy trình thanh toán qua VNPAY có đảm bảo an toàn không?

Quy trình thanh toán được xây dựng theo tiêu chuẩn bảo mật cao của VNPAY. Mọi tham số giao dịch gửi đi và nhận về đều được tạo mã kiểm tra toàn vẹn (checksum) bằng thuật toán mã hóa một chiều HMAC-SHA512 với bí mật thương lượng (Secret Key). Cơ chế Webhook IPN xử lý bất đồng bộ giữa máy chủ LMS và máy chủ VNPAY giúp loại bỏ nguy cơ gian lận đơn hàng.

4. Chi phí vận hành và bảo trì hệ thống ước tính là bao nhiêu?

Nhờ tận dụng các công nghệ mã nguồn mở (NestJS, Flutter, MongoDB Community Server) và hạ tầng lưu trữ đám mây linh hoạt, chi phí duy trì hạ tầng cho quy mô 5.000 người dùng hoạt động hàng tháng dao động khoảng 30–50 USD/tháng cho chi phí VPS và dung lượng lưu trữ Firebase.

5. WebRTC trên di động có hoạt động được qua mạng 4G/5G hoặc tường lửa phức tạp không?

Hệ thống sử dụng STUN Server công cộng của Google (stun.l.google.com:19302) để giải quyết địa chỉ NAT. Để đảm bảo khả năng kết nối 100% qua các môi trường tường lửa nghiêm ngặt (Symmetric NAT), hệ thống có thể mở rộng bổ sung máy chủ TURN (Traversal Using Relays around NAT) như Coturn.


Kết luận

Đồ án tốt nghiệp "Xây dựng hệ thống quản lý khóa học trực tuyến" của nhóm tác giả Trường Đại học Công nghệ Thông tin – ĐHQG-HCM đã giải quyết bài toán số hóa giáo dục di động. Bằng việc kết hợp kiến trúc đa nền tảng Flutter - NestJS, công nghệ giao tiếp thời gian thực WebRTC / Socket.IO và thuật toán thông minh User-Based Collaborative Filtering, hệ thống mang lại một môi trường học tập linh hoạt, có tính tổ chức cao và cá nhân hóa sâu sắc. Đề tài mở ra tiềm năng ứng dụng thực tiễn lớn cho các cơ sở đào tạo, trường học và trung tâm giáo dục trong kỷ nguyên chuyển đổi số.