− 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.
● 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
68 − 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 được cấu tạo thành từ nhiều âm thanh, bằng vào việc nhận biết chính xác các âm thanh thông qua: cao độ, trường độ, cường độ, chúng ta có thể tìm ra bài hát chỉ qua 1 đoạn giai điệu ngắn của nó. Cũng như với việc không so sánh âm sắc, nhiều bản khác nhau của 1 bài hát có thể được tìm ra
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ể chuyển thành quang phổ với 2 cột: Ox – trường độ, Oy – cao độ. Độ đậm nhạt tại 1 điểm trên quang phổ chính là cường độ của nó
69 − 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
− Tuy nhiên, cần biến đổi các giá trị của các điểm trên CM để khi lưu trữ chúng không bị thay đổi theo thời gian bắt đầu của bản thu âm
− Giải pháp: Tại mỗi Target Zone trong CM, chọn ra một điểm nằm ngoài khoảng đó để làm điểm Mốc (f1, t1), các Điểm (f2,t2) trong Target Zone sẽ được lưu trữ dưới dạng hash: {f1, f2, t2-t1}
Hình 5.3.3 Constellation Map
70 - 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.5 Time-Invariant Hashes
71 − 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
5.4. Hiện thực hóa công nghệ
5.4.1. Chuyển đổi và lưu trữ âm thanh
⎼ Lựa chọn file wav để thực hiện chuyển đổi sang FFT thay vì file mp3:
● Tuy file wav có dung lượng cao hơn nhưng là loại file không nén (uncompressed) vì vậy nên bảo toàn được dữ liệu. Giúp cho kết quả FFT trở nên chính xác hơn
⎼ Lựa chọn Sample Rate: 48 kHz vì khoảng nghe được của con người là từ 0 – 20kHz => 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
72 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
⎼ Quá trình chuyển đổi:
● Â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
73
5.4.2. Tìm kiếm bài hát
⎼ Từ TFPs của bản record, tạo các bảng Hash <Address, SongValue>
⎼ Đ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
5.4.3. Kiểm thử độ chính xác
- Cấu hình kiểm thử: ● Core I5 gen 11th
● CPU 4 Cores – 8 Processors ● Ram 8GB
● SSD: 256GB
74 ● Usage: 6 Processors
- 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:
● Kiểm thử bằng file
○ Bộ dữ liệu kiểm thử: 570 bài hát / 1000 bài hát
○ Nhóm cắt các bài hát thành đoạn 10s bắt đầu từ phút 1:00 (Đây là khoảng thời gian giữa ver 1 và điệp khúc của bài hát nhằm tránh các đoạn intro, 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
■ Rain-noise: tiếng mưa
■ Car-noise: tiếng xe ô tô chạy
■ Machine-noise: tiếng máy móc hoạt động ■ Texting-noise: tiếng gõ
■ 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
75 - Độ trùng khớp: trung bình 79.54%
○ Nhận xét:
■ Do các file này được cắt từ file gốc để lưu dữ liệu cũng như không bị ảnh hưởng bởi chất lượng thu âm nên độ chính xá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 0 5000 10000 15000 20000 25000 30000 1 17 33 49 65 81 97 113 129 145 161 177 193 209 225 241 257 273 289 305 321 337 353 369 385 401 417 433 449 465 481 497 513 529 545 561 Time(ms) 0.00% 20.00% 40.00% 60.00% 80.00% 100.00% 120.00% 1 18 35 52 69 86 103 120 137 154 171 188 205 222 239 256 273 290 307 324 341 358 375 392 409 426 443 460 477 494 511 528 545 562 Score
76 ○ 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 % ○ Nhận xét: 0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88 91 94 97 100 Time(ms) 0.00% 10.00% 20.00% 30.00% 40.00% 50.00% 60.00% 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88 91 94 97 100 Score
77 ■ Do các file chịu ảnh hưởng lớn từ chất lượng thu âm nên độ
78
Chương 6. HIỆN THỰC HÓA CHỨC NĂNG ĐỀ XUẤT NHẠC
6.1. Xây dựng hệ thống đề xuất
Để 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