Để xây dựng hệ thống, nhóm quyết định thực hiện dựa trên so sánh sự tương đồng trong đặc trưng của âm thanh. Hướng tiếp cận này có thể được xem như Content-
based Recommendation và nó đòi hỏi định nghĩa về sự tương đồng trong metric.
Metric được dùng để đo lường độ tương đồng giữa các tín hiệu âm thanh. Nhóm sử dụng CNN (Convolutional Neural Networks) cho việc trích xuất đặc trưng, nhận dạng và đo khoảng cách tương đương giữa các đặc trưng của âm thanh. CNN đặc biệt phù
hợp với việc dự đoán những đặc trưng âm nhạc như hợp âm và nhịp của bài hát. Model nhận input là quang phổ của file âm thanh và phân tích cho ra một output là một vector dự đoán thể loại nhạc của bài hát.
79
6.2. Hệ thống phân loại
6.2.1. Thu thập dữ liệu
Nhóm trực tiếp sử dụng dữ liệu thu được trên ZingMp3 để thực hiện train cho mô hình phân loại thay vì sử dụng các dữ liệu có sẵn như các dataset Free Music Archive (FMA) hoặc The Million Data Set vì ở đó chỉ bao gồm các thể loại nhạc
cơ bản như Classical, Electronic và Folk,.. Còn với thể loại nhạc đặc trưng cơ bản như là Nhạc Việt, đặc biệt hơn chúng ta muốn phân loại ra các loại như Nhạc Phim, Nhạc Rap,.. thì các dữ liệu với nhãn như trên không thể đảm bảo được. Nên nhóm quyết định sử dụng dữ liệu cùng nhãn dán là thể loại của ZingMp3 để phân loại bài hát.
6.2.2. Lọc dữ liệu
Ban đầu, trong quá trình lọc, nhóm gặp nhiều khó khăn vì phải loại bỏ đi những audio kém chất lượng và nhạc bị gắn sai nhãn. Lý do gắn sai nhãn có thể là do nghệ sĩ tự ý gắn nhãn và một số thể loại trong quá trình crawl không đáp ứng đủ mức tối thiểu và số lượng file chênh lệch lớn giữa các thể loại làm cho dữ liệu bị overfitting.
Để nâng cao chất lượng file nhạc và nâng số lượng file để train ở mỗi thì nhóm tiến hành cắt file và convert file ra thành các đoạn file wav với duration là 30s. Điều này làm tăng dung lượng lưu trữ rất lớn.
80 Sự chênh lệch dữ liệu ở các thể loại là rất lớn. Có thể dễ dàng thấy file nhạc Việt Nam lên tới 3422 file và các bài nhạc Indie thì chỉ có khoảng 6 file. Ở các thể loại nhạc có số lượng file lớn thì có sự overlap hay chồng chéo với các thể loại như 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ề vấn đề có sự chênh lệch quá lớn giữa các thể loại thì nhóm đề ra hướng giải quyết như sau: Thực hiện crawl manual với những thể loại thiếu dữ liệu và đặt ra mức tối thiểu là 40 file và mức tối đa là 501 files.
81 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.
82
6.2.3. Audio Preprocessing
Chúng ta cần một cách thích hợp để đưa các file Audio làm input cho mạng Neural. Do đó, chúng ta chuyển đổi file wav thành các dạng như Spectrogram. Đầu
tiên, để có thể làm như vậy thì file wav phải ở một mức sampling rate nhất định. Sau đó, chúng ta áp dụng Short Time Fourier Transform (STFT) ở mỗi sampling rate với một chiều dài window và hop nhất định. Sau đó, kết quả từ STFT được chuyển đổi
thành Mel scale hoặc MFCC.
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.
83 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:
6.2.4.1.a. Resnet50
⎼ Mô hình mạng ResNet50 bao gồm 5 stage và mỗi stage sẽ có một Convolution
Block và Identity Block.
⎼ Mỗi Convolution Block có 3 Convolution Layer và mỗi Identity Block có 3
Convolution Layer.
⎼ Và tổng thể ResNet-50 có hơn 23 triệu params có thể train. Mạng ResNet được sinh ra để giải quyết vấn đề về hiện tượng Vanishing Gradient dẫn tới quá trình học tập không tốt.
84 Hình 6.2.5 Cấu trúc chung của Resnet50
85
o Identity Block
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
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
86 ● Hạn chế khi sử dụng mô hình
Mô hình được nhóm tham khảo trên Kaggle thay vì sử dụng các mạng built-in của Keras vì Input Shape của MFCC là 130x13 còn mạng build-in của Keras yêu cầu tối thiểu là 224x224. Vì vậy mạng quá lớn so với lượng data của nhóm đang có.
6.3. Huấn luyện mô hình
Đầu tiên, chúng ta chia dữ liệu sau khi qua quá trình tiền xử lý thành các tập training, validation và test là 0.55 : 0.2 : 0.25. Batch size là 32 và epochs là 30. Batch size không được quá lớn sẽ gây ra tràn Ram trong quá trình training.
Ban đầu nhóm sử dụng GPU NVIDIA Geforce GTX 1050 với dung lượng VRam 2.3GB 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 có hỗ trợ GPU Tesla 15 GB Ram và 3.3 GB Ram.
87
6.4. Đá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
● 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
6.4.1.1 Độ chính xác (Accuracy)
Khi xây dựng mô hình phân loại chúng ta sẽ muốn biết một cách khái quát tỷ lệ các trường hợp được dự báo đúng trên tổng số các trường hợp là bao nhiêu. Tỷ lệ đó
88 được gọi là độ chính xác. Độ chính xác giúp ta đánh giá hiệu quả dự báo của một mô hình trên một bộ dữ liệu
Accuracy = 𝑇𝑃+𝑇𝑁
𝑇𝑜𝑡𝑎𝑙 𝑆𝑎𝑚𝑝𝑙𝑒
6.4.1.2 Precision
Precision trả lời cho câu hỏi các trường hợp được dự báo là Positive thì có bao
nhiêu trường hợp là đúng ? Và Precision càng cao thì mô hình của chúng ta càng tốt trong việc phân loại các hồ sơ BAD.
𝑃𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 = 𝑇𝑃
𝑇𝑜𝑡𝑎𝑙 𝐴𝑐𝑡𝑢𝑎𝑙 𝑃𝑜𝑠𝑖𝑡𝑖𝑣𝑒 = 𝑇𝑃
𝑇𝑃+𝐹𝑃
6.4.1.3 Recall
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.
𝑅𝑒𝑐𝑎𝑙𝑙 = 𝑇𝑃
𝑇𝑜𝑡𝑎𝑙 𝐴𝑐𝑡𝑢𝑎𝑙 𝑃𝑜𝑠𝑖𝑡𝑖𝑣𝑒 =
𝑇𝑃 𝑇𝑃 + 𝐹𝑁
6.4.1.4 F1 Score
F1 Score là trung bình điều hòa giữa Precision và Recall. Do đó nó đại diện hơn
trong việc đánh giá độ chính xác trên đồng thời giữa Precision và Recall.
𝐹1 = 2
𝑝𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛−1 + 𝑟𝑒𝑐𝑎𝑙𝑙−1
6.4.2. Mô hình Resnet50
6.4.2.1 Độ chính xác (Accuracy)
89
6.4.2.2 Các thông số khá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.
6.4.2.3 Confusion Matrix.
Confusion Matrix là một kĩ thuật để khái quát performance của một thuật toán phân
loại. Việc tính toán Confusion Matrix sẽ giúp chúng ta cải thiện được mô hình phân loại nhờ vào việc tìm kiếm được lỗi trong quá trình train dữ liệu.
90 ⮚ Nhận xét:
● 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
6.5. Hệ thống Đề Xuất
Hệ thống đề xuất được xây dựng dựa trên việc tính toán Cosine Similarity dựa trên kết quả Predict của Mô hình phân loại. Bởi vì kết quả dưới dạng Vector nên chúng ta có thể tính toán Distance của chúng. Đầu tiên, chúng ta chọn một tập nhạc cho mỗi thể loại để đề xuất. Tiếp theo khi kết quả dự đoán của nhạc được tính toán dựa trên mạng Neural Network. Để tính toán sự tương đương của 2 bản nhạc với kết quả Prediction là x = [x1, x2,… xn] và y = [y1, y2, …yn], chúng ta sử dụng :
91 Giá trị nhận được của hàm sẽ là nằm giữa -1 và 1. Chúng ta sắp xếp giá trị từ lớn nhất tới nhỏ nhất và chọn ra một số bản nhạc từ mảng sắp xếp đấy. Với hệ thống này , nhóm chọn ra 5 bài từ mảng Distance.
6.6. 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
92 Khi người dùng nghe bài nhạc thì Client sẽ gửi thông tin về bài hát hiện tại về cho hệ thống đề xuất. Hệ thống thực hiện tính toán phân loại và cho chúng ta kết quả là một mảng vector. Chúng ta thực hiện tính toán Distance Array với các bài hát có trong hệ thống để đưa ra đề xuất. Top 5 bài hát gần giống sát với bài hát hiện tại nhất sẽ được gửi về cho phía Client.
6.6.2. Đề xuất dựa trên bài hát người dùng nghe nhiều
Hệ thống căn cứ vào lịch sử người dùng khi nghe nhạc để lấy ra Top 3 bài hát người dùng nghe nhiều nhất ( trong Cơ sở dữ liệu có thể lưu số lần nghe hoặc là tổng thời gian mà người dùng nghe bài hát) và đư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.
93
6.6.3. Đề xuất dựa trên thể loại người dùng nghe nhiều
Hệ thống căn cứ vào lịch sử người dùng khi nghe nhạc để lấy ra Top 3 bài hát người dùng nghe nhiều nhất ( trong Cơ sở dữ liệu có thể lưu số lần nghe hoặc là tổng thời gian mà người dùng nghe bài hát) và tiến hành Predict đưa ra thể loại mà người dùng nghe nhiều nhất sau đó chọn ra các bài hát nhiều lượt nghe và nhiều lượt thích nhất để đề xuất cho người dù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
94
Chương 7. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
7.1. Ưu điểm
⎼ Giao diện Website trực quan, dễ sử dụng và đầy đủ thông tin cần thiết ⎼ Hỗ trợ đầy đủ chức năng cho quản trị viên
⎼ Các tính năng nhận diện và đề xuất có độ chính xác cao.
⎼ Tối ưu hóa trải nghiệm người dùng với các thiết kế giao diện linh hoạt cho điện thoại, máy tính bảng, máy tính.
⎼ Trang web gọn nhẹ và không chiếm quá nhiều tài nguyên ở phía Client
7.2. Nhược điểm
⎼ Thời gian nhận diện chậm hơn khi đưa lên Cloud do độ trễ khi truyền file. ⎼ Hệ thống nhận diện phụ thuộc nhiều vào chất lượng thu âm của người dùng và
phần cứng của Server, dẫn tới tốn nhiều chi phí khi mở rộng theo chiều ngang và dọc.
⎼ Đề tài chỉ hỗ trợ web browser, chưa có bản Mobile App.
⎼ Hệ thống nhận diện phụ thuộc nhiều vào chất lượng thu âm của người dùng và phần cứng của Server, dẫn tới tốn nhiều chi phí khi mở rộng theo chiều ngang và dọc.
⎼ Đề tài chỉ hỗ trợ web browser, chưa có bản Mobile App.
7.3. Kết quả đạt được
7.3.1. Về mặt nghiên cứu:
⎼ Nhóm đã có cơ hội tìm hiểu nghiên cứu thuật toán mà các công ty như Shazam,.. sử dụng.
⎼ Hiểu và áp dụng vào việc xử lý file âm thanh, các vấn đề về FFT (Fourier Transform).
95 ⎼ Tìm hiểu và áp dụng được các công nghệ Web và phương pháp xây dựng Project
phù hợp.
⎼ Hiểu và áp dụng Deep Learning vào hệ thống đề xuất. ⎼ Xây dựng hệ thống đầy đủ và liên kết từ nhiều thành phần.
7.3.2. Về mặt sản phẩm:
⎼ Giao diện trực quan và dễ nhìn. ⎼ Chức năng dễ sử dụng
⎼ Kết quả nhận diện và đề xuất có độ chính xác cao
7.4. Hướng phát triển
⎼ Tìm hiểu và phát triển các yếu tố phát hiện bản quyền nhạc. ⎼ Hỗ trợ đa nền tảng.
96
TÀI LIỆU THAM KHẢO Tài Liệu Tiếng Anh
[1] V. V. –. T. S. o. AI, "Deep Learning (for Audio) with Python," [Online]. Available: https://youtu.be/fMqL5vckiU0.
[2] A. A. S. G. D. S. Adiyansjaha, "Music Recommender System based on Genre using Convolutional Neural Networks".
[3] NAudio. [Online]. Available: https://github.com/naudio/NAudio. [4] MogoDB. [Online]. Available: https://mongodb.com/.
[5] Keras. [Online]. Available: https://keras.io/api/models/. [6] Angular. [Online]. Available: https://angular.io/.
97
Tài liệu Tiếng Việt
[1] “Viblo,” [Trực tuyến]. Available: https://viblo.asia/p/zing-mp3-toi-da-khai-thac- api-nhu-the-nao-L4x5xvdaZBM.
[2] "Machine Learning Cơ Bản," [Online]. Available: https://machinelearningcoban.com/2017/05/17/contentbasedrecommendersys/.