1. Trang chủ
  2. » Luận Văn - Báo Cáo

Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội

185 173 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Xây Dựng Hệ Quản Trị Đào Tạo Tích Hợp Mạng Xã Hội
Tác giả Vương Chí Cường, Trần Lê Anh Quân
Người hướng dẫn TS. Phan Trọng Nhân
Trường học Đại học Bách Khoa Thành phố Hồ Chí Minh
Chuyên ngành Khoa học máy tính
Thể loại luận văn tốt nghiệp
Năm xuất bản 2021
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 185
Dung lượng 3,37 MB

Cấu trúc

  • 1.1 Đặt vấn đề (20)
  • 1.2 Mục tiêu đề tài (20)
  • 1.3 Khảo sát các hệ thống liên quan (21)
  • 2.1 Cơ sở lý thuyết (22)
    • 2.1.1 Kiến trúc Web (22)
    • 2.1.2 REST (23)
    • 2.1.3 Tìm kiếm văn bản (24)
    • 2.1.4 Hệ thống giới thiệu (27)
    • 2.1.5 Tìm kiếm theo tương đồng ngữ nghĩa (32)
  • 2.2 Công nghệ sử dụng (35)
    • 2.2.1 Front-end: VueJS (35)
    • 2.2.2 Back-end: NestJS (39)
    • 2.2.3 Database: PostgreSQL (40)
    • 2.2.4 ActionML (40)
    • 2.2.5 ElasticSearch (40)
    • 2.2.6 FastAPI (41)
  • 3.1 Functional requirements (42)
  • 3.2 Non-functional requirements (48)
  • 4.1 Chỉnh sửa thông tin cá nhân (48)
    • 4.1.1 Kịch bản (48)
    • 4.1.2 Đặc tả chi tiết (48)
  • 4.2 Thay đổi ảnh đại diện (49)
    • 4.2.1 Kịch bản (49)
    • 4.2.2 Đặc tả chi tiết (49)
  • 4.3 Xem các thông tin metadata cá nhân (50)
    • 4.3.1 Kịch bản (50)
    • 4.3.2 Đặc tả chi tiết (50)
  • 4.4 Kết bạn (50)
    • 4.4.1 Kịch bản (50)
    • 4.4.2 Đặc tả chi tiết (50)
  • 4.5 Nhắn tin riêng tư (trực tiếp) (51)
    • 4.5.1 Kịch bản (51)
    • 4.6.1 Kịch bản (52)
    • 4.6.2 Đặc tả chi tiết (52)
  • 4.7 Yêu cầu tham gia Khóa học (52)
    • 4.7.1 Kịch bản (52)
    • 4.7.2 Đặc tả chi tiết (53)
  • 4.8 Yêu cầu tham gia Nhóm (53)
    • 4.8.1 Kịch bản (53)
    • 4.8.2 Đặc tả chi tiết (53)
  • 4.9 Tạo Khóa học (54)
    • 4.9.1 Kịch bản (54)
    • 4.9.2 Đặc tả chi tiết (54)
  • 4.10 Chỉnh sửa thông tin của Khóa học (55)
    • 4.10.1 Kịch bản (55)
    • 4.10.2 Đặc tả chi tiết (55)
  • 4.11 Chỉnh sửa phần mô tả tổng quan của Khóa học (56)
    • 4.11.1 Kịch bản (56)
    • 4.11.2 Đặc tả chi tiết (56)
  • 4.12 Liên kết Nhóm với Khóa học (57)
    • 4.12.1 Kịch bản (57)
    • 4.12.2 Đặc tả chi tiết (57)
  • 4.13 Gỡ liên kết Nhóm với Khóa học (58)
    • 4.13.1 Kịch bản (58)
    • 4.13.2 Đặc tả chi tiết (58)
  • 4.14 Thêm thành viên vào Khóa học (58)
    • 4.14.1 Kịch bản (58)
    • 4.14.2 Đặc tả chi tiết (58)
  • 4.15 Xóa thành viên khỏi Khóa học (59)
    • 4.15.1 Kịch bản (59)
    • 4.15.2 Đặc tả chi tiết (60)
  • 4.16 Thay đổi vai trò của một thành viên trong Khóa học (60)
    • 4.16.1 Kịch bản (60)
    • 4.16.2 Đặc tả chi tiết (60)
  • 4.17 Chấp nhận/từ chối yêu cầu tham gia Khóa học (61)
    • 4.17.1 Kịch bản (61)
    • 4.17.2 Đặc tả chi tiết (61)
  • 4.18 Thêm phần học trong giáo trình của Khóa học (62)
    • 4.18.1 Kịch bản (62)
    • 4.18.2 Đặc tả chi tiết (62)
  • 4.19 Chỉnh sửa phần học trong giáo trình của Khóa học (63)
    • 4.19.1 Kịch bản (63)
    • 4.20.2 Đặc tả chi tiết (64)
  • 4.21 Thêm bài học trong giáo trình của Khóa học (64)
    • 4.21.1 Kịch bản (64)
    • 4.21.2 Đặc tả chi tiết (64)
  • 4.22 Xóa bài học trong giáo trình của Khóa học (65)
    • 4.22.1 Kịch bản (65)
    • 4.22.2 Đặc tả chi tiết (65)
  • 4.23 Chỉnh sửa phần mô tả cho bài học trong giáo trình của Khóa học (66)
    • 4.23.1 Kịch bản (66)
    • 4.23.2 Đặc tả chi tiết (66)
  • 4.24 Thêm tập tin đính kèm cho bài học trong giáo trình của Khóa học (67)
    • 4.24.1 Kịch bản (67)
    • 4.24.2 Đặc tả chi tiết (67)
  • 4.25 Xóa tập tin đính kèm cho bài học trong giáo trình của Khóa học (67)
    • 4.25.1 Kịch bản (67)
    • 4.25.2 Đặc tả chi tiết (68)
  • 4.26 Tải video lên cho bài học loại Video trong giáo trình của Khóa học (68)
    • 4.26.1 Kịch bản (68)
    • 4.26.2 Đặc tả chi tiết (68)
  • 4.27 Chỉnh sửa thuộc tính cho bài học loại Quiz trong giáo trình của một Khóa học (69)
    • 4.27.1 Kịch bản (69)
    • 4.27.2 Đặc tả chi tiết (69)
  • 4.28 Thiết lập Quiz cho bài học loại Quiz trong giáo trình của Khóa học (70)
    • 4.28.1 Kịch bản (70)
    • 4.28.2 Đặc tả chi tiết (70)
  • 4.29 Chỉnh sửa thuộc tính cho bài học loại Bài tập lớn trong giáo trình của một Khóa học (70)
    • 4.29.1 Kịch bản (70)
    • 4.29.2 Đặc tả chi tiết (71)
  • 4.30 Chấm điểm bài học loại Bài tập lớn cho các học viên trong Khóa học (71)
    • 4.30.1 Kịch bản (71)
    • 4.30.2 Đặc tả chi tiết (71)
  • 4.31 Thêm Thành tích cho Khóa học (72)
    • 4.31.1 Kịch bản (72)
    • 4.31.2 Đặc tả chi tiết (72)
  • 4.32 Truy xuất tài nguyên khóa học (73)
    • 4.32.1 Kịch bản (73)
    • 4.32.2 Đặc tả chi tiết (73)
  • 4.33 Đánh giá khóa học (74)
    • 4.33.1 Kịch bản (74)
    • 4.33.2 Đặc tả chi tiết (74)
    • 4.34.2 Đặc tả chi tiết (75)
  • 4.35 Trả lời câu hỏi trong một bài học của Khóa học hoặc của Nhóm (76)
    • 4.35.1 Kịch bản (76)
    • 4.35.2 Đặc tả chi tiết (76)
  • 4.36 Upvote/downvote một câu hỏi/câu trả lời trong một bài học của Khóa học hoặc của Nhóm (76)
    • 4.36.1 Kịch bản (76)
    • 4.36.2 Đặc tả chi tiết (77)
  • 4.37 Tạo nhóm (77)
    • 4.37.1 Kịch bản (77)
    • 4.37.2 Đặc tả chi tiết (77)
  • 4.38 Chỉnh sửa thông tin của Nhóm (78)
    • 4.38.1 Kịch bản (78)
    • 4.38.2 Đặc tả chi tiết (78)
  • 4.39 Thêm luật lệ cho Nhóm (79)
    • 4.39.1 Kịch bản (79)
    • 4.39.2 Đặc tả chi tiết (79)
  • 4.40 Chỉnh sửa luật lệ của Nhóm (80)
    • 4.40.1 Kịch bản (80)
    • 4.40.2 Đặc tả chi tiết (80)
  • 4.41 Xóa bỏ luật lệ của Nhóm (80)
    • 4.41.1 Kịch bản (80)
    • 4.41.2 Đặc tả chi tiết (80)
  • 4.42 Thay đổi vai trò của thành viên trong Nhóm (81)
    • 4.42.1 Kịch bản (81)
    • 4.42.2 Đặc tả chi tiết (81)
  • 4.43 Chấp nhận/từ chối yêu cầu tham gia Nhóm (82)
    • 4.43.1 Kịch bản (82)
    • 4.43.2 Đặc tả chi tiết (82)
  • 4.44 Xóa nhóm (82)
    • 4.44.1 Sơ đồ use-case (83)
    • 4.44.2 Kịch bản (83)
    • 4.44.3 Đặc tả chi tiết (83)
  • 4.45 Thêm bài viết/bình luận trong Nhóm (83)
    • 4.45.1 Kịch bản (83)
    • 4.45.2 Đặc tả chi tiết (83)
  • 4.46 Chỉnh sửa bài viết/bình luận trong Nhóm (84)
    • 4.46.1 Kịch bản (84)
    • 4.46.2 Đặc tả chi tiết (84)
  • 4.47 Xóa bài viết/bình luận trong Nhóm (85)
    • 4.48.1 Kịch bản (86)
    • 4.48.2 Đặc tả chi tiết (86)
  • 4.49 Rời Nhóm (86)
    • 4.49.1 Kịch bản (86)
    • 4.49.2 Đặc tả chi tiết (86)
  • 4.50 Phân tích tiến độ học viên (87)
    • 4.50.1 Kịch bản (87)
    • 4.50.2 Đặc tả chi tiết (87)
  • 4.51 Phân tích mức độ tham gia của học viên (88)
    • 4.51.1 Kịch bản (88)
    • 4.51.2 Đặc tả chi tiết (89)
  • 4.52 Phân tích chất lượng khóa học (90)
    • 4.52.1 Kịch bản (90)
    • 4.52.2 Đặc tả chi tiết (90)
  • 5.1 Entity Relationship Diagram (ERD) (90)
    • 5.1.1 Sơ đồ thực thể (91)
    • 5.1.2 Thiết kế luận lý (95)
  • 5.2 Kiến trúc hệ thống (114)
  • 6.1 REST API (116)
  • 6.2 Cơ sở dữ liệu (118)
    • 6.2.1 Sử dụng kiểu dữ liệu mở rộng (118)
    • 6.2.2 Phi chuẩn hóa dữ liệu (121)
  • 6.3 Sắp xếp dữ liệu người dùng (124)
  • 6.4 Tìm kiếm (127)
    • 6.4.1 Xây dựng index (127)
    • 6.4.2 Đồng bộ dữ liệu (133)
    • 6.4.3 Truy vấn kết quả (136)
  • 6.5 Hệ thống giới thiệu (137)
    • 6.5.1 Thử nghiệm (137)
    • 6.5.2 Tích hợp vào hệ thống (139)
    • 6.5.3 Hướng phát triển trong tương lai (142)
  • 6.6 Tìm kiếm tương đồng ngữ nghĩa (143)
    • 6.6.1 Thử nghiệm (143)
    • 6.6.2 Tích hợp vào hệ thống (146)
  • 6.7 Giao diện (146)
    • 6.7.1 Giao diện đăng nhập, đăng ký (147)
    • 6.7.2 Giao diện trang Dashboard (147)
    • 6.7.3 Giao diện trang Khóa học (148)
    • 6.7.6 Giao diện của Bảng điều khiển Khóa học (156)
    • 6.7.7 Giao diện trang Nhóm (165)
    • 6.7.8 Giao diện bên trong một Nhóm (166)
    • 6.7.9 Giao diện của Bảng điều khiển Nhóm (168)
    • 6.7.10 Giao diện trang Thông tin cá nhân của người dùng (172)
    • 6.7.11 Giao diện trang Cài đặt tài khoản của người dùng (175)
    • 6.7.12 Giao diện trang Nhắn tin (175)
    • 6.7.13 Giao diện của tính năng Thông báo (176)
    • 6.7.14 Giao diện của tính năng Tìm kiếm nâng cao (176)
  • 8.1 Tổng kết về luận văn tốt nghiệp (181)
  • 8.2 Hạn chế và cải tiến trong tương lai (182)
  • Tài liệu tham khảo (65)

Nội dung

Mục tiêu đề tài

Mục tiêu của nhóm là phát triển một hệ thống học tập nhằm khắc phục nhược điểm của các hệ thống quản trị học tập hiện tại, đặc biệt trong lĩnh vực học tập xã hội (Social Learning) Học tập xã hội được hiểu là hình thức học mới, kết hợp tính năng mạng xã hội để tạo ra cộng đồng người học chia sẻ và thảo luận kiến thức, với phương châm "Sharing is caring" Đề tài không nhằm xây dựng một LMS đầy đủ tính năng, mà tập trung vào việc thử nghiệm các tính năng phụ trợ như gợi ý, gamification, nhắn tin, tìm kiếm nâng cao và thảo luận nhóm, nhằm chuyển trọng tâm từ người dạy sang người học Người học sẽ tự tìm kiếm và nhận diện các khóa học phù hợp với sở thích, đồng thời chủ động thảo luận với nhau Nội dung trong hệ thống sẽ chuyển từ nội dung do admin tạo thành nội dung do người dùng tạo ra, đó là mong muốn của nhóm Để đạt được mục tiêu này, nhóm đã đề ra các tính năng chính cần hiện thực hóa.

 Hệ thống tìm kiếm cơ bản lẫn nâng cao giúp người dùng tìm kiếm khóa học và nhóm thảo luận phù hợp với sở thích của bản thân.

Hệ thống đề xuất gợi ý giúp người dùng phát hiện nội dung phù hợp với sở thích của họ, đồng thời hỗ trợ việc tìm kiếm thụ động.

 Hệ thống học tập đơn giản nhưng vẫn đảm bảo các tính năng học và lưu lại thành tích.

Hệ thống thảo luận và hỏi đáp trong các bài học tạo điều kiện tăng cường tương tác giữa các học viên Các nội dung được sắp xếp công bằng dựa trên đánh giá của đông đảo người dùng, giúp mọi người dễ dàng trao đổi ý kiến và kiến thức.

 Hệ thống Gamification bao gồm Thành tích và Bảng xếp hạng giúp người học có được sự hứng thú trong việc học hành và thi đấu với nhau.

Hệ thống không chỉ cung cấp các tính năng chính mà còn hỗ trợ nhiều tính năng phụ hữu ích như khả năng tìm kiếm các câu hỏi lặp lại, giúp học viên tiết kiệm thời gian, cùng với báo cáo và thống kê dữ liệu dành cho quản trị viên.

Khảo sát các hệ thống liên quan

Hiện nay, các hệ thống quản trị học tập (LMS) rất đa dạng về loại hình và tính năng, phục vụ cho nhiều nhu cầu khác nhau như huấn luyện nhân viên, phát triển kỹ năng, và đào tạo học thuật Việc lựa chọn các tính năng phù hợp để xây dựng một hệ thống LMS hiệu quả là một thách thức không nhỏ Đề tài nghiên cứu của chúng tôi tập trung vào việc tích hợp các thành phần của mạng xã hội vào LMS, nhằm khắc phục những thiếu sót của các hệ thống hiện tại, từ đó tạo ra một môi trường học tập và huấn luyện toàn diện hơn.

Các hệ thống LMS hiện đại như Docebo và Adobe Captivate Prime đã tích hợp nhiều tính năng mới và hữu ích, bổ sung cho các chức năng e-learning và quản lý học tập trực tuyến truyền thống.

 Blended Learning: Kết hợp giữa e-learning và phương pháp dạy học trực tiếp truyền thống để phát huy tối đa điểm mạnh điểm yếu của mỗi cách học:

 Dạy học trực tuyến thông qua video và các hình thức học trực tuyến khác.

 ILT (instructor-lead training) classroom: cho phép giảng viên sắp xếp và quản lý địa điểm và thời gian của các buổi học offline.

 Tích hợp ứng dụng mobile để người học viên có thể học ở mọi lúc mọi nơi.

 Hệ thống lưu trữ tệp nhanh và tiện lợi, tạo trải nghiệm người dùng tốt.

 Có các hình thức bán khóa học thông qua hình thức mua bán trực tuyến e-commerce.

 Giao diện bắt mắt dễ dàng sử dụng Đây là một ưu thế của các hệ thống này so với những người “đàn anh” tiền nhiệm như Moodle.

Hệ thống cung cấp chức năng theo dõi công việc, hỗ trợ giáo viên trong việc quản lý các hoạt động và tạo ra những hoạt động mới như livestream, xuất bản đơn vị khóa học hoặc bài kiểm tra Ngoài ra, nó còn tích hợp lịch biểu giúp giáo viên sắp xếp công việc một cách hiệu quả.

Mặc dù các hệ thống mang lại nhiều lợi ích, nhưng chúng vẫn tồn tại một số khuyết điểm trong quá trình sử dụng Dù có sự khác biệt giữa các hệ thống, nhưng nhìn chung, các vấn đề chính vẫn được tổng hợp lại.

Học tập xã hội là quá trình tiếp thu kiến thức từ người khác thông qua các nền tảng mạng xã hội, diễn đàn và tính năng thảo luận Trong khi các hệ thống cũ thường chỉ cung cấp diễn đàn truyền thống đơn giản, không đáp ứng được nhu cầu trao đổi phức tạp, các hệ thống mới đã bắt đầu tích hợp mạng xã hội Tuy nhiên, sự tích hợp này vẫn chưa đủ sâu, thiếu các tính năng như nhắn tin trực tiếp, các mô hình thảo luận dựa trên lượt ủng hộ để khuyến khích các câu hỏi hay, và các tương tác chia sẻ kiến thức đã học.

Học tập trải nghiệm là quá trình mà người học đóng góp vào việc xây dựng kiến thức thông qua nội dung do chính họ tạo ra, chẳng hạn như bài viết hoặc video học tập.

Gamification là yếu tố quan trọng mang lại cảm giác vừa học vừa chơi trong các hệ thống giáo dục Tuy nhiên, nhiều hệ thống chỉ dừng lại ở việc cung cấp chứng chỉ hoặc thưởng cho một số hoạt động học tập đơn giản Việc tích hợp các yếu tố trò chơi như cấp độ, bảng xếp hạng và thành tựu sẽ tạo ra trải nghiệm học tập thú vị và thoải mái hơn cho người học.

Hệ thống đề xuất khóa học và lộ trình học tập cá nhân hóa dựa trên sở thích và năng lực của học viên là một tính năng quan trọng mà nhiều trang LMS hiện nay vẫn chưa cung cấp.

Nhóm nghiên cứu đã xác định rằng cần chú trọng vào các tính năng quan trọng liên quan đến mạng xã hội, bao gồm Nhóm, Nhắn tin, Đề xuất gợi ý, Thích/Ủng hộ và Chia sẻ.

Gamification được áp dụng để nâng cao các tính năng của hệ thống quản lý học tập (LMS) truyền thống Nhóm nghiên cứu cũng sẽ loại bỏ một số tính năng mà họ đánh giá không thể cải thiện hơn so với các LMS hiện tại, chẳng hạn như Blended Learning và tích hợp ứng dụng di động.

2 Cơ sở lý thuyết và công nghệ

Cơ sở lý thuyết

Kiến trúc Web

Kiến trúc Web, hay còn gọi là World Wide Web, là một cấu trúc dựa trên nền tảng internet, cho phép người dùng giao tiếp và trao đổi thông tin với nhau cũng như tương tác với các hệ thống.

Kiến trúc Web cũng như các kiến trúc phần mềm khác, bao gồm 2 phần cốt lõi: front-end và back-end.

Front-end là phần liên quan đến giao diện và trải nghiệm đồ họa của người dùng trên web, bao gồm tất cả các file HTML, CSS và JavaScript.

JavaScript được các trình duyệt (hoặc các trình xem HTML) xử lý để hiển thị giao diện cũng như hiện thực những trải nghiệm đồ họa cho người dùng.

Back-end là phần quan trọng trong kiến trúc web, bao gồm tất cả các tác vụ liên quan đến truy xuất và điều chỉnh dữ liệu ở tầng thấp như cơ sở dữ liệu và phần cứng Nó cho phép sự linh hoạt cao, cho phép sử dụng bất kỳ công cụ hay ngôn ngữ lập trình nào để thực hiện các tác vụ yêu cầu.

Hình 1: Tổng quan Kiến trúc Web.

Ngoài 2 phần cốt lõi đã nêu trên thì Kiến trúc Web cũng bao hàm một số đặc trưng sau:

 Các giao thức mạng: TCP/IP (Internet protocol suite), HTTP (HyperText Transfer

Protocol), HTTPS (HyperText Transfer Protocol Secure),…

 Các tiêu chuẩn về địa chỉ: URI (Uniform Resource Identifier), URL (Uniform

 Các mô hình hướng dịch vụ: WSDL (Web Services Description Language), SOAP

(Simple Object Access Protocol), REST (Representational State Transfer),…

 Các tiêu chuẩn riêng cho việc quốc tế hóa (internationalization).

Việc ứng dụng Kiến trúc Web để hiện thực hệ thống sẽ được trình bày ở những phần tiếp theo.

REST

REST (REpresentational State Transfer) là một kiến trúc phần mềm hướng dịch vụ

(Service-Oriented Architectures – SOA) được sử dụng rất phổ biến trong các ứng dụng sử dụng Kiến trúc Web hiện nay.

REST là một bộ quy tắc rõ ràng nhằm hiện thực hóa các dịch vụ tương tác giữa người dùng và hệ thống qua internet Đặc trưng nổi bật của REST là tính không lưu trạng thái (stateless), cho phép yêu cầu truy xuất tài nguyên và nhận phản hồi mà không lưu giữ thông tin nào từ bên yêu cầu.

Một dịch vụ web tuân thủ theo các đặc trưng của REST sẽ được gọi là các dịch vụ

Dịch vụ RESTful cho phép mỗi yêu cầu gửi tới một URI nhận được phản hồi dưới dạng khối dữ liệu (payload) được định dạng như HTML, XML, hoặc JSON Ngoài ra, mỗi yêu cầu cũng có thể bao gồm khối dữ liệu để cung cấp thông tin cần thiết cho các tác vụ.

Khi nhận được yêu cầu, bên phản hồi có thể kích hoạt và thực hiện các yêu cầu khác, tạo thành chuỗi tương tác hai chiều giữa yêu cầu và phản hồi Đặc điểm không lưu vết của REST cho phép chuỗi này diễn ra nhanh chóng, tiết kiệm tài nguyên hệ thống và vẫn đảm bảo tính toàn vẹn của dữ liệu.

REST không chỉ áp dụng cho Kiến trúc Web mà còn được sử dụng phổ biến trong nhiều kiến trúc phần mềm khác, đáp ứng các yêu cầu đặc trưng của từng hệ thống.

Việc áp dụng RESTful API (Giao diện lập trình ứng dụng) trong hệ thống nhóm đánh giá sẽ mang lại hiệu quả cao, dựa trên các cơ sở lý thuyết đã phân tích.

Tìm kiếm văn bản

Tìm kiếm toàn văn (full-text search) là phương pháp tìm kiếm tài liệu liên quan đến từ khóa thông qua cơ sở dữ liệu full-text, nơi lưu trữ toàn bộ dữ liệu ký tự của các tài liệu, tin nhắn và đoạn văn Kỹ thuật này sử dụng chỉ mục ngược để phân tích từng token, thường là các cụm từ trong câu, bằng cách chia nhỏ chuỗi văn bản thành các đơn vị token và tạo danh sách các tài liệu chứa những token đó.

Hình dưới đây minh họa kỹ thuật đánh index ngược cho ba câu văn đơn giản 1

Kỹ thuật đánh index ngược là phương pháp tạo danh sách tra cứu từ các token, giúp xác định tài liệu chứa chúng Khi các token được sắp xếp theo thứ tự cố định, thường là theo bảng chữ cái, người dùng có thể nhanh chóng tìm kiếm từ khóa bất kỳ trong cấu trúc dữ liệu này bằng cách sử dụng tìm kiếm nhị phân, từ đó truy xuất các tài liệu liên quan.

Khi thực hiện truy vấn với từ khóa mới, bộ tìm kiếm sẽ cung cấp danh sách tài liệu chứa từ khóa đó, được sắp xếp theo một thuật toán xếp hạng cụ thể Để tìm kiếm cụm từ khóa, bộ tìm kiếm chia nhỏ nó thành các token, lấy danh sách tài liệu chứa những từ đó và sử dụng các toán tử Boolean để kết hợp các danh sách (AND hoặc OR) Ví dụ, nếu truy vấn là “is the” với toán tử AND, kết quả sẽ là tài liệu 2 và 3; còn với toán tử OR, kết quả sẽ bao gồm cả ba tài liệu.

Để tối ưu hóa kết quả tìm kiếm, không chỉ cần truy xuất tài liệu phù hợp mà còn phải sắp xếp chúng theo cách phù hợp với nhu cầu của người dùng Hai thuật toán sắp xếp nổi bật thường được áp dụng trong các phần mềm tìm kiếm là TF-IDF và BM25.

TF-IDF là một kỹ thuật phổ biến trong khai thác dữ liệu văn bản, giúp đánh giá tầm quan trọng của từ ngữ trong tài liệu so với toàn bộ kho văn bản Mức độ quan trọng của từ được xác định dựa trên hai yếu tố chính.

 Tần suất xuất hiện của từ đó trong văn bản (Term Frequency): tf (t, d) = số lượng từ t trong tài liệu d / số lượng từ trong d

[1] Tham khảo ElasticSearch from the Bottom Up [9]

Trong bối cảnh tìm kiếm, tài liệu có tần suất xuất hiện cao của từ khóa sẽ có mức độ phù hợp cao hơn.

“chuẩn hóa” chia cho số lượng từ trong tài liệu nhằm đảm bảo rằng không có sự thiên vị (bias) với tài liệu dài.

 Nghịch đảo tần suất xuất hiện của văn bản (Inverse Document Frequency): idf(t)=log( N df+1) (với df là số lần xuất hiện của t trong toàn bộ tập tài liệu)

Chỉ số này sẽ trừng phạt những từ ngữ xuất hiện thường xuyên trong các văn bản, đặc biệt là các từ stop word như "is", "this", "of" Những từ này thường không mang lại giá trị cao trong việc đánh giá mức độ phù hợp của tài liệu Do đó, công cụ tìm kiếm sẽ tập trung vào các từ ngữ hiếm để sắp xếp tài liệu dựa trên tần suất xuất hiện của chúng.

TF-IDF là sản phẩm của hai yếu tố chính, không chỉ được sử dụng trong tìm kiếm mà còn có ứng dụng rộng rãi trong các lĩnh vực như Phân tích Tâm trạng và Tương đồng Ngữ nghĩa, sẽ được trình bày chi tiết trong phần Tìm kiếm theo ngữ nghĩa.

BM25 là một biến thể nâng cao của TF-IDF, được phát triển để cải thiện khả năng tìm kiếm từ khóa Công thức tính toán của BM25 giúp tối ưu hóa kết quả tìm kiếm, đáp ứng tốt hơn nhu cầu của người dùng.

BM25 đã thay thế yếu tố tf ở TF-IDF bằng một công thức phức tạp hơn Ý nghĩa của một số thành phần trong công công thức như sau:

 f(q i , d) Số lần xuất hiện của của từ khóa qi trong d Đây là cũng là tử số của tf trong công thức ban đầu.

FieldLen / avgFieldLen là chỉ số đo lường độ dài của tài liệu so với độ dài trung bình, với tỉ lệ cao hơn dẫn đến kết quả tìm kiếm thấp hơn Điều này hợp lý vì từ khóa xuất hiện trong đoạn văn ngắn sẽ có độ liên quan cao hơn so với khi nó xuất hiện trong văn bản dài Chỉ số b trong công thức cũng ảnh hưởng đến mức độ đóng góp của yếu tố này.

Chỉ số k1 trong BM25 giới hạn mức độ ảnh hưởng của từ khóa đến câu truy vấn, giúp điều chỉnh giá trị TF-IDF Khác với công thức TF-IDF truyền thống, nơi giá trị tăng vô hạn theo số lần xuất hiện của từ khóa, BM25 áp dụng k1 để kiểm soát sự gia tăng này, đảm bảo tính chính xác trong việc đánh giá mức độ liên quan của các từ khóa.

BM25 là một thuật toán phổ biến trong các công cụ tìm kiếm như ElasticSearch và Solr, được sử dụng để xếp hạng kết quả tìm kiếm sau khi xác định các tài liệu phù hợp với truy vấn ban đầu.

Hệ thống giới thiệu

Hệ thống giới thiệu (Recommendation System) là một ứng dụng quan trọng của Machine Learning, giúp gợi ý sản phẩm hoặc nội dung phù hợp cho người dùng dựa trên lịch sử hoạt động và sở thích cá nhân Các mô hình này học hỏi từ hành vi của người dùng, cả trực tiếp lẫn gián tiếp, để xác định phản hồi của họ đối với nội dung cụ thể Hai loại phản hồi chính được xác định trong quá trình này.

Phản hồi tường minh (Explicit Feedback) là khi người dùng trực tiếp gán nhãn, xếp hạng hoặc đánh giá nội dung, thường được thể hiện qua một dãy các giá trị có thứ tự Chẳng hạn, trong lĩnh vực giới thiệu phim ảnh, việc đánh giá bằng số sao là một ví dụ điển hình của phản hồi tường minh.

Phản hồi tiềm ẩn (Implicit Feedback) là loại phản hồi không trực tiếp, thể hiện mức độ yêu thích của người dùng thông qua các hành động và sự kiện như bookmark, xem trang thông tin hoặc mua phim Những phản hồi này không có giá trị cụ thể và rõ ràng, nhưng vẫn cung cấp cái nhìn sâu sắc về sự quan tâm của người dùng đối với nội dung.

Hầu hết các giải thuật và bài viết hàn lâm sử dụng phản hồi tường minh để đào tạo và đánh giá mô hình Giới thiệu, nhưng loại phản hồi này thường khan hiếm khi hệ thống mới hoạt động Ngược lại, phản hồi tiềm ẩn từ hành vi người dùng dồi dào hơn, nhưng khó đo lường mức độ yêu thích do không có khoảng giá trị cụ thể Điều này ảnh hưởng đến việc lựa chọn giải thuật và mô hình cho tính năng Giới thiệu, sẽ được trình bày chi tiết ở phần Hiện thực.

Có hai cách tiếp cận chủ yếu để giải quyết bài toán giới thiệu nội dung đến với người dùng chính như sau:

1 Content-based Filtering: Học được hồ sơ sở thích của người dùng dựa trên các đặc trung của nội dung mà người dùng đã bình chọn trước đó Các đặc trưng kể trên có thể là mô tả, phân loại, người dạy học, v.v trong trường hợp giới thiệu khóa học đối với người học viên Những thông tin trên được gọi là hồ sơ của từng nội dung Từ hồ sơ nội dung, ta có thể xây dựng hồ sơ của người dùng và giới thiệu đến người dùng đó các nội dung mới tương thích với hồ sơ đó.

Hình 4: Ma trận biểu diễn đặc trưng Phân loại của item (nội dung) và người dùng.

Bài viết trình bày cách sử dụng các vector đặc trưng để phân loại nội dung và sở thích của người dùng, cho phép tính toán sự tương đồng giữa các item và sở thích người dùng thông qua các hàm đo tương đồng như dot-product và cosine similarity Điều này giúp tạo ra các gợi ý phù hợp cho người dùng, chẳng hạn như giới thiệu item tương tự hoặc item phù hợp với sở thích Mặc dù phương pháp này yêu cầu kiến thức chuyên sâu để xác định các đặc trưng tốt, nhưng nó có lợi thế là không cần dựa vào lịch sử yêu thích của người dùng khác, từ đó dễ dàng mở rộng quy mô.

2 Collaborative Filtering: Cách tiếp cận này được xây dựng dựa trên giả thuyết là nếu hai người dùng bất kỳ có lịch sử mua hàng gần giống nhau thì khả năng trong tương lai người dùng này vẫn sẽ mua hàng tiêu thụ bởi người dùng kia Cách tiếp cận này tập trung hoàn toàn vào lịch sử phản hồi giữa người dùng với nội dung thay vì các đặc trưng tương ứng với nội dung hoặc người dùng Lịch sử phản hồi này thường được mô tả dưới dạng ma trận Utility:

Hình 5: Minh họa ma trận utility.

Hệ thống giới thiệu sử dụng ma trận phản hồi của người dùng dưới dạng đánh giá từ 1 đến 5 sao để dự đoán các đánh giá cho những sản phẩm mà người dùng chưa đánh giá Mục tiêu là cung cấp những gợi ý sản phẩm có khả năng được đánh giá cao nhất cho từng người dùng.

Collborative Filtering cũng được chia thành hai nhóm chính:

Phương pháp tiếp cận dựa trên bộ nhớ lưu trữ ma trận utility trong bộ nhớ và dự đoán đánh giá của người dùng i đối với item k bằng cách tổng hợp trọng số các đánh giá của những người dùng khác về k Trọng số này được xác định bởi độ đo tương đồng giữa người dùng đó và người dùng i, với các độ đo phổ biến như cosine similarity và jaccard similarity Công thức tính độ tương đồng cosine được biểu diễn như sau: w(A, B) = A⋅B.

Mức độ đánh giá tiên đoán giữa người dùng i và item k được tính bằng cách chuẩn hóa tổng trọng số, chia cho tổng giá trị tuyệt đối của các giá trị tương đồng.

Phương pháp dựa trên mô hình là một nhóm thuật toán sử dụng machine learning để dự đoán đánh giá của người dùng, trong đó, phân tích ma trận là một trong những phương pháp phổ biến Nguyên tắc hoạt động của chúng dựa trên việc nhận diện sở thích của người dùng và đặc điểm của các sản phẩm thông qua một số yếu tố tiềm ẩn Mô hình này nhằm xấp xỉ ma trận utility user-item bằng cách nhân hai ma trận: ma trận X chứa thông tin của sản phẩm và ma trận Y chứa thông tin của người dùng Ma trận X biểu diễn thông tin "tiềm ẩn" của từng sản phẩm, trong khi ma trận Y thể hiện thông tin tiềm ẩn của từng người dùng Khi có được hai ma trận này, chúng ta có thể dự đoán đánh giá của người dùng đối với một sản phẩm bất kỳ bằng cách thực hiện tích vô hướng giữa hàng của ma trận.

X đại diện cho item và cột của ma trận Y đại diện cho người dùng Các mô hình nổi bật trong phương pháp này bao gồm ALS và SVD Collaborative-based Filtering có ưu điểm vượt trội so với Content-based Filtering nhờ khả năng đưa ra gợi ý mà không cần hiểu biết sâu về lĩnh vực cụ thể Ví dụ, trong việc giới thiệu phim, chúng ta không cần nắm rõ mối liên hệ giữa trẻ em và sở thích phim siêu anh hùng, chỉ cần có đủ dữ liệu về sở thích của nhóm người.

Hệ thống gợi ý dựa trên Collaborative Filtering có khả năng đưa ra những gợi ý phù hợp cho người dùng, ngay cả khi họ còn nhỏ tuổi Phương pháp này dựa vào sở thích của người dùng để giới thiệu các mục mới, giúp phát hiện những sở thích tiềm ẩn mà người dùng chưa từng trải nghiệm Tuy nhiên, nhược điểm lớn nhất của phương pháp này là hiện tượng cold-start, khiến việc giới thiệu các mục mới trở nên khó khăn do thiếu dữ liệu Tương tự, người dùng mới sẽ nhận được ít gợi ý phù hợp hơn so với những người dùng đã có lịch sử dài trong hệ thống.

Giải pháp của nhóm áp dụng công cụ mã nguồn mở ActionML, dựa trên giải thuật Collaborative Filtering mang tên Correlated Cross-Occurrence Khác với các giải thuật trước, giải thuật này xử lý các phản hồi tiềm ẩn mà không dựa vào đánh giá trực tiếp từ người dùng Ý tưởng cốt lõi là gán điểm cho item dựa trên tính đồng xuất hiện (co-occurrence) của các sự kiện.

Sự kiện trong bài viết này đề cập đến các hoạt động thể hiện mức độ yêu thích của người dùng đối với một sản phẩm hoặc nhóm sản phẩm Giả sử ta có ma trận P lưu trữ lịch sử mua hàng với các giá trị thể hiện số lần xuất hiện của sự kiện “mua” Sự kiện này có thể mang ý nghĩa khác nhau trong các ngữ cảnh khác, nhưng vẫn hướng đến mục đích cuối cùng của hệ thống là đưa ra lời giới thiệu cho người dùng, còn gọi là sự kiện chuyển đổi Giải thuật khai phá đề nghị dựa trên mức độ tương đồng trong hành vi “mua hàng” của những người dùng tương đương, được tính toán qua công thức r=[P t P]h p.

Tìm kiếm theo tương đồng ngữ nghĩa

Tìm kiếm theo tương đồng ngữ nghĩa (Semantic Similarity Search) là một kỹ thuật trong Xử lý ngôn ngữ tự nhiên, cho phép tìm kiếm tài liệu dựa trên mức độ tương đồng ngữ nghĩa với câu truy vấn Tác vụ này có nhiều ứng dụng thực tiễn, đặc biệt trong các hệ thống hỏi đáp, nơi người dùng thường ngại tự tạo câu hỏi Việc phát triển công cụ tìm kiếm dựa trên ngữ nghĩa giúp cung cấp kết quả phù hợp với mong muốn của người dùng Ngoài ra, nó còn được ứng dụng trong việc phát hiện đạo văn và spam.

Tác vụ tìm kiếm này có thể được chia thành ba công đoạn như sau:

1 Xây dựng dạng biểu diễn vector cho câu văn (hoặc đoạn văn) sao cho mối quan hệ ngữ nghĩa giữa các từ được đảm bảo và các câu văn có độ tương đồng cao sẽ nằm gần nhau trong siêu phẳng chứa các vector biểu diễn đó Cách làm này có tên gọi là sentence embedding Một số phương pháp sentence embedding nổi tiếng có thể kể đến như TF- IDF vectorizer, Doc2Vec, BERT, Universal Sentence Encode, …

2 Lưu trữ các vector biểu diễn của toàn bộ kho dữ liệu ở một cơ sở dữ liệu nào đó Các hệ cơ sở dữ liệu tìm kiếm như ElasticSearch đã có hỗ trợ lưu trữ dense vector (là dạng biểu diễn sinh ra bởi kỹ thuật sentence embedding kể trên) và đánh index Một số giải pháp có hiệu năng cao hơn sử dụng việc tìm kiếm Approximate Nearest Neighbor (xấp xỉ việc tìm kiếm K đối tượng gần giống nhất) để tăng hiệu năng, có thể kể đến là ANN, FAISS, nhưng lại thiếu khả năng lọc tài liệu dựa theo nghiệp vụ của hệ thống. (ví dụ lọc câu hỏi theo thể loại Sức khỏe chẳng hạn).

3 Tại thời điểm truy vấn, câu truy vấn sẽ được đưa vào mô hình sentence embedding như ở bước 1 rồi đưa vào các cơ sở dữ liệu tìm kiếm ở 2 để tìm ra K tài liệu hoặc câu văn có ngữ nghĩa giống nhất dựa trên chỉ số tương đồng nào đó (thường dùng nhất là cosine similarity).

Việc chọn kỹ thuật sentence embedding rất quan trọng đối với chất lượng hệ thống tìm kiếm Trong bài luận văn này, nhóm nghiên cứu đã chọn BERT (Bidirectional Encoder Representations from Transformers) làm mô hình thực hiện BERT là một mô hình hiệu quả trong việc giải quyết tác vụ language modelling trong NLP, giúp xác định xác suất một câu văn có hợp lệ trong ngôn ngữ cụ thể hay không Hơn nữa, mô hình này còn có thể được mở rộng để xử lý nhiều bài toán NLP khác như Question Answering và Named Entity Recognition.

Mô hình BERT, mặc dù không được huấn luyện trực tiếp cho bài toán Câu văn tương đồng, có thể được fine-tuning để phù hợp với nhiệm vụ này Điều này nhờ vào khả năng của BERT trong việc lưu trữ ý nghĩa và bản chất của từ trong câu dưới dạng dense vector, khác với one-hot vector chỉ có một giá trị 1 Phương pháp fine-tuning này áp dụng cách huấn luyện Siamese Network, nổi tiếng trong bài toán nhận diện khuôn mặt.

Trong quá trình huấn luyện, hai câu văn được đưa vào BERT để tạo ra các vector chứa thông tin ngữ cảnh Để chuẩn hóa độ dài vector về 768, lớp pooling (thường là mean pooling) được sử dụng Mô hình được huấn luyện bằng cách áp dụng hàm mục tiêu cosine similarity và hàm mất mát mean-squared error, cùng với một số hàm mất mát khác như Softmax và Triplet Loss.

Dữ liệu huấn luyện có nhãn là chỉ số thể hiện mức độ tương đồng giữa hai câu văn, được chuẩn hóa từ 0 đến 1 Việc sử dụng dữ liệu này thay vì dữ liệu nhị phân 0 hoặc 1 là rất quan trọng, vì nó không chỉ giúp mô hình nhận diện sự tương đồng mà còn có khả năng xếp hạng mức độ tương đồng, điều này là cần thiết cho bài toán Tìm kiếm theo tương đồng ngữ nghĩa.

Mô hình được huấn luyện theo cách này còn được gọi là Bi-Encoder, nhằm phân biệt với mô hình Cross-Encoder, cũng sử dụng phương pháp sentence embedding để nhận diện độ tương đồng.

Hình 6: Phương pháp huấn luyện và sử dụng BERT để tiên đoán mức độ tương đồng giữ các câu văn.

Hình 7: Sự khác nhau giữa Bi-Encoder và Cross-Encoder.

Hình 7 minh họa sự khác biệt trong huấn luyện hai mô hình Bi-Encoder và Cross-Encoder Trong Cross-Encoder, hai câu được đưa vào mô hình BERT đồng thời và qua một bộ phân loại để tạo ra giá trị từ 0 đến 1 Theo các tác giả [21], Cross-Encoder cho chất lượng tốt hơn Bi-Encoder, nhưng không tạo ra sentence embedding nên không thể sử dụng cho việc lập chỉ mục trong cơ sở dữ liệu Việc sử dụng Cross-Encoder cho tìm kiếm sẽ rất chậm do cần tính toán O(n) lần embedding trung gian Ngược lại, Bi-Encoder cho phép tính toán embedding cho toàn bộ kho văn trước, giúp truy vấn chỉ cần tính embedding cho câu truy vấn và tính cosine similarity với các câu còn lại, đảm bảo hiệu năng cao nhờ tính hiệu quả của hàm cosine similarity.

Mặc dù Cross-Encoder chủ yếu được sử dụng độc lập, nó vẫn có thể hỗ trợ Bi-Encoder trong việc cải thiện thứ tự kết quả tìm kiếm Hình dưới đây minh họa phương pháp kết hợp cả hai mô hình để thực hiện tìm kiếm dựa trên sự tương đồng ngữ nghĩa.

Hình 8: Mô tả quá trình tìm kiếm dựa vào tiến trình Retrieve-Rerank.

Ta sử dụng Bi-Encoder để lọc ra những kết quả tìm kiếm tiềm năng nhất, sau đó đưa vào Cross-Encoder để sắp xếp lại và chọn ra K kết quả phù hợp nhất Với khả năng dự đoán tốt hơn Bi-Encoder, Cross-Encoder giúp đảm bảo rằng các kết quả trả về không chỉ phù hợp với câu truy vấn mà còn được sắp xếp theo thứ tự chính xác Thứ tự của các kết quả là yếu tố quan trọng trong các bài toán truy vấn thông tin, vì nếu người dùng phải lướt qua nhiều trang mới tìm thấy kết quả mong muốn, thì giá trị của hệ thống sẽ giảm đi đáng kể.

Các chỉ số phổ biến để đánh giá kết quả tìm kiếm trong bài toán này, cũng như trong bài toán Giới thiệu, bao gồm MRR, MAP, NDCG và Recall at K MRR (Mean Reciprocal Rank) đo lường vị trí của kết quả đúng đầu tiên, trong khi MAP (Mean Average Precision) tính toán độ chính xác trung bình của các kết quả NDCG (Normalized Discounted Cumulative Gain) đánh giá chất lượng của các kết quả dựa trên thứ hạng, và Recall at K cho biết tỷ lệ các kết quả đúng trong số K kết quả hàng đầu.

Mean Reciprocal Rank (MRR) là một chỉ số đánh giá hiệu suất của công cụ tìm kiếm, trong đó Q là tập hợp các truy vấn và rank i là vị trí của kết quả phù hợp đầu tiên cho mỗi truy vấn i.

Công thức này chủ yếu tập trung vào thứ hạng của kết quả tìm kiếm phù hợp đầu tiên, tức là kết quả đầu tiên liên quan đến câu truy vấn ban đầu.

Công nghệ sử dụng

Front-end: VueJS

VueJS là một trong những framework (cùng với ReactJS, Angular, EmberJS, ) nổi tiếng dùng để phát triển Front-end cho nền tảng web sử dụng ngôn ngữ JavaSciprt.

VueJS, được phát triển bởi Evan You, đã nhanh chóng trở thành một trong những framework JavaScript phổ biến nhất trong cộng đồng, nhờ vào sự phát triển mạnh mẽ và đội ngũ phát triển cốt lõi đông đảo và chất lượng.

Hệ thống được xây dựng trên nền tảng VueJS nhờ vào tính dễ tiếp cận và sức mạnh vượt trội mà nó mang lại, đặc biệt là với sự ra đời của phiên bản 3, phiên bản mà nhóm nghiên cứu đã chọn để phát triển Một số đặc điểm nổi bật của VueJS bao gồm khả năng tạo giao diện tương tác mượt mà và hiệu suất cao.

 Sử dụng toàn bộ tính năng, sức mạnh của HTML, CSS thuần chủng (khác với ReactJS sử dụng kiểu ngôn ngữ lai giữa HTML và JavaScript là JSX).

Bộ framework này có khả năng mở rộng vượt trội, cung cấp đầy đủ các tính năng và thư viện cần thiết để đáp ứng mọi nhu cầu từ cơ bản đến phức tạp cho một trang web.

High performance is achieved through the use of Virtual DOM, which effectively addresses performance challenges when interfacing between three different languages: HTML, CSS, and JavaScript Key aspects include change detection, reactivity, asynchronous mechanisms, and intelligent rendering.

 Phù hợp với mọi cấp độ phát triển web, từ mini-project tới enterprise level.

 Có cộng đồng sử dụng và phát triển đông đảo nhất hiện nay dù ra đời muộn hơn những framework “gạo cội” như: ReactJS, Angular.

Quản lý dữ liệu tập trung với Pinia

Việc sử dụng VueJS để xây dựng hệ thống yêu cầu nhiều thành phần và trang được lập trình viên phát triển Trong VueJS, dữ liệu giữa các component được trao đổi theo cấu trúc nhánh, với component cha có khả năng truyền dữ liệu xuống cho component con, trong khi component con có thể kích hoạt sự kiện để component cha lắng nghe Tuy nhiên, việc truyền dữ liệu giữa các component cùng cấp có thể trở nên phức tạp do phải đi qua nhiều lớp Do đó, cần thiết phải có một cơ chế quản lý dữ liệu tập trung để đơn giản hóa quá trình này.

Pinia là một dự án mã nguồn mở nhằm xây dựng cơ sở dữ liệu tập trung cho các ứng dụng web sử dụng VueJS 3 Với những cải tiến về hiệu suất và tính năng mới của VueJS 3, Pinia đang trở thành thư viện quản lý dữ liệu ưa chuộng, thay thế cho các giải pháp trước đây.

Vuex vốn đã khá cũ vì chưa cập nhật những tính năng ưu việt mới của VueJS 3.

Pinia là một thư viện quản lý trạng thái trong Vue.js, với thực thể chính là store, nơi lưu trữ tất cả dữ liệu và hàm phục vụ cho các mục đích cụ thể Mỗi store bao gồm ba thành phần chính, giúp tổ chức và quản lý trạng thái một cách hiệu quả.

 State: là trung tâm chứa toàn bộ dữ liệu của store.

 Getters: là một danh sách các hàm tính toán suy ra từ State.

 Actions: là một danh sách các hàm có thể tác động lên bất cứ dữ liệu nào bên trongState.

Hình 9: Một đoạn code định nghĩa store cho các tác vụ liên quan tới Xác thực người dùng.

Sử dụng store rất dễ dàng, bạn chỉ cần gọi hàm useStoreAuth() ở bất kỳ đâu để truy cập tất cả các State, Getters và Actions đã được định nghĩa Hệ thống hỗ trợ đa ngôn ngữ thông qua Vue I18n.

Hệ thống cần hỗ trợ đa ngôn ngữ do sự kết hợp với mạng xã hội, với hai ngôn ngữ cụ thể được yêu cầu.

Vue I18n là thư viện lý tưởng cho việc định nghĩa các đoạn văn bản hiển thị bằng nhiều ngôn ngữ khác nhau thông qua các key Thư viện này mang đến một môi trường tích hợp hoàn chỉnh, tận dụng những ưu điểm vượt trội của VueJS 3.

Khi sử dụng thư viện này, công việc chính là định nghĩa hai tệp en.yaml và vi.yaml, tương ứng với ngôn ngữ tiếng Anh và tiếng Việt.

Hình 10: Tập tin en.yaml định nghĩa các key cho ngôn ngữ tiếng Anh.

Hệ thống sử dụng Vue I18n với tính năng lazy-loading cho ngôn ngữ tiếng Việt, giúp người dùng chỉ tải về một tập tin ngôn ngữ duy nhất khi bắt đầu sử dụng Khi người dùng chuyển đổi sang ngôn ngữ khác, hệ thống sẽ cho phép tải về tập tin tương ứng và tự động cache trong trình duyệt, giảm thiểu việc tải lại Tính năng này không chỉ cải thiện hiệu suất của hệ thống mà còn quan trọng trong việc quản lý các tập tin ngôn ngữ lớn, có thể lên tới hơn 1.000 dòng, do đó lazy-loading trở thành một giải pháp thiết yếu.

Back-end: NestJS

NestJS: Một framework được xây dựng dựa trên nền tảng framework Express của

NodeJS là một framework linh hoạt, kết hợp các đặc điểm cứng rắn và bảo thủ của Spring Java với kiến trúc mô-đun hóa tinh gọn của Angular, mang đến hiệu năng tốt cho việc xây dựng ứng dụng Web NestJS, sử dụng ngôn ngữ lập trình Typescript, khắc phục nhược điểm của Javascript nhưng vẫn giữ được tính uyển chuyển NestJS hỗ trợ gần như toàn diện các use-case của hệ thống web điển hình như Validation, Serialization, Caching, Database (SQL, No-SQL), Logging, Websocket, Server-sent event, và Job Queue.

Việc chọn NestJS giúp nhóm đề tài thống nhất ngôn ngữ giữa front-end và back-end, từ đó giảm thiểu thời gian tìm hiểu các ngôn ngữ lập trình khác NestJS, được phát triển trên nền tảng NodeJS, tận dụng lợi thế từ cộng đồng open-source lớn mạnh, cung cấp nhiều thư viện phong phú phục vụ cho hầu hết các trường hợp sử dụng của back-end truyền thống.

Database: PostgreSQL

PostgreSQL là hệ thống quản trị cơ sở dữ liệu mã nguồn mở, nổi bật với việc tuân thủ tiêu chuẩn ANSI SQL và liên tục cập nhật các tính năng mới Hệ thống này đáp ứng nhu cầu ngày càng đa dạng của người dùng với nhiều tính năng độc đáo.

 Full-text Search phục vụ mục đích tìm kiếm nâng cao.

 Materialized View phục vụ truy vấn các dữ liệu tổng hợp hiệu quả

 Khả năng mô hình quan hệ kế thừa trong EERD bằng từ khóa INHERITANCE.

 Cung cấp các kiểu dữ liệu mới như range, array,…

 Cung cấp kiểu dữ liệu json và jsonb để phục vụ nhu cầu sử dụng các mô hình phi quan hệ.

Hệ thống sử dụng PostgreSQL làm hệ quản trị cơ sở dữ liệu nhờ vào hiệu suất mạnh mẽ và tính năng động vượt trội so với các hệ cơ sở dữ liệu khác Điểm nổi bật của PostgreSQL là khả năng hỗ trợ nhiều phương thức lưu trữ dữ liệu, điều này rất quan trọng cho các hệ thống lớn khi cần chuyển đổi các bảng quan hệ độc lập thành dữ liệu JSON nhằm cải thiện hiệu suất.

ActionML

ActionML cung cấp các giải pháp Machine Learning đa dạng, với hệ thống giới thiệu là phần cốt lõi Hệ thống giới thiệu The Universal Recommender, dựa trên thuật toán Correlated Cross-Occurrence, cho phép cải thiện khả năng giới thiệu bằng cách tiếp nhận nhiều sự kiện chuyển đổi khác nhau trong hệ thống, từ đó tăng tính linh hoạt và hiệu quả.

ActionML cung cấp máy chủ Harness để triển khai các mô hình Machine Learning, nổi bật với API đa dạng và dễ sử dụng Nhờ đó, ngay cả những lập trình viên không có nhiều kiến thức về thuật toán cũng có thể xây dựng hệ thống giới thiệu một cách hiệu quả.

ElasticSearch

ElasticSearch là một cơ sở dữ liệu mạnh mẽ chuyên phục vụ cho việc tìm kiếm, nổi bật với khả năng hỗ trợ tìm kiếm toàn văn (full-text) cùng với nhiều loại hình tìm kiếm khác như tìm kiếm một phần, search-as-you-type, fuzzy search (tìm kiếm với lỗi chính tả) và tìm kiếm vector, giúp hiện thực hóa các chức năng tìm kiếm tương đồng ngữ nghĩa.

NestJS tích hợp hiệu quả với ElasticSearch thông qua một thư viện hỗ trợ, cho phép lập trình viên dễ dàng thực hiện các câu lệnh tìm kiếm và cập nhật dữ liệu mà không cần phải gọi trực tiếp qua API.

FastAPI

FastAPI là một framework Python hiện đại cho phép xây dựng API bằng cách sử dụng cơ chế lập trình async – await, mang lại hiệu suất cao hơn so với các framework truyền thống Hệ thống này áp dụng công nghệ để phát triển API xung quanh mô hình tìm kiếm tương đồng về ngữ nghĩa, cũng được viết bằng Python Điểm mạnh nổi bật của FastAPI là sự đơn giản và khả năng hiện thực hóa nhanh chóng các API mà không tốn nhiều thời gian cấu hình.

Hệ thống được xây dựng trên nền tảng kết hợp giữa Hệ quản trị đào tạo và Mạng xã hội, dẫn đến việc không thể xác định một luồng hoạt động tổng quát để mô tả đầy đủ các yêu cầu và tính năng của nó Thay vì đề xuất một luồng hoạt động cụ thể, nhóm thực hiện đề tài sẽ liệt kê chi tiết các yêu cầu và tính năng mà hệ thống cung cấp Bằng cách kết hợp các yêu cầu và tính năng này, người dùng có thể tạo ra nhiều luồng hoạt động khác nhau, tất cả đều có mức độ quan trọng tương đương nhau.

Functional requirements

Dưới đây là sơ đồ các use-case của toàn bộ hệ thống:

Hình 12: Sơ đồ use-case của Người dùng thông thường.

Hình 13: Sơ đồ use-case của Người điều hành hệ thống.

Hình 14: Sơ đồ use-case của Giảng viên.

Hình 15: Sơ đồ use-case của Học viên.

Hình 16: Sơ đồ use-case của Người điều hành Nhóm.

Hình 17: Sơ đồ use-case của Thành viên Nhóm.

Non-functional requirements

 Hệ thống đảm bảo các chính sách riêng tư của người dùng.

 Hệ thống đảm bảo máy chủ không gặp sự cố khi có 2,000 người truy xuất trong cùng một thời điểm.

 Dung lượng truyền tải của toàn bộ phần front-end không quá 8 MB (sử dụng gzip).

 Máy chủ phân tán của từng dịch vụ không bị sập quá 60 giờ/tháng.

 Bảo trì và cập nhật hệ thống không quá 3 ngày (nguyên nhân chủ quan) và không quá

1 tuần (nguyên nhân khách quan) Nếu vượt quá sẽ luôn có đền bù xứng đáng

 Hệ thống dễ dàng sử dụng, chỉ cần dưới 30 phút để người dùng hiểu hết các tính năng.

4 Đặc tả chi tiết các use-case

Chỉnh sửa thông tin cá nhân

Kịch bản

Người dùng thông thường có thể chỉnh sửa thông tin cá nhân của bản thân bao gồm:

Đặc tả chi tiết

Use-case name Chỉnh sửa thông tin cá nhân

Created by Trần Lê Anh Quân Last updated by Vương Chí Cường

Created at 16/11/2020 Last updated at 21/07/2021

Actor Người dùng thông thường.

Description Actor thực hiện việc chỉnh sửa thông tin cá nhân bao gồm:

Pre-condition Actor phải ở trang “Cài đặt tài khoản” và đang chọn tab “Thông tin cá nhân”.

Normal Flow 1 Actor nhập các thông tin muốn chỉnh sửa.

2 Actor nhấn vào nút “Lưu”.

3 Hệ thống lưu các thông tin mới được chỉnh sửa.

4 Màn hình hiện thông báo “Chỉnh sửa thông tin cá nhân thành công” Đồng thời nút “Lưu” sẽ không cho phép nhấn nữa cho tới khi có thêm sự chỉnh sửa mới.

Bảng 2: Bảng đặc tả chi tiết use-case Chỉnh sửa thông tin cá nhân.

Thay đổi ảnh đại diện

Kịch bản

Người dùng thông thường có thể thay đổi ảnh đại diện của mình.

Đặc tả chi tiết

Use-case name Thay đổi ảnh đại diện

Created by Trần Lê Anh Quân Last updated by Vương Chí Cường

Created at 17/11/2020 Last updated at 21/07/2021

Actor Người dùng thông thường.

Description Actor thay đổi ảnh đại diện của bản thân.

Pre-condition  Actor phải ở trang “Cài đặt tài khoản” và đang chọn tab

 Actor phải đang ở trang “Thông tin cá nhân” của chính mình.

Post-condition Các ảnh cũ sẽ bị xóa khỏi dữ liệu trên đám mây và hệ thống máy chủ.

Normal Flow 1 Actor nhấn vào hình đại diện.

2 Một popup hiện ra yêu cầu người dùng chọn một ảnh để thay đổi.

3 Ảnh mới sẽ được tải lên trên hệ thống dữ liệu đám mây.

4 Hệ thống máy chủ lưu thông tin đường dẫn tới ảnh mới vừa được lưu.

2a Nếu ảnh vượt quá kích thước cho phép là 4 MB thì sẽ hiển thị thông báo “Ảnh vượt quá kích thước cho phép” rồi kết thúc Normal Flow.

Bảng 3: Bảng đặc tả chi tiết use-case Thay đổi ảnh đại diện.

Xem các thông tin metadata cá nhân

Kịch bản

Người dùng thông thường có thể xem các thông tin metadata (Siêu dữ liệu) cá nhân được thu thập bởi hệ thống trên trang “Thông tin cá nhân”.

Đặc tả chi tiết

Use-case name Xem thông tin metadata cá nhân

Created by Trần Lê Anh Quân Last updated by Vương Chí Cường

Created at 17/11/2020 Last updated at 21/07/2021

Actor Người dùng thông thường.

Diễn viên có thể xem các thông tin metadata (siêu dữ liệu) cá nhân của mình, được lưu trữ bởi hệ thống Tuy nhiên, những thông tin này không thể chỉnh sửa trực tiếp trên trang “Thông tin cá nhân”.

Pre-condition Actor phải ở trang “Thông tin cá nhân”.

Normal Flow 1 Actor mở tab tương ứng với thông tin metadata muốn xem.

Các thông tin metadata có thể xem được bao gồm:

– Danh sách các Khóa học đã/đang học hoặc dạy.

– Danh sách các Nhóm đang tham gia.

– Danh sách các đã đạt được.

2 Tùy vào mỗi tab thì Actor có thêm các thao tác phụ trợ trên từng đơn vị trong danh sách như:

Chuyển đến các trang chính của Khóa học.

Chuyển đến trang chính của Nhóm.

Chuyển đến trang “Thông tin cá nhân” của bạn bè.

Bảng 4: Bảng đặc tả chi tiết use-case Xem các thông tin metadata cá nhân.

Kết bạn

Kịch bản

Người dùng có khả năng gửi lời mời kết bạn cho những người khác, giúp tạo ra kết nối Chức năng bạn bè cho phép người dùng nhắn tin riêng tư, nâng cao trải nghiệm giao tiếp trên nền tảng.

Đặc tả chi tiết

Use-case name Kết bạn.

Created by Trần Lê Anh Quân Last updated by Vương Chí Cường

Created at 10/12/2020 Last updated at 21/07/2021

Actor Người dùng thông thường.

Description Actor gửi lời mời kết bạn với người dùng chưa nằm trong danh sách bạn bè và có thể truy cập được bởi Actor.

Pre-condition  Actor phải ở trang Thông tin cá nhân của người dùng đích mà actor muốn kết bạn.

 Người dùng đích phải chưa là bạn của Actor.

Post-condition Người dùng đích sẽ có thông báo lời mời kết bạn từ Actor.

Normal Flow Để điều hướng đến trang Thông tin cá nhân của người dùng khác, actor có thể:

1 Tìm kiếm trong thanh tìm kiếm ở mục Bạn bè trong Thông tin cá nhân.

2 Chọn vào danh sách bạn bè được gợi ý bởi hệ thống.

Sau khi đã điều hướng đến trang Thông tin cá nhân của người dùng đích, actor nhấn vào nút “Kết bạn”.

Bảng 5: Bảng đặc tả chi tiết use-case Kết bạn.

Nhắn tin riêng tư (trực tiếp)

Kịch bản

Người dùng có thể dễ dàng gửi tin nhắn trực tiếp cho bạn bè, và điều này cũng áp dụng cho việc giao tiếp giữa giáo viên và học viên.

Use-case name Nhắn tin riêng tư (trực tiếp)

Created by Trần Lê Anh Quân Last updated by Vương Chí Cường

Created at 25/11/2020 Last updated at 21/07/2021

Actor Người dùng thông thường.

Description Người dùng thông thường gửi tin nhắn trực tiếp với nhau thông qua danh sách bạn bè.

Normal Flow 1 Actor nhấn vào biểu tượng “Nhắn tin” ở thanh điều hướng.

2 Actor chọn người dùng mà mình muốn nhắn tin trong danh sách người dùng.

3 Actor nhập nội dung mình muốn nhắn.

4 Actor nhấn Gửi để gửi tin nhắn.

5 Tin nhắn sẽ được hiển thị ở hộp thoại nhắn tin.

Bảng 6: Bảng đặc tả chi tiết use-case Nhắn tin riêng tư (trực tiếp).

Kịch bản

Người dùng thông thường có khả năng xóa tin nhắn đã gửi, tuy nhiên, tin nhắn bị xóa vẫn hiển thị trong lịch sử tin nhắn với các actor liên quan dưới dạng tin nhắn có nội dung đặc biệt.

Tin nhắn đã bị xóa.

Đặc tả chi tiết

Use-case name Xóa tin nhắn.

Created by Trần Lê Anh Quân Last updated by Vương Chí Cường

Created at 25/11/2020 Last updated at 21/07/2020

Actor Người dùng thông thường.

Description Người dùng thông thường xóa tin nhắn trong lịch sử nhắn tin

Pre-condition Actor phải ở trang “Nhắn tin” và đang ở hộp thoại nhắn tin với người dùng khác.

Post-condition Tin nhắn bị xóa sẽ hiển thị nội dung Tin nhắn đã bị xóa đối với người dùng khác actor trong cuộc trò chuyện.

Normal Flow 1 Với mỗi tin nhắn trong danh sách, Actor nhấn nút hình “Dấu 3 chấm”.

2 Popover với các tùy chọn hiện ra.

4 Nội dung của tin nhắn bị xóa sẽ hiển thị Tin nhắn đã bị xóa trong lịch sử tin nhắn.

Bảng 7: Bảng đặc tả chi tiết use-case Xóa tin nhắn.

Yêu cầu tham gia Khóa học

Yêu cầu tham gia Nhóm

Tạo Khóa học

Chỉnh sửa thông tin của Khóa học

Chỉnh sửa phần mô tả tổng quan của Khóa học

Liên kết Nhóm với Khóa học

Gỡ liên kết Nhóm với Khóa học

Thêm thành viên vào Khóa học

Xóa thành viên khỏi Khóa học

Thay đổi vai trò của một thành viên trong Khóa học

Chấp nhận/từ chối yêu cầu tham gia Khóa học

Thêm phần học trong giáo trình của Khóa học

Chỉnh sửa phần học trong giáo trình của Khóa học

Thêm bài học trong giáo trình của Khóa học

Xóa bài học trong giáo trình của Khóa học

Chỉnh sửa phần mô tả cho bài học trong giáo trình của Khóa học

Thêm tập tin đính kèm cho bài học trong giáo trình của Khóa học

Xóa tập tin đính kèm cho bài học trong giáo trình của Khóa học

Tải video lên cho bài học loại Video trong giáo trình của Khóa học

Chỉnh sửa thuộc tính cho bài học loại Quiz trong giáo trình của một Khóa học

Thiết lập Quiz cho bài học loại Quiz trong giáo trình của Khóa học

Chỉnh sửa thuộc tính cho bài học loại Bài tập lớn trong giáo trình của một Khóa học

Chấm điểm bài học loại Bài tập lớn cho các học viên trong Khóa học

Thêm Thành tích cho Khóa học

Truy xuất tài nguyên khóa học

Đánh giá khóa học

Trả lời câu hỏi trong một bài học của Khóa học hoặc của Nhóm

Upvote/downvote một câu hỏi/câu trả lời trong một bài học của Khóa học hoặc của Nhóm

Tạo nhóm

Chỉnh sửa thông tin của Nhóm

Thêm luật lệ cho Nhóm

Chỉnh sửa luật lệ của Nhóm

Xóa bỏ luật lệ của Nhóm

Thay đổi vai trò của thành viên trong Nhóm

Chấp nhận/từ chối yêu cầu tham gia Nhóm

Xóa nhóm

Thêm bài viết/bình luận trong Nhóm

Chỉnh sửa bài viết/bình luận trong Nhóm

Xóa bài viết/bình luận trong Nhóm

Rời Nhóm

Phân tích tiến độ học viên

Phân tích mức độ tham gia của học viên

Phân tích chất lượng khóa học

Entity Relationship Diagram (ERD)

Cơ sở dữ liệu

Tìm kiếm

Hệ thống giới thiệu

Tìm kiếm tương đồng ngữ nghĩa

Giao diện

Ngày đăng: 03/06/2022, 11:30

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Web ArchitectureĐường dẫn: https://en.ryte.com/wiki/Web_ArchitectureLần truy cập cuối: 16/07/2021 Sách, tạp chí
Tiêu đề: Web Architecture
[2] Front-end & Back-endĐường dẫn: https://en.wikipedia.org/wiki/Front_end_and_back_endLần truy cập cuối: 16/07/2021 Sách, tạp chí
Tiêu đề: Front-end & Back-end
[3] Representational state transferĐường dẫn: https://en.wikipedia.org/wiki/Representational_state_transfer Lần truy cập cuối: 16/07/2021.Lần truy cập cuối: 16/07/2021 Sách, tạp chí
Tiêu đề: Representational state transfer
[5] ElasticSearchĐường dẫn: https://www.elastic.co/Lần truy cập cuối: 16/07/2021 Sách, tạp chí
Tiêu đề: ElasticSearch
[6] PostgreSQLĐường dẫn: https://www.postgresql.org/Lần truy cập cuối: 16/07/2021.Lần truy cập cuối: 16/07/2021 Sách, tạp chí
Tiêu đề: PostgreSQL
[12] ElasticSearch from the Bottom UpĐường dẫn: https://www.elastic.co/blog/found-elasticsearch-from-the-bottom-upLần truy cập cuối: 15/07/2021.Lần truy cập cuối: 15/07/2021 Sách, tạp chí
Tiêu đề: ElasticSearch from the Bottom Up
[20] Chandrasekaran, D., & Mago, V. (2021). Evolution of Semantic Similarity—A Survey. ACM Computing Surveys, 54(2), 1–37.Đường dẫn: https://doi.org/10.1145/3440755 Lần truy cập cuối: 16/07/2021.Lần truy cập cuối: 16/07/2021 Sách, tạp chí
Tiêu đề: ACM Computing Surveys, 54
Tác giả: Chandrasekaran, D., & Mago, V
Năm: 2021
[8] Vue RouterĐường dẫn: https://next.router.vuejs.org/Lần truy cập cuối: 16/07/2021.Lần truy cập cuối: 16/07/2021.Lần truy cập cuối: 16/07/2021.Lần truy cập cuối: 16/07/2021 Link
[14] Practical BM25Đường dẫn: https://www.elastic.co/blog/practical-bm25-part-2-the-bm25-algorithm-and-its-variablesLần truy cập cuối: 15/07/2021 Link
[15] Recommender System – Method and EvaluationĐường dẫn: https://towardsdatascience.com/recommendation-systems-models-and-evaluation-84944a84fb8eLần truy cập cuối: 15/07/2021 Link
[16] Recommendation Systems – Google DeveloperĐường dẫn: https://developers.google.com/machine-learning/recommendation/content-based/basicsLần truy cập cuối: 15/07/2021 Link
[17] Surprise and CoincidenceĐường dẫn: http://tdunning.blogspot.com/2008/03/surprise-and-coincidence.htmlLần truy cập cuối: 15/07/2021.Đường dẫn: https://actionml.com/docs Lần truy cập cuối: 15/07/2021 Link
[19] The Universal Recommender SlidesĐường dẫn: https://www.slideshare.net/pferrel/unified-recommender-39986309Lần truy cập cuối: 16/07/2021 Link
[22] Text Similarities : Estimate the degree of similarity between two textsĐường dẫn: https://medium.com/@adriensieg/text-similarities-da019229c894Lần truy cập cuối: 16/07/2021 Link

HÌNH ẢNH LIÊN QUAN

Hình dưới đây minh họa kỹ thuật đánh index ngược cho ba câu văn đơn giản1 - Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội
Hình d ưới đây minh họa kỹ thuật đánh index ngược cho ba câu văn đơn giản1 (Trang 25)
Hình 12: Sơ đồ use-case của Người dùng thông thường. - Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội
Hình 12 Sơ đồ use-case của Người dùng thông thường (Trang 42)
Pre-condition Actor đang ở trang “Bảng điều khiển” của một Khóa học và đang ở tab “Thông tin” - Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội
re condition Actor đang ở trang “Bảng điều khiển” của một Khóa học và đang ở tab “Thông tin” (Trang 56)
Pre-condition Actor đang ở trang “Bảng điều khiển” của một Khóa học và đang ở tab “Thành viên”. - Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội
re condition Actor đang ở trang “Bảng điều khiển” của một Khóa học và đang ở tab “Thành viên” (Trang 59)
Pre-condition Actor đang ở trang “Bảng điều khiển” của một Khóa học và đang ở tab “Thành viên”. - Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội
re condition Actor đang ở trang “Bảng điều khiển” của một Khóa học và đang ở tab “Thành viên” (Trang 60)
Pre-condition Actor đang ở trang “Bảng điều khiển” của một Khóa học và đang ở tab “Thành viên”. - Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội
re condition Actor đang ở trang “Bảng điều khiển” của một Khóa học và đang ở tab “Thành viên” (Trang 61)
Pre-condition Actor đang ở trang “Bảng điều khiển” của một Khóa học và đang ở tab “Giáo trình” - Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội
re condition Actor đang ở trang “Bảng điều khiển” của một Khóa học và đang ở tab “Giáo trình” (Trang 62)
2. Màn hình hiển thị video cho phép xem trước trước khi được tải lên. - Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội
2. Màn hình hiển thị video cho phép xem trước trước khi được tải lên (Trang 69)
Bảng 33: Bảng đặc tả chi tiết use-case Truy xuất tài nguyên khóa học. - Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội
Bảng 33 Bảng đặc tả chi tiết use-case Truy xuất tài nguyên khóa học (Trang 74)
Pre-condition Acto rở trang “Bảng điều khiển” của một Nhóm và đang chọn tab “Luật lệ” - Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội
re condition Acto rở trang “Bảng điều khiển” của một Nhóm và đang chọn tab “Luật lệ” (Trang 79)
Pre-condition Acto rở trang “Bảng điều khiển” của một Nhóm và đang chọn tab “Luật lệ” - Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội
re condition Acto rở trang “Bảng điều khiển” của một Nhóm và đang chọn tab “Luật lệ” (Trang 81)
Pre-condition Acto rở trang “Bảng điều khiển” của một Nhóm và đang ở tab “Cài đặt” - Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội
re condition Acto rở trang “Bảng điều khiển” của một Nhóm và đang ở tab “Cài đặt” (Trang 83)
Bảng 46: Bảng đặc tả chi tiết use-case Thêm bài viết trong Nhóm. - Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội
Bảng 46 Bảng đặc tả chi tiết use-case Thêm bài viết trong Nhóm (Trang 84)
Bảng 47: Bảng đặc tả chi tiết use-case Chỉnh sửa bài viết/bình luận trong Nhóm. - Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội
Bảng 47 Bảng đặc tả chi tiết use-case Chỉnh sửa bài viết/bình luận trong Nhóm (Trang 85)
Normal Flow 1. Actor nhấn nút hình dấu “3 chấm” ở vị trí của bài viết/bình - Xây dựng hệ quản trị đào tạo tích hợp mạng xã hội
ormal Flow 1. Actor nhấn nút hình dấu “3 chấm” ở vị trí của bài viết/bình (Trang 85)

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN