Để hoàn thành đề tài này, chúng em xin gửi lời cảm ơn chân thành đến: Ban Giám hiệu trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM vì đã tạo điều kiện về cơ sở vật chất với hệ thống th
GIỚI THIỆU CHUNG
Thực trạng nhu cầu nghe nhạc hiện nay
Hiện nay, dưới sự phát triển của xã hội, nhu cầu giải trí của con người ngày càng tăng mạnh Tại Việt Nam, có khoảng 68,17 triệu người dùng Internet mỗi ngày, và mỗi người dành trung bình khoảng 1 giờ 1 phút để nghe nhạc.
Trước nhu cầu khổng lồ về âm nhạc, thị trường âm nhạc ngày càng phát triển và liên tục ra mắt nhiều bài hát mới đến với người dùng Tuy nhiên, sự đa dạng đó cũng đặt ra các vấn đề như làm sao tìm được một bài hát khi vô tình nghe ở quán ăn hay ở một địa điểm bất kỳ, hoặc khi bạn chỉ nhớ giai điệu từ thời thơ ấu mà không thể nhớ tên bài hát là gì; và làm thế nào để gợi ý sản phẩm âm nhạc phù hợp với sở thích của từng người dùng? Giải pháp nằm ở hệ thống tìm kiếm bài hát hiệu quả và đề xuất âm nhạc được cá nhân hóa dựa trên thói quen nghe nhạc và sở thích riêng, giúp người dùng dễ dàng tìm lại bài hát và khám phá đúng nội dung âm nhạc phù hợp.
Lý do chọn đề tài
Nhờ sự phát triển của công nghệ thông tin và sự bùng nổ của Machine Learning, việc giải các bài toán xử lý âm thanh ngày càng khả thi Để vận dụng những kiến thức đã trang bị và khám phá các công nghệ hiện đại về xử lý âm thanh và Deep Learning, nhóm quyết định hiện thực hóa các công nghệ này nhằm tạo ra các sản phẩm mang lại lợi ích cho người dùng và nhà phát hành nhạc Do đó, chúng em chọn đề tài “Xây dựng Website Nghe Nhạc Kết Hợp Nhận Diện Nhạc Qua Giai Điệu Và Đề Xuất” làm đề tài nghiên cứu cho khóa luận tốt nghiệp.
Đối tượng nghiên cứu
Khoá luận này hướng đến nghiên cứu các đối tượng sau:
● Back-end: Net Core, Flask
− Đối tượng trong phạm vi đề tài hướng đến:
● Cá nhân, tổ chức phát hành bài hát
● Các công ty trong lĩnh vực nghe nhạc trực tuyến
Phạm vi nghiên cứu
- Phạm vi địa lý: Trong lãnh thổ Việt Nam
- Phạm vi người sử dụng: Người Việt Nam
- Phạm vi nội dung bài hát: Nhạc Việt, Âu Mỹ và Hàn Quốc
● Backend (Music Service): ASP NET
Phương pháp nghiên cứu
Nhóm đã sử dụng các phương pháp:
- Phương pháp đọc tài liệu
- Phân tích các app tương tự
KIẾN THỨC NỀN TẢNG
Tổng quan về NET
ASP.NET Core là một framework web mã nguồn mở do Microsoft phát triển, ra mắt năm 2016 và được xem là người kế nhiệm của ASP.NET Nó được thiết kế lại từ đầu để tối ưu tốc độ và tính linh hoạt, đồng thời chạy được trên nhiều nền tảng như Windows, Linux và macOS, giúp các ứng dụng web và dịch vụ đám mây dễ triển khai và mở rộng.
Mỗi ứng dụng NodeJS chạy trên một process đơn và không tạo thêm luồng mới cho mỗi request, đây là điểm khác biệt so với các môi trường thực thi khác như DotNetCore Thay vào đó, NodeJS sử dụng cơ chế bất đồng bộ I/O để xử lý các tác vụ nhập/xuất và sự kiện một cách hiệu quả, giúp tối ưu hóa hiệu suất và khả năng xử lý đồng thời mà không làm gián đoạn các request.
(non-blocking I/O) để quản lý các request thay vì chặn chúng nhằm giảm thiểu việc tốn tài nguyên xử lý Nhờ cơ chế này, Node.js có thể xử lý hàng nghìn kết nối đồng thời một cách hiệu quả, giảm thiểu thời gian chờ và tăng hiệu suất cho ứng dụng web Việc không chặn cho phép máy chủ tiếp tục xử lý các yêu cầu khác trong khi đang xử lý một yêu cầu, từ đó tối ưu hóa tài nguyên và khả năng mở rộng hệ thống, đặc biệt với lưu lượng truy cập lớn.
Hình 2.2.1 Net core và Net framework
7 thời với 1 server duy nhất mà không cần nhà phát triển phải bỏ công sức và thời gian để quản lí các luồng
2.2.2 Tạo sao chọn NET core để phát triển server
− Hợp nhất việc 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
− 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 bạn
− Được xây dựng trên NET Core, hỗ trợ thực sự app versioning
− Chuyển các thực thể, thành phần, module như những NuGet packages
− Những 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 (Windows, Mac và Linux)
− Mã nguồn mở và tập trung vào cộng đồng
Angular
− Dễ dàng tạo ra các Single Page Application
− Mang lại cảm giác linh hoạt, thân thiện khi cung cấp khả năng data binding tới HTML
− Tái sử dụng component một cách dễ dàng
− Tiết kiệm thời gian viết code và tích hợp nhiều chức năng hơn
− Chạy được trên nhiều loại trình duyệt
Hệ quản trị cơ sở dữ liệu MongoDB
MongoDB là hệ quản trị cơ sở dữ liệu NoSQL mã nguồn mở Khác với cơ sở dữ liệu quan hệ truyền thống dùng bảng và hàng, MongoDB lưu trữ dữ liệu dưới dạng collection và document, giúp mô hình hóa dữ liệu linh hoạt cho các ứng dụng hiện đại Dữ liệu được lưu trữ ở dạng tài liệu BSON, cho phép schema linh hoạt và dễ mở rộng Các đặc điểm nổi bật của MongoDB gồm khả năng mở rộng theo chiều ngang, sao lưu và phục hồi nhờ replica sets, và hệ thống chỉ mục cùng các truy vấn mạnh mẽ cho tìm kiếm nhanh trên kho dữ liệu lớn.
● Khác với SQL, MongoDB không cần định nghĩa sẵn các schema, các trường có thể được thêm vào trực tiếp
Trong hệ thống, mỗi document được thể hiện dưới dạng các cặp key-value, tương tự như định dạng JSON Các document có thể chứa nhiều key và value với kích thước và nội dung khác nhau, không bị giới hạn như SQL Chính tính linh hoạt và thiếu một schema cố định cho phép lưu trữ dữ liệu đa dạng, dễ mở rộng và dễ truy vấn.
Mỗi trường có thể lưu trữ nhiều loại kiểu dữ liệu từ đơn giản (như number, string) đến phức tạp (Object, Array, …)
Collection: Mỗi collection sẽ chứa nhiều Document và các phương thức hỗ trợ thao tác lên dữ liệu
Hình 2.4.1 So sánh mức độ phổ biến của MongoDB
− MongoDB lưu trữ dữ liệu dễ dàng, linh hoạt và dễ dàng mở rộng vì dữ liệu trong MongoDB không có sự ràng buộc lẫn nhau
− MongoDB có tốc độ truy vấn nhanh hơn so với các cơ sở dữ liệu quan hệ
− MongoDB có khả năng mở rộng tốt thông qua các cluster.
Flask
Bên cạnh Django, Flask là một web framework rất phổ biến, nhẹ và dễ sử dụng, phù hợp cho người mới bắt đầu cũng như các nhà khoa học dữ liệu muốn xây dựng API để hỗ trợ triển khai và tích hợp các mô hình học máy Flask cho phép phát triển API nhanh chóng và linh hoạt, giúp bạn kết nối mô hình học máy với ứng dụng web hoặc dịch vụ đám mây một cách an toàn và có thể mở rộng.
2.5.2 Tại sao sử dụng Flask
Flask là một framework Python dễ sử dụng với cú pháp đơn giản, giúp giảm thời gian xây dựng backend và cho phép lập trình viên phát triển nhanh hơn và hiệu quả hơn Nhờ tính linh hoạt và dễ tiếp cận, Flask hỗ trợ từ thiết kế đến triển khai thực tế, đẩy nhanh tiến độ phát triển ứng dụng Cộng đồng hỗ trợ Flask tương đối rộng và có nhiều tài liệu phong phú từ cài đặt đến triển khai, giúp người dùng dễ học hỏi và áp dụng Với những ưu điểm này, Flask là lựa chọn phù hợp cho các dự án từ nhỏ đến quy mô lớn.
Keras
Keras là một thư viện nguồn mở cho mạng nơ-ron, được viết bằng Python và dựa trên một kiến trúc tối giản, cho phép người dùng nhanh chóng xây dựng các mô hình Deep Learning với nhiều tính năng hữu ích.
● API đơn giản và dễ dàng mở rộng
● Hỗ trợ nhiều nền tảng và backends
● Là một framework thân thiện với người dùng có thể chạy trên cả CPU và GPU
2.6.2 Tại sao sử dụng Keras
Keras có một cộng đồng hỗ trợ lớn và tài liệu chi tiết dễ dàng cho việc nghiên cứu, cung cấp sẵn các mô hình giúp việc xây dựng mô hình máy học trở nên đơn giản hơn chỉ qua các bước cơ bản như chọn mô hình phù hợp, huấn luyện và đánh giá hiệu suất.
● Chuẩn bị data cho việc training model
● Xây dựng mô hình máy học
● Train mô hình dựa trên phương thức fit() của Keras
● Đánh giá mô hình dựa trên dữ liệu test
Ngoài ra Chúng ta có thể tăng tốc tốc độ huấn luyện mô hình bằng cách sử dụng nhiều GPU
PHÂN TÍCH
Xây dựng hệ thống
3.2.1 Xây dựng kiến trúc hệ thống
Hệ thống bao gồm các thành phần sau:
Web (client) đảm nhận giao diện cho người dùng tương tác với hệ thống, cho phép gửi yêu cầu và nhận kết quả hiển thị lên màn hình Client giao tiếp với Server theo mô hình Request/Response để yêu cầu xử lý thông tin và nhận phản hồi từ phía server Web (client) được hiện thực hóa bằng Angular, giúp xây dựng giao diện người dùng động và tối ưu hóa trải nghiệm người dùng.
⎼ Server (.NET Core): Nhận và xử lý các request về tính năng nghe nhạc từ
Client có thể tương tác với Database để thực hiện các thao tác dữ liệu và nhận kết quả trả về thông qua Response Server được hiện thực hóa bằng sự kết hợp giữa NET Core và Python, tối ưu cho hiệu suất và khả năng mở rộng Kiến trúc này cho phép giao tiếp API giữa frontend và backend, quản lý dữ liệu một cách nhất quán và đáp ứng nhanh các yêu cầu truy vấn dữ liệu từ Client.
⎼ Database: Lưu trữ toàn bộ dữ liệu của hệ thống
Hình 3.2.1 Kiến trúc hệ thống của Website
⎼ Storage: Lưu trữ các file BLOB quá nặng mà Database không thể lưu trữ tốt 3.2.2 Thiết kế hệ thống
3.2.2.1 Đặc tả Usecase Đăng ký
Tên chức năng Đăng ký
Tóm tắt Chức năng đăng ký vào hệ thống
Dòng sự kiện chính 1 Hệ thống hiển thị biểu mẫu đăng ký
2 Người dung nhập các trường thông tin đăng ký và nhấn “Đăng ký”
3 Hệ thống kiểm tra thông tin đăng ký và thực hiện đăng ký
(Dòng sự kiện khác: Đăng ký không thành công)
4 Hệ thống hiển thị đăng ký thành công và chuyển qua trang đăng nhập
Dòng sự kiện khác 1 Đăng ký không thành công:
Hệ thống hiển thị thông báo tài khoản đăng ký không hợp lệ hoặc lỗi
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Anonymous Điều kiện: không có
Trạng thái hệ thống sau khi thực hiện use case
Không có Điểm mở rộng Không có
Bảng 3.2.1 Đặc tả Usecase Đăng ký
3.2.2.2 Đặc tả Usecase Đăng nhập
Tên chức năng Đăng nhập
Tóm tắt Chức năng đăng nhập vào hệ thống
Dòng sự kiện chính 1 Hệ thống hiển thị biểu mẫu đăng nhập
2 Người dùng nhập tên và tài khoản (cả 2 trường này đều bắt buộc nhập) và nhấn “Đăng nhập”
3 Hệ thống kiểm tra thông tin đăng nhập
(Dòng sự kiện khác: Thông tin đăng nhập sai)
4 Hệ thống hiển thị form chính
Dòng sự kiện khác 1 Thông tin đăng nhập sai:
Hệ thống hiển thị thông báo tài khoản đăng nhập không hợp lệ
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Admin Điều kiện: không có
Trạng thái hệ thống sau khi thực hiện use case
Không có Điểm mở rộng Không có
Bảng 3.2.2 Đặc tả Usecase Đăng nhập
3.2.2.3 Đặc tả Usecase Đăng Xuất
Tên chức năng Đăng xuất
Tóm tắt Chức năng đăng xuất ra hệ thống
Dòng sự kiện chính 1 Người dùng nhấn vào Đăng xuất
2 Hệ thống đăng xuất và trở về màn hình chính
Dòng sự kiện khác Không có
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực hiện use case
Actor: Admin Điều kiện: người dùng đã đăng nhập hệ thống
Trạng thái hệ thống sau khi thực hiện use case
Không có Điểm mở rộng Không có
Bảng 3.2.3 Đặc tả Usecase Đăng Xuất
3.2.2.4 Đặc tả Usecase Bảng xếp hạng
Tên chức năng Bảng xếp hạng
Tóm tắt Người dùng xem bảng xếp hạng các nghệ sĩ và bài hát dựa trên lượt nghe, thích
Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ
2 Hệ thống hiển thị bảng xếp hạng
Dòng sự kiện khác Không có
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Anonymous Điều kiện: Không có
Trạng thái hệ thống sau khi thực hiện use case
Không có Điểm mở rộng Không có
Bảng 3.2.4 Đặc tả Usecase Bảng xếp hạng
3.2.2.5 Đặc tả Usecase Nghe nhạc
Tên chức năng Nghe nhạc
Tóm tắt Người dùng lựa chọn và phát bài nhạc mong muốn
Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ
2 Người dùng nhấn vào nút Play trên bài nhạc
Dòng sự kiện khác Không có
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Anonymous Điều kiện: Không có
Trạng thái hệ thống Không có
22 sau khi thực hiện use case Điểm mở rộng Xem lyrics
Bảng 3.2.5 Đặc tả Usecase Nghe nhạc
3.2.2.6 Đặc tả Usecase Xem Lyrics
Tên chức năng Xem Lyrics
Tóm tắt Người dùng lựa chọn bài nhạc và xem lời bài hát
Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ
2 Người dùng nhấn vào nút Play trên bài nhạc
4 Người dùng chọn nút Player trên thang Sidenav để chuyển đến giao diện phát nhạc lớn
5 Hệ thống hiển thị lời bài hát khớp với thời gian
Dòng sự kiện khác Không có
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Anonymous Điều kiện: Không có
Trạng thái hệ thống sau khi thực hiện use case
Không có Điểm mở rộng Không có
Bảng 3.2.6 Đặc tả Usecase Xem Lyrics
Tóm tắt Người dùng lựa chọn bài nhạc và hát Karaoke
Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ
2 Người dùng nhấn vào nút Play trên bài nhạc
4 Người dùng chọn nút Player trên thang Sidenav để chuyển đến giao diện phát nhạc lớn
5 Hệ thống hiển thị lời bài hát khớp với thời gian
6 Người dùng chọn nút Karaoke để chuyển qua Karaoke Mode
7 Hệ thống thu âm lại đoạn Karaoke
Dòng sự kiện khác Không có
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Anonymous Điều kiện: Không có
Trạng thái hệ thống sau khi thực hiện use case
Không có Điểm mở rộng Thu âm
Bảng 3.2.7 Đặc tả Usecase Karaoke
3.2.2.8 Đặc tả Usecase Tương tác với bài nhạc
Tên chức năng Tương tác với bài nhạc
Tóm tắt Người dùng lựa chọn bài nhạc và tương tác với bài hát
Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ
2 Người dùng nhấn vào nút Like/Download trên bài nhạc
3 Hệ thống ghi nhận các hoạt động của người dùng
Dòng sự kiện khác Không có
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Anonymous Điều kiện: Không có
Trạng thái hệ thống sau khi thực hiện use
Hệ thống ghi nhận các hoạt động của người dùng
24 case Điểm mở rộng Không có
Bảng 3.2.8 Đặc tả Usecase Tương tác với bài nhạc
3.2.2.9 Đặc tả Usecase Playlist cá nhân
Tên chức năng Playlist cá nhân
Tóm tắt Người dùng lựa chọn bài nhạc và thêm vào playlist
Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ
2 Người dùng nhấn vào nút Add to playlist trên bài nhạc
3 Hệ thống hiển thị danh sách Playlist
4 Người dùng thêm bài nhạc vào Playlist
Dòng sự kiện khác Không có
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Anonymous Điều kiện: Không có
Trạng thái hệ thống sau khi thực hiện use case
Không có Điểm mở rộng Không có
Bảng 3.2.9 Đặc tả Usecase Playlist cá nhân
3.2.2.10 Đặc tả Usecase Gợi ý âm nhạc
Tên chức năng Gợi ý âm nhạc
Tóm tắt Người dùng được gợi ý các bài hát phù hợp với bản thân
Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ
2 Người dùng nhấn vào nút Play trên bài nhạc
4 Người dùng chọn nút Player trên thang Sidenav để chuyển đến giao diện phát nhạc lớn
5 Hệ thống hiển thị lời bài hát khớp với thời gian
Dòng sự kiện khác Không có
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Anonymous Điều kiện: Không có
Trạng thái hệ thống sau khi thực hiện use case
Không có Điểm mở rộng Không có
Bảng 3.2.10 Đặc tả Usecase Gợi ý âm nhạc
3.2.2.11 Đặc tả Usecase Tìm kiếm bài hát
Tên chức năng Tìm kiếm bài hát
Tóm tắt Người dùng tìm kiếm bài hát mong muốn
Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ
2 Người dùng nhấn vào nút Search trên Side Nav
3 Hệ thống hiển thị ra khung search
4 Người dùng nhập nội dung tìm kiếm
5 Hệ thống hiển thị danh sách kết quả tìm kiếm
Dòng sự kiện khác Không có
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Anonymous Điều kiện: Không có
Trạng thái hệ thống sau khi thực hiện use case
Hệ thống hiển thị danh sách kết quả tìm kiếm Điểm mở rộng Nhận diện nhạc qua giai điệu
Bảng 3.2.11 Đặc tả Usecase Tìm kiếm bài hát
3.2.2.12 Đặc tả Usecase Nhận diện nhạc qua giai điệu
Tên chức năng Nhận diện nhạc qua giai điệu
Tóm tắt Nhận diện một đoạn nhạc cần tìm kiếm
Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ
2 Người dùng nhấn vào nút Search trên Sidenav
3 Hệ thống hiển thị ra khung search
4 Người dùng nhấn vào nút Micro
5 Hệ thống hiển thị trang tìm kiếm qua giai điệu
6 Người dùng lựa chọn thu âm hoặc tải lên đoạn nhạc cần tìm kiếm
7 Hệ thống trả về kết quả tìm kiếm dựa trên độ chính xác
Dòng sự kiện khác Không có
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Trạng thái hệ thống sau khi thực hiện use case
Hệ thống nhận diện và trả kết quả cho người dung Điểm mở rộng Không có
Bảng 3.2.12 Đặc tả Usecase Nhận diện nhạc qua giai điệu
3.2.2.13 Đặc tả Usecase Quản lý profile
Tên chức năng Quản lý profile
Tóm tắt Người dùng quản lý profile cá nhân
Dòng sự kiện chính 1 Người dùng truy cập vào trang chủ
2 Người dùng nhấn vào nút Profile trên Side Nav
3 Hệ thống hiển thị ra form Profile
4 Người dùng nhập nội dung chỉnh sửa
5 Hệ thống lưu lại kết quả chỉnh sửa
Dòng sự kiện khác Không có
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Anonymous Điều kiện: Không có
Trạng thái hệ thống sau khi thực hiện use case
Hệ thống lưu lại kết quả chỉnh sửa Điểm mở rộng Không có
Bảng 3.2.13 Đặc tả Usecase Quản lý Profile
3.2.2.14 Đặc tả Usecase Thêm bài hát
Tên chức năng Thêm bài hát
Tóm tắt Thêm bài hát vào cơ sở dữ liệu của hệ thống
Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị
2 Người dùng chọn trang quản trị bài hát
3 Người dùng chọn Thêm bài hát
4 Người dùng nhập điền đầy đủ thông tin bài hát
6 Hệ thống Thêm bài hát
Dòng sự kiện khác Không thể thêm bài hát
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống
Trạng thái hệ thống sau khi thực hiện use case
Hệ thống thêm bài hát vào cơ sở dữ liệu
28 Điểm mở rộng Không có
Bảng 3.2.14 Đặc tả Usecase Thêm bài hát
3.2.2.15 Đặc tả Usecase Sửa bài hát
Tên chức năng Sửa bài hát
Tóm tắt Sửa bài hát vào cơ sở dữ liệu của hệ thống
Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị
2 Người dùng chọn trang quản trị bài hát
3 Người dùng chọn Sửa bài hát
4 Người dùng nhập điền đầy đủ thông tin cần sửa
6 Hệ thống Sửa bài hát
Dòng sự kiện khác Không thể sửa bài hát
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống
Trạng thái hệ thống sau khi thực hiện use case
Hệ thống sửa bài hát trong cơ sở dữ liệu Điểm mở rộng Không có
Bảng 3.2.15 Đặc tả Usecase Sửa bài hát
3.2.2.16 Đặc tả Usecase Xóa bài hát
Tên chức năng Xóa bài hát
Tóm tắt Xóa bài hát vào cơ sở dữ liệu của hệ thống
Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị
2 Người dùng chọn trang quản trị bài hát
3 Người dùng chọn Xóa bài hát
4 Hệ thống hiện hộp thoại “Xác nhận xóa”
5 Người dùng nhấn “Xác nhận”
6 Hệ thống Xóa bài hát
Dòng sự kiện khác Không thể xóa bài hát
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống
Trạng thái hệ thống sau khi thực hiện use case
Hệ thống xóa bài hát trong cơ sở dữ liệu Điểm mở rộng Không có
Bảng 3.2.16 Đặc tả Usecase Xóa bài hát
3.2.2.17 Đặc tả Usecase Thêm nghệ sĩ
Tên chức năng Thêm nghệ sĩ
Tóm tắt Thêm nghệ sĩ vào cơ sở dữ liệu của hệ thống
Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị
2 Người dùng chọn trang quản trị nghệ sĩ
3 Người dùng chọn Thêm nghệ sĩ
4 Người dùng nhập điền đầy đủ thông tin nghệ sĩ
6 Hệ thống Thêm nghệ sĩ
Dòng sự kiện khác Không thể thêm nghệ sĩ
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống
Trạng thái hệ thống sau khi thực hiện use case
Hệ thống thêm nghệ sĩ vào cơ sở dữ liệu
30 Điểm mở rộng Không có
Bảng 3.2.17 Đặc tả Usecase Thêm nghệ sĩ
3.2.2.18 Đặc tả Usecase Sửa nghệ sĩ
Tên chức năng Sửa nghệ sĩ
Tóm tắt Sửa nghệ sĩ vào cơ sở dữ liệu của hệ thống
Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị
2 Người dùng chọn trang quản trị nghệ sĩ
3 Người dùng chọn Sửa nghệ sĩ
4 Người dùng nhập điền đầy đủ thông tin cần sửa
6 Hệ thống Sửa thông tin nghệ sĩ
Dòng sự kiện khác Không thể sửa nghệ sĩ
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống
Trạng thái hệ thống sau khi thực hiện use case
Hệ thống sửa thông tin nghệ sĩ trong cơ sở dữ liệu Điểm mở rộng Không có
Bảng 3.2.18 Đặc tả Usecase Sửa nghệ sĩ
3.2.2.19 Đặc tả Usecase Xóa nghệ sĩ
Tên chức năng Xóa nghệ sĩ
Tóm tắt Xóa nghệ sĩ vào cơ sở dữ liệu của hệ thống
Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị
2 Người dùng chọn trang quản trị nghệ sĩ
3 Người dùng chọn Xóa nghệ sĩ
4 Hệ thống hiện hộp thoại “Xác nhận xóa”
5 Người dùng nhấn “Xác nhận”
6 Hệ thống Xóa nghệ sĩ
Dòng sự kiện khác Không thể xóa nghệ sĩ
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống
Trạng thái hệ thống sau khi thực hiện use case
Hệ thống xóa nghệ sĩ trong cơ sở dữ liệu Điểm mở rộng Không có
Bảng 3.2.19 Đặc tả Usecase Xóa nghệ sĩ
3.2.2.20 Đặc tả Usecase Thêm người dùng
Tên chức năng Thêm người dùng
Tóm tắt Thêm người dùng vào cơ sở dữ liệu của hệ thống
Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị
2 Người dùng chọn trang quản trị người dùng
3 Người dùng chọn Thêm người dùng
4 Người dùng nhập điền đầy đủ thông tin người dùng
6 Hệ thống Thêm người dùng
Dòng sự kiện khác Không thể thêm người dùng
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống
Trạng thái hệ thống sau khi thực hiện use case
Hệ thống thêm người dùng vào cơ sở dữ liệu
32 Điểm mở rộng Không có
Bảng 3.2.20 Đặc tả Usecase Thêm người dùng
3.2.2.21 Đặc tả Usecase Sửa người dùng
Tên chức năng Sửa người dùng
Tóm tắt Sửa người dùng vào cơ sở dữ liệu của hệ thống
Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị
2 Người dùng chọn trang quản trị người dùng
3 Người dùng chọn Sửa người dùng
4 Người dùng nhập điền đầy đủ thông tin cần sửa
6 Hệ thống Sửa người dùng
Dòng sự kiện khác Không thể sửa người dùng
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống
Trạng thái hệ thống sau khi thực hiện use case
Hệ thống sửa người dùng trong cơ sở dữ liệu Điểm mở rộng Không có
Bảng 3.2.21 Đặc tả Usecase Sửa người dùng
3.2.2.22 Đặc tả Usecase Xóa người dùng
Tên chức năng Xóa người dùng
Tóm tắt Xóa người dùng vào cơ sở dữ liệu của hệ thống
Dòng sự kiện chính 1 Người dùng đăng nhập vào trang quản trị
2 Người dùng chọn trang quản trị người dùng
3 Người dùng chọn Xóa người dùng
4 Hệ thống hiện hộp thoại “Xác nhận xóa”
5 Người dùng nhấn “Xác nhận”
6 Hệ thống Xóa người dùng
Dòng sự kiện khác Không thể xóa người dùng
Các yêu cầu đặc biệt Không có
Trạng thái hệ thống trước khi thực thiện use case
Actor: Admin Điều kiện: Người dùng đã đăng nhập hệ thống
Trạng thái hệ thống sau khi thực hiện use case
Hệ thống xóa người dùng trong cơ sở dữ liệu Điểm mở rộng Không có
Bảng 3.2.22 Đặc tả Usecase Xóa người dùng
Phân tích
3.3.1.2 Danh sách lớp đối tượng và quan hệ
STT Tên lớp/quan hệ Ý nghĩa/Ghi chú
1 Song Thông tin bài hát
2 Fingerprint Fingerprint của bài hát
Hình 3.3.1 Sơ đồ lớp hệ thống nhận diện
3 TimePrequency Thời điểm nốt nhạc xuất hiện
Bảng 3.3.1 Danh sách lớp hệ thống nhận diện
3.3.1.3 Mô tả chi tiết từng đối tượng a) Song
STT Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú
1 Id int public Mã của bài hát
2 SongId string public Id bài hát ở Music Server
Bảng 3.3.2 Danh sách thuộc tính của Song
STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú
1 Create ActionResult public Tạo thêm bài hát
2 GetById Object public Trả về thông tin bài hát
3 Edit ActionResult public Sửa thông tin bài hát
Bảng 3.3.3 Danh sách phương thức của Song b) Fingerprint
STT Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú
1 Id int public Mã của fingerprint
2 FTP Object public Danh sách TimeFrequency của bài hát
3 Song_Id int public Mã của bài hát
Bảng 3.3.4 Danh sách thuộc tính của Fingerprint
STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú
1 Create ActionResult public Tạo Fingerprint
2 GetById Object public Trả về fingerprint
3 GetList ActionResult public Trả về danh sách Fingerprint
Bảng 3.3.5 Danh sách phương thức của Fingerprint c) TimeFrequency
STT Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú
1 Time int public Thời gian nốt xuất hiện
2 Frequency int public Nốt xuất hiện
Bảng 3.3.6 Danh sách thuộc tính của TimeFrequency
STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú
1 Create ActionResult public Tạo Fingerprint
Bảng 3.3.7 Danh sách phương thức của TimeFrequency
Hình 3.3.2 Sơ đồ lớp Music Server
3.3.2.2 Danh sách lớp đối tượng và quan hệ
STT Tên lớp/quan hệ Ý nghĩa/Ghi chú
3 ArtistSong Mối liên hệ giữa nghệ sĩ và bài hát
5 GenreSong Mối liên hệ giữa thể loại và bài hát
7 PlaylistSong Mối liên hệ giữa danh sách phát và bài hát
Bảng 3.3.8 Danh sách lớp Music Server
3.3.2.3 Mô tả chi tiết từng đối tượng a) Song
# Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú
1 Id Int public Mã của bài hát
2 Name String public Tên bài hát
3 Thumbnail String public Link ảnh thumbnail
4 Link String public Link file audio
5 LinkBeat String public Link file beat
6 LinkLyric String public Link file lyrics
7 Likes Int public Lượt thích
8 Listen Int public Lượt nghe
9 Download Int public Lượt tải
10 ReleaseDate Time public Ngày phát hành
11 IsDeleted Bool public Đã xóa
12 IsRecognizable Bool public Có thể nhận diện
Bảng 3.3.9 Danh sách thuộc tính của Song
STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú
1 Get List public Danh sách bài hát
2 GetById Object public Tìm bài hát theo Id
3 Edit ActionResult public Sửa thông tin bài hát
4 Create ActionResult public Tạo bài hát
5 Delete ActionResult public Xóa bài hát
Bảng 3.3.10 Danh sách phương thức của Song b) Artist
STT Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú
1 Id Int public Mã của nghệ sĩ
2 Name String public Tên nghệ sĩ
3 Thumbnail String public Link ảnh thumbnail
4 IsDeleted Bool public Đã xóa
Bảng 3.3.11 Danh sách thuộc tính của Artist
STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú
1 Get List public Danh sách nghệ sĩ
2 GetById Object public Tìm nghệ sĩ theo Id
3 Edit ActionResult public Sửa thông tin nghệ sĩ
4 Create ActionResult public Tạo nghệ sĩ
5 Delete ActionResult public Xóa nghệ sĩ
Bảng 3.3.12 Danh sách phương thức của Artist
STT Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú
1 Id Int public Mã của thể loại
2 Name String public Tên thể loại
3 IsDeleted Bool public Đã xóa
Bảng 3.3.13 Danh sách thuộc tính của Genre
STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú
1 Get List public Danh sách thể loại
2 GetById Object public Tìm thể loại theo Id
3 Edit ActionResult public Sửa thông tin thể loại
4 Create ActionResult public Tạo thể loại
5 Delete ActionResult public Xóa thể loại
Bảng 3.3.14 Danh sách phương thức của Genre d) Playlist
STT Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú
1 Id Int public Mã của danh sách phát
2 Name String public Tên danh sách phát
3 UserId String public Mã người dùng
4 IsDeleted Bool public Đã xóa
Bảng 3.3.15 Danh sách thuộc tính của Playlist
STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú
1 Get List public Danh sách danh sách phát
2 GetById Object public Tìm danh sách phát theo Id
3 Edit ActionResult public Sửa thông tin danh sách phát
4 Create ActionResult public Tạo danh sách phát
5 Delete ActionResult public Xóa danh sách phát
Bảng 3.3.16 Danh sách phương thức của Playlist e) User
STT Tên thuộc tính Loại Ràng buộc Ý nghĩa/ghi chú
1 Id Int public Mã của người dùng
2 FistName String public Tên người dùng
3 LastName String public Họ người dùng
7 Avatar String public Link file avatar
8 DateOfBirth Date public Ngày sinh
9 IsDeleted Bool public Đã xóa
Bảng 3.3.17 Danh sách thuộc tính của User
STT Tên phương thức Kiểu trả về Ràng buộc Ý nghĩa/ghi chú
1 Get List public Danh sách người dùng
2 GetById Object public Tìm người dùng theo Id
3 Edit ActionResult public Sửa thông tin người dùng
4 Create ActionResult public Tạo người dùng
5 Delete ActionResult public Xóa người dùng
Bảng 3.3.18 Danh sách phương thức của User
THIẾT KẾ GIAO DIỆN
Giao diện trang chủ
STT Tên thành phần Loại Mô tả thành phần
1 Tracks Control Component Thanh điều chỉnh phát nhạc của trang web
2 Trengding Component Component Thành phần hiển thị các bài hát được nghe nhiều
3 SiveNav Component Navigation cho trang web
4 Slider Component Các bài hát được nghe nhiều
5 Songs For You Component Các bài hát được đề xuất cho người dùng
6 Genre Songs Component Các bài hát được đề xuất dựa trên thể loại yêu thích của người dùng Bảng 4.1.1 Mô tả thành phần trang chủ
Hình 4.1.1 Giao diện trang chủ của Trang Web
4.1.2 Giao diện chức năng Songs For You
STT Tên thành phần Loại Mô tả thành phần
1 Title Label Tiêu đề của component
2 Songs Component Các bài hát được đề xuất cho người dùng
Bảng 4.1.1 Mô tả thành phần của chức năng Songs For You
Hình 4.1.2 Giao diện chức năng Songs For You
4.1.3 Giao diện chức năng Genre Songs
STT Tên thành phần Loại Mô tả thành phần
1 Title Label Tiêu đề của component
2 Songs Component Các bài hát được đề xuất cho người dùng Bảng 4.1.2 Mô tả thành phần của chức năng Genre Songs
Hình 4.1.3 Giao diện chức năng Genre Songs
Giao diện Player
STT Tên thành phần Loại Mô tả thành phần
1 Switch Button Buttons Chuyển chức năng giữa Lyric và
2 Thumbnail Image Thumbnail của bài hát
2 Lyric Component Lời bài hát
Bảng 4.2.1 Mô tả thành phần chức năng Lyric
Hình 4.2.1 Giao diện chức năng Lyric
STT Tên thành phần Loại Mô tả thành phần
1 Switch Button Buttons Chuyển chức năng giữa Lyric và
2 Thumbnail Image Thumbnail của bài hát
3 Kara Component Kara của bài hát
Bảng 4.2.2 Mô tả thành phần chức năng Karaoke
Hình 4.2.2 Giao diện chức năng Karaoke
Giao diện trang admin
STT Tên thành phần Loại Mô tả thành phần
1 SongButton Button Chuyển sang quản lý Songs
2 ArtistButton Button Chuyển sang quản lý Artist
3 ModelButton Button Chuyển sang quản lý model
4 SearchBar Input Thanh tìm kiếm
6 Title Label Tên chức năng đang dùng
Bảng 4.3.1 Mô tả thành phần trang Admin
Hình 4.3.1 Giao diện trang Admin
Giao diện chức năng quản lý bài hát
STT Tên thành phần Loại Mô tả thành phần
1 SearchBar Input Thanh tìm kiếm
3 Title Label Tên chức năng đang dùng
Bảng 4.4.1 Mô tả thành phần chức năng Danh sách bài hát
Hình 4.4.1 Giao diện chức năng danh sách bài hát
STT Tên thành phần Loại Mô tả thành phần
1 Detail Button Hiện chi tiết bài hát
2 Edit Button Sửa thông tin bài hát
3 Delete Button Xóa bài hát
4 Thumb Img Hình ảnh của bài hát
5 Title Label Tên bài hát
6 Artist Label Tên nghệ sĩ
7 Add Button Thêm bài hát
Bảng 4.4.2 Mô tả thành phần chức năng Thêm Bài Hát
Hình 4.4.2 Giao diện chức năng Thêm Bài Hát
4.4.3 Chức năng Sửa Thông Tin Bài Hát
STT Tên thành phần Loại Mô tả thành phần
1 UploadThumbnail Button Tải lên hình ảnh của bài hát
2 Edit Button Sửa thông tin bài hát
3 Cancel Button Hủy thao tác
4 Thumb Img Hình ảnh của bài hát
5 Title Textbox Tên bài hát
6 Artist Textbox Tên nghệ sĩ
7 Save Button Lưu thông tin
Bảng 4.4.3 Mô tả thành phần chức năng Sửa Thông Tin Bài Hát
Hình 4.4.3 Giao diện chức năng Sửa Thông Tin Bài Hát
4.4.4 Chức năng Chi tiết bài hát
STT Tên thành phần Loại Mô tả thành phần
1 Thumbnail Button Hình ảnh của bài hát
2 Title Textbox Tên bài hát
3 Artist Textbox Tên nghệ sĩ
Bảng 4.4.4 Mô tả thành phần chức năng Chi Tiết Bài Hát
Hình 4.4.4 Giao diện chức năng Chi Tiết Bài Hát
Giao diện chức năng Quản Lý Nghệ Sĩ
4.5.1 Chức năng Danh sách Nghệ Sĩ
STT Tên thành phần Loại Mô tả thành phần
1 SearchBar Input Thanh tìm kiếm
3 Title Label Tên chức năng đang dùng
Bảng 4.5.1 Mô tả thành phần chức năng Danh sách Nghệ Sĩ
Hình 4.5.1 Giao diện chức năng Danh sách Nghệ Sĩ
4.5.2 Chức năng Chi Tiết Nghệ Sĩ
STT Tên thành phần Loại Mô tả thành phần
1 Thumbnail Button Hình ảnh của nghệ sĩ
2 Artist Textbox Tên nghệ sĩ
5 Songs Component Danh sách nhạc của nghệ sĩ
Bảng 4.5.2 Mô tả thành phần chức năng Chi Tiết Nghệ Sĩ
Hình 4.5.2 Giao diện chức năng Chi Tiết Nghệ Sĩ
4.5.3 Chức năng Thêm Nghệ Sĩ
STT Tên thành phần Loại Mô tả thành phần
1 Detail Button Hiện chi tiết bài hát
2 Edit Button Sửa thông tin bài hát
3 Delete Button Xóa bài hát
4 Thumb Img Hình ảnh của Nghệ Sĩ
5 Artist Label Tên nghệ sĩ
6 Add Button Thêm bài hát
Bảng 4.5.3 Mô tả thành phần chức năng Thêm Nghệ Sĩ
Hình 4.5.3 Giao diện chức năng Thêm Nghệ Sĩ
4.5.4 Chức năng Sửa Thông Tin Nghệ Sĩ
STT Tên thành phần Loại Mô tả thành phần
1 UploadThumbnail Button Tải lên hình ảnh của bài hát
2 Edit Button Sửa thông tin bài hát
3 Cancel Button Hủy thao tác
4 Thumb Img Hình ảnh của bài hát
5 Title Textbox Tên bài hát
6 Artist Textbox Tên nghệ sĩ
7 Save Button Lưu thông tin
Bảng 4.5.4 Mô tả thành phần chức năng Sửa Thông Tin Nghệ Sĩ
Hình 4.5.4 Giao diện chức năng Sửa Thông Tin Nghệ Sĩ
Chức năng đề xuất nhạc
4.6.1 Chức năng Đề Xuất Nhạc Theo Bài Hát Hiện Tại
Hình 4.6.1 Giao diện chức năng Đề Xuất Theo Bài Hát Hiện Tại
STT Tên thành phần Loại Mô tả thành phần
1 Title Label Tên mục đề xuất
2 Songs Component Danh sách bài hát đề xuất
Bảng 4.6.1 Mô tả thành phần chức năng Đề Xuất Theo Bài Hát Hiện Tại
4.6.2 Chức năng Đề Xuất Nhạc Cho Người Dùng
STT Tên thành phần Loại Mô tả thành phần
1 Title Label Tiêu đề của component
2 Songs Component Các bài hát được đề xuất cho người dùng Bảng 4.6.2 Mô tả thành phần chức năng Đề Xuất Nhạc Cho Người Dùng
Hình 4.6.2 Giao diện chức năng Đề Xuất Nhạc Cho Người Dùng
4.6.3 Chức năng Đề Xuất Nhạc Theo Thể Loại Yêu Thích Của Người Dùng
STT Tên thành phần Loại Mô tả thành phần
1 Title Label Tiêu đề của component
2 Songs Component Các bài hát được đề xuất cho người dùng Bảng 4.6.3 Mô tả thành phần chức năng Đề Xuất Nhạc Theo Thể Loại Yêu Thích
Hình 4.6.3 Giao diện chức năng Đề Xuất Nhạc Theo Thể Loại Yêu Thích
4.7 Chức năng Nhận Diện Bài Hát
4.7.1 Giao diện trang nhận diện
STT Tên thành phần Loại Mô tả thành phần
1 Record Button Thực hiện thu âm bài hát
2 Import Button Import bài hát từ local
Bảng 4.7.1 Giao diện chức năng nhận diện Hình 4.7.1 Giao diện chức năng nhận diện
4.7.2 Giao diện trang ghi âm a) Ghi âm bài hát
STT Tên thành phần Loại Mô tả thành phần
1 Pause Button Tạm ngừng thu âm bài hát
2 Delete Button Xóa bản thu âm
3 TimeRemain Label Thời gian còn lại của bản thu âm
Bảng 4.7.2 Mô tả thành phần chức năng Ghi Âm Bài Hát
Hình 4.7.2 Giao diện chức năng Ghi Âm Bài Hát
STT Tên thành phần Loại Mô tả thành phần
1 Resume Button Tiếp tục thu âm bài hát
2 Preview Button Preview bản thu âm
3 Delete Button Xóa bản thu âm
4 TimeRemain Label Thời gian còn lại của bản thu âm
Bảng 4.7.3 Mô tả giao diện dừng ghi âm Hình 4.7.3 Giao diện chức năng Dừng Ghi Âm
62 c) Giao diện Preview bản Record
STT Tên thành phần Loại Mô tả thành phần
1 Recognize Button Nhận diện bài hát
2 Download Button Tải bản thu âm
3 Delete Button Xóa bản thu âm
4 Pause/Play Button Dừng/Phát bản thu âm
5 Region Button Chọn vùng muốn nghe
6 From Label Chọn thời gian từ
7 To Label Thời gian tới
Bảng 4.7.4 Mô tả giao diện Preview bản Record
Hình 4.7.4 Giao diện chức năng Preview bản Record
4.7.3 Giao diện trang Kết Quả Nhận Diện
STT Tên thành phần Loại Mô tả thành phần
1 Time Label Thời gian nhận diện bài hát
2 Match Label Độ match của bản ghi âm so với cơ sở dữ liệu
4 ZingMp3 Button Mở trang MP3 của Zing
5 MV Button Mở trang chứa MV của Zing
6 Download Button Tải bài hát
7 Thumb Img Hình ảnh của bài hát
Bảng 4.7.5 Mô tả giao diện trang kết quả Hình 4.7.5 Giao diện trang Kết Quả
Chức năng Playlist
4.8.1 Giao diện trang Danh sách Playlist
Hình 4.8.1 Giao diện trang Playlist
STT Tên thành phần Loại Mô tả thành phần
1 Title Label Tiêu đề của component
2 Songs Component Các bài hát được đề xuất cho người dùng
3 Playlists Component Các Playlist của người dùng
Bảng 4.8.1 Mô tả giao diện trang Playlist
4.8.2 Giao diện trang tạo Playlist
Hình 4.8.2 Giao diện trang tạo Playlist
STT Tên thành phần Loại Mô tả thành phần
1 Title Input Tiêu đề của component
2 Description Textarea Mô tả nội dung của Playlist
3 Public Toggle Public playlist cho người dùng khác
4 Save Button Tạo mới playlist
Bảng 4.8.2 Mô tả trang tạo Playlist
4.8.3 Giao diện trang Chi Tiết Playlist
Hình 4.8.3 Giao diện trang Chi Tiết Playlist
Hình 4.8.4 Giao diện trang Chi Tiết Playlist
STT Tên thành phần Loại Mô tả thành phần
1 PlayButton Button Phát nhạc trong Playlist
2 Add To Queue Button Thêm nhạc trong Playlist vào queue
3 Edit Button Chỉnh sửa thông tin của Playlist
4 Song List Component Danh sách bài hát trong Playlist
Component Danh sách đề xuất dựa trên các bài hát trong Playlist Bảng 4.8.3 Mô tả trang Chi Tiết Playlist
4.8.4 Giao diện Chỉnh Sửa Thông Tin Playlist
Hình 4.8.5 Giao diện Chỉnh Sửa Thông Tin Playlist
STT Tên thành phần Loại Mô tả thành phần
1 Title Input Tiêu đề của component
2 Description Textarea Mô tả nội dung của Playlist
3 Public Toggle Public playlist cho người dùng khác
4 Save Button Tạo mới playlist
Bảng 4.8.4 Mô tả chi tiết trang Chỉnh Sửa Thông Tin Playlist
Giao diện trang Đăng Nhập
4.9.1 Giao diện trang Đăng Nhập
Hình 4.9.1 Giao diện trang Đăng Nhập
STT Tên thành phần Loại Mô tả thành phần
1 Email Input Nhập Email của người dùng
2 Password Input Nhập Mật khẩu của người dùng
4 SignUp Button Đăng ký tài khoản mới cho người dùng
5 SignInWithGoogle Button Đăng nhập bằng tài khoản Google
6 SignInWithFacebook Button Đăng nhập bằng tài khoản Facebook
7 SignInWithApple Button Đăng nhập bằng tài khoản Apple
Bảng 4.9.1 Mô tả trang Đăng Nhập
HIỆN THỰC HÓA CHỨC NĂNG NHẬN DIỆN
Kết quả thu được
Sau quá trình crawl data thì nhóm thu được 1177 file MP3 thuộc 32 thể loại khác nhau và các file lyric, beat liên quan đến các bài hát
Hình 5.2.1 Thống kê dữ liệu thu được
Hình 5.2.2 Data thu được trên Google Drive
Xử lý lưu trữ và chuyển đổi âm thanh
5.3.1 Tính chất của âm thanh
− Các tính chất chính của: Cao độ, Trường độ, Cường độ, Âm sắc
− Cao độ: Độ cao thấp của âm thanh phụ thuộc vào tần số dao động của vật thể rung
● Tần số dao động càng nhiều thì âm thanh có độ cao càng cao và ngược lại
● Đơn vị đo cao độ là Hertz (Hz)
● Ví dụ, âm thấp nhất của cây đàn piano có tần số 16 Hz, âm cao nhất của nó có tần số 4000Hz
Hình 5.3.1 Minh họa tính chất của âm thanh
● Như hình trên, cùng 1 Nốt nhạc nhưng các nhạc cụ cho ra cao độ khác nhau
− Trường độ: Độ dài ngắn của âm thanh lúc âm thanh bắt đầu được vang lên
● Đơn vị đo trường độ là giây (s)
− Cường độ: Độ to nhỏ của âm thanh
● Đơn vị đo cường độ âm thanh là Deciben (viết tắt là db)
− Âm sắc: Giọng của mỗi người có thể khác nhau
Mỗi bài hát là sự kết hợp của nhiều âm thanh, và nhờ nhận diện chính xác các đặc trưng âm thanh như cao độ, nhịp độ và cường độ, chúng ta có thể nhận diện một bài hát chỉ từ một đoạn giai điệu ngắn Đồng thời, khi không so sánh âm sắc, ta có thể tìm thấy nhiều bản nhạc khác nhau của cùng một bài hát.
5.3.2 Chuyển đổi và tìm kiếm bài hát a Chuyển đổi nhạc thành các biểu đồ để phân tích
Một bài hát có thể được chuyển sang dạng quang phổ hai chiều, với hai trục Ox và Oy Ox đại diện cho độ mạnh (trường độ) của tín hiệu, còn Oy thể hiện cao độ của âm thanh Độ đậm nhạt tại mỗi điểm trên quang phổ phản ánh cường độ của thành phần âm tương ứng, giúp hình dung rõ ràng cấu trúc phổ của bản nhạc và cách các yếu tố âm thanh kết hợp để tạo nên cảm xúc và nhịp điệu riêng biệt.
− Tại mỗi thời điểm trên quang phổ, chọn ra những điểm có cường độ lớn nhất, chúng ta sẽ được constellation map
Để đảm bảo dữ liệu lưu trữ trên CM không bị thay đổi theo thời gian bắt đầu của bản thu âm, cần biến đổi các giá trị của các điểm trên CM.
Giải pháp: tại mỗi Target Zone trong CM, chọn một điểm nằm ngoài vùng đó làm điểm Mốc có tọa độ (f1, t1) Các điểm (f2, t2) nằm trong Target Zone được lưu trữ dưới dạng hash: {f1, f2, t2 − t1} Việc gán giá trị này cho từng điểm giúp liên kết chúng với điểm Mốc và cho phép tra cứu nhanh dựa trên sự chênh lệch thời gian t2 − t1 cùng các tham chiếu f1 và f2.
- Như vậy 1 bài nhạc sẽ được lưu trữ thành 1 bảng hash A như hình dưới:
− Việc tìm kiếm 1 đoạn nhạc trong đó chính là tìm xem trong bảng hash A có tồn tại bảng hash B của đoạn nhạc không: b Cách tìm kiếm
- Chúng ta lập ra hệ trục mà ở đó: trục Ox theo thời gian của bản nhạc trong database, trục Oy theo thời gian của bản ghi âm
Hình 5.3.6 Part of Time-Invariant Hashes
- Lấy t = x – y (time offset) và biểu diễn dưới dạng biểu đồ cột, nếu có 1 cột cao hơn hẳn so với các cột còn lại, cột này rất có thể là khoảng thời gian chênh lệch của bản ghi so với bản nhạc, cột càng cao càng chứng tỏ mức độ trùng khớp càng cao.
❖ Hướng tiếp cận tìm kiếm cơ bản
- Giả sử tìm kiếm 1 đoạn ghi âm trong 1 bài hát sau khi đã được chuyển đổi
Hình 5.3.8 Minh họa bài hát và đoạn ghi âm sau khi chuyển đổi
Hình 5.3.7 Minh hoạ cách tìm kiếm
- Với cách tìm kiếm cơ bản chính là so trùng đoạn ghi âm với từng đoạn trong bài hát
Hình 5.3.9 Tiến hành so trùng
- Cho tới khi tìm thấy 1 đoạn trùng với bản ghi âm
Hình 5.3.10 Tìm kiếm được kết quả
- Thuật toán vẫn cho kết quả tìm kiếm chính xác nhưng có độ phức tạp quá lớn khiến thời gian tìm kiếm quá lâu
- Giả sử cứ 0.1s có 3 TFP, như vậy 10s ghi âm sẽ có 300TFP
- Việc tìm kiếm 1 bài hát có S giây sẽ tiêu tốn 300 * 300 * 30 * S truy vấn
Với M bài hát sẽ tốn 300 * 300 * 30 * S * M truy vấn
❖ Hướng tiếp cận tìm kiếm cải tiến
- Thay vì so trùng từng điểm trong 1 khoảng thời gian, thuật toán cải tiến sẽ tìm kiếm nhiều điểm trong cùng 1 khoảng thời gian
- Trước hết tiến hành flatten Constellation Map thành mảng đơn hướng dựa theo cách sắp xếp sau:
▪ Nếu 2 TFP có cùng thời gian, điểm có Frequency thấp hơn sẽ đứng trước
▪ TFP xuất hiện trước sẽ xếp trước
Hình 5.3.11 Minh họa Flatten bài hát và đoạn ghi âm
- Nhóm 5 điểm có gần nhau nhất thành 1 Target Zone
➢ Xây dựng địa chỉ (Address)
- Với mỗi TGZ, lựa chọn 1 điểm làm Anchor Point (Điểm thứ 3 trước 5 điểm trong TGZ) từ đó xây dựng địa chỉ:
[frequency of the anchor ; frequency of the point ; delta time between the anchor and the point ]
- Như vậy địa chỉ của điểm thứ 6 sẽ là [10; 30; 1], điểm thứ 7 là [10; 20; 3]
- Giá trị mà 1 địa chỉ trỏ tới chính là [time of the anchor in the song; songId]
- Với 2 điểm trên chúng ta sẽ có các cặp sau:
- Mã hóa Address dưới dạng 32 bit integer với:
▪ 9 bit cho Frequency của Anchor Point
▪ 9 bit cho Frequency của 1 TFP
- Tương tự mã hóa Value dưới dạng 64 bit integer:
▪ 16 bit cho time của Anchor Point
- Từ đó áp dụng với toàn bộ 1 bài hát sẽ thu được 1 Dictionary qua đó biến việc tìm kiếm 1 TFP trở thành O(1)
- Giả sử kết quả tìm kiếm từ Dictonary trả về M values trùng với record
- Tiến hành loại bỏ những Value xuất hiện thấp hơn 4 lần (Nghĩa là loại bỏ các Value không đến từ TGZ của Record)
➢ Lọc theo thời gian xuất hiện
- Giả sử có 2 bài hát sau vượt qua quá trình lọc
Hình 5.3.14 Minh họa 2 kết quả vượt qua quá trình lọc
- Tiến hành lọc các note trong bài hát so với đoạn ghi âm với ràng buộc:
Thời gian xuất hiện của note A trong bài hát = thời gian xuất hiện của note A trong đoạn ghi âm + Delta T (Delta T là thời gian xuất hiện note trùng đầu tiên của bản ghi âm trong bài hát)
- Bài hát có càng nhiều note thỏa điều kiện trên cho ra độ trùng khớp càng cao
▪ Giả sử có N note trùng trong Z bài hát và chúng được phân phối đồng đều Như vậy 1 bài hát sẽ có N/Z note trùng
Lọc 1 bài hát sẽ mất: O(N/Z)
➢ Độ phức tạp sau cải tiến
- Vì sử dụng FFT với sample là 1024 nên chúng ta có 512 Frequencies khả dĩ
- Giả định: Delta T chỉ có 2 giá trị 0 hoặc 10
- Giả định: Quá trình xây dựng địa chỉ được phân phối đồng đều (Nghĩa là với mỗi địa chỉ đều có cùng số lượng Value)
- Tìm kiếm qua Dictionary mất 5 * 300 truy vấn (5 là size của TGZ và 300 là số TFP giả định xuất hiện trong 10s)
- Độ lớn của số lượng Value trả về sẽ là M = (5 * 300) * (S * 30 * 5 * 300) /
- Vì N cần 44000 sample/s (Định lý Nyquist-Shannon)
⇨ Cần sample rate lớn hơn 44kHz, hiện tại có các loại chính như 44,1 kHz, 48kHz (Blueray), 96 kHz, 192kHz Nhóm quyết định chọn 48kHz vì đây
86 là loại Sample rate cho kết quả tốt hơn 44,1kHz cũng như nhẹ hơn 96kHz, 192kHz
⎼ Lựa chọn channel: Mono thay vì stereo giúp cho quá trình lưu giữ, tìm kiếm dễ dàng hơn
● Âm thanh sau khi được load sẽ được chuyển về Mono
● Quá trình low pass filter sẽ lọc bỏ các tiếng ồn cũng như những âm thanh mà con người không nghe được
● Downsampling: Nén các sample lại với nhau để thu được 1 sample mới giúp cho thời gian duyệt và xử lý nhanh hơn
● FFT bằng hamming window: thu được TFPs với kết quả tốt nhất
● Lọc lấy 6 điểm mạnh nhất tại các âm tần khác nhau trong cùng 1 thời điểm để thu được kết quả cuối cùng
Hình 5.4.1 Quá trình chuyển đổi file Audio
⎼ Từ TFPs của bản record, tạo các bảng Hash
⎼ Đem so sánh với Database để tìm các bài hát có lượng SongValue tương đồng
⎼ Sử dụng TargetZone filter để lọc bỏ các kết quả sai
⎼ Chọn ra top các bài hát có tỉ lệ chính xác cao nhất
⎼ Dễ dàng nhận thấy quá trình tìm kiếm bài hát là quá trình so trùng độc lập 10s record với toàn bộ cơ sở dữ liệu
Trong kiến trúc hệ thống cơ sở dữ liệu, ta có thể phân chia một cơ sở dữ liệu thành D phần riêng biệt và thực thi tìm kiếm song song trên các phần này Việc này sử dụng D task dựa trên D bằng số lượng processors của một server, từ đó tận dụng tối đa sức mạnh xử lý đồng thời của phần cứng Phương pháp phân mảnh dữ liệu và tìm kiếm song song giúp rút ngắn thời gian trả lời, giảm độ trễ và tăng thông lượng hệ thống Mỗi cơ sở dữ liệu con nhận truy vấn và thực thi song song, sau đó kết quả được gộp lại để trả về đáp án cuối cùng.
Như vậy thời gian tìm kiếm có thể được giảm xuống D lần
Hình 5.4.2 Quá trình tìm kiếm 1 file nhạc
Because the song library is large and building a single server with D processors is impractical for vertical scaling, a fingerprinting server can be partitioned into E servers, each with M processors, so that M × E ≥ D, enabling horizontal scaling.
Như vậy quá trình tìm kiếm đa luồng vẫn được đảm bảo với lượng kinh phí thấp hơn
5.4.4 Kiểm thử độ chính xác
- Nhóm sử dụng các phương thức kiểm thử sau để kiểm thử độ chính xác của mô hình:
○ Bộ dữ liệu kiểm thử: 570 bài hát / 1000 bài hát
Để tối ưu hóa nội dung nhạc và SEO, nhóm các bài hát thành các đoạn 10 giây, bắt đầu từ phút 1:00, đây là khoảng thời gian giữa ver 1 và điệp khúc nhằm loại bỏ các phần intro và outro.
○ Sau đó các file này được trộn với các loại tiếng ồn:
■ White-noise: tiếng nhiễu sóng
■ Car-noise: tiếng xe ô tô chạy
■ Machine-noise: tiếng máy móc hoạt động
■ Brown-noise: 1 loại tiếng nhiễu khác nhiễu hơn white- noise
■ Pink-noise: tương tự brown-noise
■ Pot-noise: các tiếng ồn ngẫu nhiên
■ Chair-noise: tiếng kéo ghế
○ Sau đó các file này lần lượt được dùng để kiểm thử và thu được kết quả sau:
- Thời gian tìm kiếm: Trung bình 12605.14821 ms
- Độ trùng khớp: trung bình 79.54%
ScoreHình 5.4.4 Kết quả kiểm thử bằng file
Các file được tách từ bản gốc nhằm lưu trữ dữ liệu một cách tối ưu và không bị ảnh hưởng bởi chất lượng thu âm, nhờ vậy độ chính xác được duy trì ở mức rất cao.
● Kiểm thử bằng thu âm
○ Bộ dữ liệu kiểm thử: 100 bài hát / 1000 bài hát
○ Nhóm lựa chọn 100 bài hát và tiếng hành thu âm lại đoạn 10s ngẫu nhiên
○ Sau đó các file này được đem đi kiểm thử và thu được kết quả:
- Thời gian tìm kiếm: Trung bình 11794.38 ms
- Độ trùng khớp: trung bình 38,57 %
Time(ms)Hình 5.4.5 Kết quả kiểm thử bằng thu âm
■ Do các file chịu ảnh hưởng lớn từ chất lượng thu âm nên độ chính xác giảm so với kiểm thử file
HIỆN THỰC HÓA CHỨC NĂNG ĐỀ XUẤT NHẠC
Xây dựng hệ thống đề xuất
Để xây dựng hệ thống, nhóm quyết định triển khai dựa trên so sánh sự tương đồng giữa các đặc trưng âm thanh Phương pháp này coi các đặc trưng âm thanh là các vector đặc trưng (ví dụ MFCC, đặc trưng phổ, nhịp độ và nhịp điệu) và đánh giá mức độ giống nhau giữa chúng bằng các thước đo như cosine similarity hoặc khoảng cách Euclidean, từ đó thực hiện phân loại, nhận diện hoặc ghép nhạc với cơ sở dữ liệu tương ứng Khi có vectơ đặc trưng, hệ thống có thể so sánh với các mẫu đã gắn nhãn để xác định lớp hoặc nhãn phù hợp, giúp tối ưu hóa hiệu suất nhận diện và mở rộng phạm vi ứng dụng cho các bài toán như nhận diện giọng nói, nhận diện nhạc hoặc phân loại môi trường âm thanh.
Trong hệ thống Content-based Recommendation, việc xác định sự tương đồng được thể hiện thông qua một metric đo lường mức độ giống nhau giữa các tín hiệu âm thanh Metric này dùng để đánh giá mức độ tương đồng giữa các tín hiệu âm thanh nhằm phục vụ cho gợi ý nhạc dựa trên đặc trưng âm thanh Nhóm nghiên cứu ứng dụng CNN (Convolutional Neural Networks) để trích xuất đặc trưng, nhận diện và đo khoảng cách giữa các đặc trưng của âm thanh CNN được xem là phù hợp để dự đoán các đặc trưng âm nhạc như hợp âm và nhịp của bài hát Mô hình nhận đầu vào là quang phổ của file âm thanh và cho ra đầu ra ở dạng một vector dự đoán thể loại nhạc của bài hát.
Hình 6.1.1 Các bước xây dựng hệ thống đề xuất dựa trên CNN
Hệ thống phân loại
Nhóm trực tiếp thu thập dữ liệu từ ZingMp3 để đào tạo mô hình phân loại nhạc thay vì sử dụng các tập dữ liệu có sẵn như Free Music Archive (FMA) hay The Million Song Dataset, vì các nguồn này chủ yếu chứa các thể loại nhạc ở mức độ cơ bản như Classical, Electronic và Folk nên khó khai thác nhãn phân loại chi tiết cho nhạc Việt Với mục tiêu nhạc Việt và các thể loại nhạc đặc thù, nhóm hướng tới phân loại thành các nhãn như Nhạc Việt, nhạc trẻ, nhạc truyền thống và các thể loại liên quan khác nhằm nâng cao độ chính xác của hệ thống phân loại nhạc.
Đối với các thể loại như phim và nhạc rap, dữ liệu được gắn nhãn như trên không đảm bảo độ chính xác Vì vậy nhóm quyết định sử dụng nhãn thể loại từ ZingMp3 để phân loại các bài hát, nhằm nâng cao độ tin cậy của kết quả và tối ưu hóa quá trình tìm kiếm cho người dùng.
Trong quá trình lọc dữ liệu, nhóm gặp nhiều khó khăn khi phải loại bỏ audio chất lượng kém và nhạc bị gắn nhãn sai Nguyên nhân nhãn sai có thể là nghệ sĩ tự ý gắn nhãn hoặc một số thể loại trong quá trình crawl không đáp ứng mức tối thiểu, khiến dữ liệu bị lệch và dễ dẫn tới overfitting khi huấn luyện Để nâng cao chất lượng dữ liệu nhạc và tăng số lượng file cho quá trình train ở mỗi giai đoạn, nhóm cắt các file thành các đoạn 30 giây và chuyển đổi sang định dạng wav Phương án này làm tăng đáng kể dung lượng lưu trữ.
Sự chênh lệch dữ liệu giữa các thể loại nhạc là rất lớn Ví dụ, số lượng file nhạc Việt Nam lên tới 3.422 file, trong khi các bài nhạc Indie chỉ khoảng 6 file Ở các thể loại có số lượng file lớn, tồn tại hiện tượng overlap hay chồng chéo thể loại do gán nhãn sai lệch, sự pha trộn phong cách giữa các dòng nhạc và những hệ thống phân loại khác nhau Điều này ảnh hưởng đến chất lượng phân tích dữ liệu, khả năng đề xuất nội dung và tối ưu hóa hiển thị trên các nền tảng nghe nhạc, vì vậy cần có biện pháp làm sạch dữ liệu, chuẩn hóa thẻ và thống kê dữ liệu một cách nhất quán.
Nhạc Phim Việt hay các thể loại liên quan đến Việt Nam Điều này làm cho mô hình bị overfitting
Sau khi xem xét và phân tích, nhóm quyết định chia lại và gắn nhãn cho các file nhạc để tránh dữ liệu bị overlap Vấn đề chính là sự chênh lệch quá lớn giữa các thể loại nhạc và đặc trưng âm thanh, khiến việc chuẩn hóa và phân tích dữ liệu gặp khó khăn Để khắc phục, nhóm sẽ tái phân bổ dữ liệu và gắn nhãn một cách nhất quán, đồng thời cân bằng giữa các nhãn Quy trình mới nhằm tối ưu hóa chất lượng dữ liệu cho huấn luyện mô hình nhận diện âm thanh, tăng độ tin cậy của phân tích và cải thiện hiệu quả xử lý dữ liệu trong hệ thống quản lý nhạc.
Hình 6.2.1 Thống kê các file wav ở các thể loại
Để xử lý 95 loại, nhóm đề ra hướng giải quyết như sau: thực hiện crawl manual đối với các thể loại thiếu dữ liệu Đồng thời, nhóm đặt mức tối thiểu là 40 file và mức tối đa là 501 file.
Sau cùng nhóm chia làm 18 thể loại để phân loại nhạc với dữ liệu tối thiểu ở mỗi thể loại là 40 file wav và tối đa là 501 file wav
Hình 6.2.2 Thống kê các file wav ở các thể loại sau khi lọc
Chúng ta cần một phương pháp hợp lý để đưa các file Audio làm input cho mạng neural Do đó, các file wav được chuyển đổi sang các dạng đại diện như spectrogram Trước hết, wav phải có một mức sampling rate nhất định Sau đó, áp dụng Short-Time Fourier Transform (STFT) cho mỗi mức sampling rate với một chiều dài window và một giá trị hop nhất định Kết quả của STFT sau đó được chuyển đổi sang Mel scale hoặc MFCC để làm đặc trưng đầu vào cho mạng neural.
Nhóm sử dụng Librosa để thực hiện convert ra MFCC Việc của chúng ta là xác định các thông số đầu vào như samplerate, hop_length và window_length
Hình 6.2.3 Thống kê các file wav ở các thể loại sau khi lọc
Kết quả của quá trình này ta rút trích được các đặc trưng từ các file wav để làm input cho Model phục vụ cho quá trình training
6.2.4 Mô hình mạng Để thực hiện phân loại thể loại nhạc, nhóm sử dụng mô hình mạng Resnet50 và một số mô hình khác để thực hiện đề tài này
6.2.4.1 Thông tin về mô hình mạng:
⎼ Mô hình mạng ResNet50 bao gồm 5 stage và mỗi stage sẽ có một Convolution
⎼ Mỗi Convolution Block có 3 Convolution Layer và mỗi Identity Block có 3
ResNet-50 có hơn 23 triệu tham số có thể huấn luyện, giúp mạng học sâu thực hiện các nhiệm vụ phức tạp với hiệu quả cao Mạng ResNet được thiết kế để khắc phục hiện tượng vanishing gradient, vấn đề làm cho quá trình huấn luyện không tốt và khó đạt được kết quả mong đợi.
Hình 6.2.4 Sử dụng thư viện Librosa để trích xuất đặc trưng của Audio
98 Hình 6.2.5 Cấu trúc chung của Resnet50
Hình 6.2.6 Cấu trúc từng layer của Resnet50
Identity Block là lớp chuẩn được sử dụng trong ResNets và tương ứng với trường hợp Input có cùng số chiều với Output
Convolution Block được sử dụng trong trường hợp ngược lại khi Input và
Output không đồng nhất Sự khác biệt nằm ở lớp CONV2D ở shortcut path
Hình 6.2.7 Cấu trúc của Identity Block
Hình 6.2.8 Cấu trúc của Convolution Block
Huấn luyện mô hình
Đầu tiên, sau khi tiền xử lý dữ liệu, ta chia dữ liệu thành tập training, validation và test theo tỷ lệ 0.55 : 0.20 : 0.25 Để huấn luyện mô hình hiệu quả, thiết lập batch size là 32 và số epochs là 30 Việc chọn batch size phù hợp giúp tối ưu việc sử dụng RAM và ngăn ngừa tình trạng tràn RAM trong quá trình training Sự phân chia dữ liệu và cấu hình tham số này ảnh hưởng trực tiếp tới hiệu suất và độ ổn định của mô hình.
Ban đầu nhóm sử dụng GPU NVIDIA GeForce GTX 1050 với VRAM 2.3 GB và CPU AMD Ryzen 7 3750H, quá trình training gặp nhiều khó khăn Sau đó nhóm quyết định training trên Google Colab, nơi có hỗ trợ GPU Tesla 15 GB RAM và 3.3, giúp cải thiện tốc độ và hiệu quả của quá trình huấn luyện.
Đánh giá mô hình
6.4.1 Các thông số để đánh giá mô hình CNN
Các chỉ số TP, FP, TN và FN lần lượt có ý nghĩa là:
● TP (True Positive): Tổng số trường hợp dự báo khớp với Positive
● TN (True Negative): Tổng số trường hợp dự báo khớp với Negative
Hình 6.4.1 Các định nghĩa trong đánh giá
● FP (False Positive): Tổng số trường hợp dự báo các quan sát thuộc nhãn dán Negative thành Positive
● FN (False Negative): Tổng số trường hợp dự báo các quan sát thuộc nhãn Positive thành Negative
Trong quá trình xây dựng mô hình phân loại, ta muốn biết tỷ lệ các trường hợp được dự báo đúng trên tổng số trường hợp, tức là độ chính xác Độ chính xác là thước đo cho biết mức độ hiệu quả dự báo của mô hình trên bộ dữ liệu và giúp đánh giá, so sánh các mô hình khác nhau để chọn phương án phù hợp với bài toán.
Precision là thước đo cho biết trong số các hồ sơ được dự báo là Positive có bao nhiêu hồ sơ là đúng thực sự Mức Precision càng cao cho thấy mô hình phân loại các hồ sơ BAD càng chính xác, từ đó cải thiện hiệu quả tổng thể của hệ thống và giảm sai sót khi nhận diện hồ sơ xấu.
Recall đo lường tỉ lệ dự báo chính xác các trường hợp Positive trên toàn bộ các mẫu thuộc nhóm Positive
F1 Score là trung bình điều hòa giữa Precision và Recall, đại diện cho sự cân bằng giữa độ chính xác của các dự đoán và khả năng phát hiện các trường hợp thật sự Do đó, F1 Score thể hiện rõ hơn chất lượng mô hình khi cần tối ưu cả Precision và Recall đồng thời.
- Với Acc là 0.79 thì mô hình đánh khá chính xác
- Với 82,7 % các trường hợp đoán Positive thì đúng là nhãn Positive ( Precision Score)
- 73% các trường hợp đoán Positive trên tổng số nhãn Positive
Confusion Matrix là một kĩ thuật để khái quát hiệu suất của một thuật toán phân loại Việc tính toán Confusion Matrix cho phép đánh giá các thành phần dự đoán như đúng nhãn và sai nhãn, từ đó nhận diện lỗi trong quá trình huấn luyện và cải thiện mô hình phân loại Nhờ phân tích ma trận nhầm lẫn, chúng ta có thể xác định các lớp dễ bị nhầm lẫn, tối ưu hóa tham số và điều chỉnh chiến lược huấn luyện để nâng cao độ chính xác và độ tổng quát của mô hình Confusion Matrix cung cấp cái nhìn toàn diện về hiệu suất trên tập dữ liệu và là công cụ quan trọng trong quá trình tối ưu hoá mô hình phân loại.
Hình 6.4.2 Confusion Matrix của mô hình Resnet50
● Dựa vào Matrix ta có thể thấy Nhạc Phim Việt có tỉ lệ đoán đúng cao, theo sau là nhạc Pop, V-Pop, Electron-Dance, R-B Soul
● Ở các thể loại như Kpop hay Nhạc Trữ Tình thì dễ bị đoán sai hơn
● Tập dữ liệu test cũng không được trải đều giữa các thể loại
Hệ thống Đề Xuất
Hệ thống đề xuất được xây dựng dựa trên tính toán Cosine Similarity giữa kết quả dự đoán của mô hình phân loại Vì kết quả dưới dạng vector, ta có thể tính khoảng cách giữa các bản nhạc để xác định mức độ tương đồng Đầu tiên, chúng ta chọn một tập nhạc mẫu cho mỗi thể loại để làm nguồn đề xuất Tiếp theo, kết quả dự đoán của nhạc được tính toán từ mạng neural network Để đo sự tương đồng giữa hai bản nhạc với kết quả Prediction là x = [x1, x2, …, xn] và y = [y1, y2, …, yn], ta sử dụng công thức cosine similarity: cos(x, y) = (x · y) / (||x|| · ||y||) Với chỉ số này, hệ thống sẽ gợi ý các bản nhạc có mức độ tương đồng cao nhất dựa trên kết quả dự đoán và tập nhạc đã gắn nhãn cho mỗi thể loại.
Hình 6.5.1 Minh họa Cosine Distance/Similarity
Giá trị nhận được của hàm nằm trong khoảng từ -1 đến 1 Ta sẽ sắp xếp các giá trị từ lớn nhất xuống nhỏ nhất và dựa trên đó để chọn các bản nhạc từ mảng đã được sắp xếp Với hệ thống này, nhóm sẽ chọn 5 bài hát từ mảng Distance dựa trên thứ tự ưu tiên của các giá trị đã sắp xếp. -**Support Pollinations.AI:** -🌸 **Ad** 🌸Powered by Pollinations.AI free text APIs [Support our mission](https://pollinations.ai/redirect/kofi) to keep AI accessible for everyone.
Xây dựng API cho hệ thống đề xuất
Xây dựng hệ thống đề xuất dựa trên Flask
STT Method URL Chú thích
1 GET {{BACKEND_URL}}/recommend?name_file= Đề xuất dựa trên bài hát hiện tại
2 GET {{BACKEND_URL}}/models Lấy danh sách Model trong hệ thống
3 GET {{BACKEND_URL}}/currentModel Lấy thông tin của Model hiện tại
4 GET {{BACKEND_URL}}/userRecommend?userId
Lấy đề xuất dựa trên bài hát yêu thích của người dùng
5 GET {{BACKEND_URL}}/genre?userId= Lấy đề xuất dựa trên thể loại yêu thích của người dùng
6.6.1 Đề xuất bài hát dựa trên bài hát đang nghe của người dùng
Hình 6.6.1 Minh hoạ quá trình đề xuất bài hát tương ứng với bài hát hiện tại
Khi người dùng nghe một bài nhạc, Client gửi thông tin bài hát đang phát tới hệ thống đề xuất Hệ thống thực hiện phân loại và trả về một vector đặc trưng đại diện cho bài hát đó Từ vector này, hệ thống tính toán khoảng cách giữa bài hát hiện tại và các bài hát có trong thư viện, xây dựng một mảng khoảng cách và xác định Top 5 bài hát có mức độ tương đồng gần nhất Các bài hát nằm trong Top 5 sẽ được gửi về cho Client để gợi ý hoặc phát tiếp.
6.6.2 Đề xuất dựa trên bài hát người dùng nghe nhiều
Hệ thống phân tích lịch sử nghe nhạc của người dùng để xác định Top 3 bài hát được nghe nhiều nhất Dữ liệu trong cơ sở dữ liệu lưu số lần nghe hoặc tổng thời gian phát của mỗi bài hát, nhằm xây dựng danh sách các bài hát phổ biến theo người dùng Dựa trên Top 3 bài hát này và hành vi nghe của người dùng, hệ thống sẽ đưa ra đề xuất tương tự với quá trình đề xuất bài hát hiện tại ở mục trên để tối ưu hóa trải nghiệm nghe nhạc và gợi ý các bài hát phù hợp với sở thích người dùng.
Hình 6.6.2 Minh họa quá trình đề xuất bài hát tương ứng với bài hát hiện tại
6.6.3 Đề xuất dựa trên thể loại người dùng nghe nhiều
Hệ thống gợi ý nhạc dựa trên lịch sử nghe nhạc của người dùng, xác định Top 3 bài hát được nghe nhiều nhất bằng cách lưu số lần nghe hoặc tổng thời lượng nghe trong cơ sở dữ liệu, và dự đoán thể loại nhạc mà người dùng nghe nhiều nhất để cá nhân hóa đề xuất Sau đó, nó chọn ra các bài hát có lượt nghe và lượt thích cao nhất để đề xuất cho người dùng, nhằm tối ưu hóa trải nghiệm nghe nhạc và tăng sự tương tác trên nền tảng.
Hình 6.6.3 Minh họa quá trình đề xuất thể loại tương ứng với lịch sử nghe nhạc của người dùng