Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Tạo mô hình phân loại nhạc bằng học máy
Hướng Dẫn Đồ ÁnLập Trình AI

Tạo mô hình phân loại nhạc bằng học máy

Chia sẻ
Chia sẻ

Phân loại thể loại nhạc tự động là ứng dụng thiết thực của machine learning trong xử lý tín hiệu âm thanh. Nó không chỉ giúp các nền tảng như Spotify, YouTube Music hay Apple Music cá nhân hóa trải nghiệm người dùng mà còn hỗ trợ phân tích xu hướng, tạo playlist thông minh, và lọc nội dung phù hợp. Thông qua mô hình phân loại, hệ thống có thể nhận biết nhanh chóng các thể loại như pop, rock, jazz, classical, Metal…

Trong bài viết này, bạn sẽ học cách xây dựng một mô hình phân loại nhạc hiệu quả từ đầu đến cuối: từ chuẩn hóa dữ liệu, trích xuất đặc trưng âm thanh với LibROSA, huấn luyện mô hình Scikit‑learn hoặc TensorFlow, đến đánh giá mô hình và mô tả mở rộng. Nếu bạn đã từng thực hiện các bài như Tự động phân loại ảnh thời trang bằng AI hoặc Tạo chức năng nhận dạng ảnh trong app di động, thì đây là cơ hội mở rộng sang dạng dữ liệu âm thanh đầy tiềm năng.

Dữ liệu nhạc tồn tại và dễ tải

Hiện nay, GTZAN dataset là một benchmark phổ biến và dễ truy cập:

Dataset được tổ chức và được giữ lưu trữ lâu dài qua các nền tảng chính thức, nên bạn hoàn toàn yên tâm về độ tồn tại.

Chuẩn bị môi trường và dữ liệu

Cài đặt thư viện cần thiết:

pip install librosa scikit-learn tensorflow-datasets matplotlib numpy

Load dataset GTZAN từ TFDS:

import tensorflow_datasets as tfds

ds = tfds.load('gtzan', split='train', shuffle_files=True)

Hoặc tải dữ liệu từ Kaggle, giải nén thư mục genres/ theo cấu trúc:

genres/
   blues/
     blues.00000.wav
     ...
   classical/
     ...
   ...

Trích xuất đặc trưng MFCC từ audio

Giải thích: LibROSA giúp trích xuất đặc trưng như MFCC, Chroma, spectral contrast… nhưng MFCC là tiêu chuẩn trong phân loại thể loại nhạc vì thể hiện phổ tần âm thanh theo cách con người nghe.

import os
import librosa
import numpy as np

DATASET_PATH = 'genres/'
features, labels = [], []

for genre in os.listdir(DATASET_PATH):
    for fname in os.listdir(os.path.join(DATASET_PATH, genre)):
        if fname.endswith('.wav'):
            filepath = os.path.join(DATASET_PATH, genre, fname)
            y, sr = librosa.load(filepath, duration=30)
            mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)
            mfcc_mean = np.mean(mfcc.T, axis=0)
            features.append(mfcc_mean)
            labels.append(genre)

Giải thích: Mỗi file nhạc được đại diện dưới dạng vector 13 chiều MFCC trung bình, giúp giảm chiều dữ liệu và giữ được đặc trưng âm thanh cần thiết.

Huấn luyện mô hình với Scikit‑learn

Random Forest Classifier

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report

X_train, X_test, y_train, y_test = train_test_split(
    features, labels, test_size=0.2, random_state=42
)

clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred))

Tùy chọn mô hình khác:

# Support Vector Machine
from sklearn.svm import SVC
clf = SVC(kernel='linear')
# K-Neighbors Classifier
from sklearn.neighbors import KNeighborsClassifier
clf = KNeighborsClassifier(n_neighbors=5)

Mỗi mô hình có ưu và nhược riêng về thời gian huấn luyện và độ chính xác.

Trực quan hóa đặc trưng âm thanh

Hiển thị MFCC của một file audio:

import librosa.display
import matplotlib.pyplot as plt

y, sr = librosa.load('genres/pop/pop.00000.wav', duration=30)
mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)

plt.figure(figsize=(10, 4))
librosa.display.specshow(mfcc, x_axis='time')
plt.colorbar()
plt.title('MFCC')
plt.tight_layout()
plt.show()

Công cụ hữu ích khi bạn muốn chuyển sang học sâu như sử dụng spectrogram hoặc CNN.

Nâng cấp mô hình bằng học sâu (Deep Learning)

Sử dụng spectrogram làm input cho CNN

import tensorflow as tf

def get_spectrogram(file_path):
    y, sr = librosa.load(file_path, duration=30)
    spect = librosa.feature.melspectrogram(y=y, sr=sr)
    spect_db = librosa.power_to_db(spect, ref=np.max)
    spect_db = np.expand_dims(spect_db, -1)
    return spect_db

# Sau đó chuẩn hóa và build model CNN

Bạn có thể xây dựng CNN-based classifier hoàn chỉnh, fine-tune bằng Keras hoặc PyTorch để cải thiện độ chính xác trên GTZAN (~90%+).

Đánh giá và so sánh mô hình

Một vài chỉ số quan trọng:

  • Precision, Recall, F1-Score theo thể loại

  • Confusion Matrix để xem thể loại dễ nhầm nhất

  • Cross-validation 5‑fold để đánh giá tổng thể

from sklearn.model_selection import cross_val_score
scores = cross_val_score(clf, features, labels, cv=5)
print("Cross‑validation accuracy:", scores.mean())

Kết luận

Phân loại nhạc bằng học máy là bài toán lý thú và thực tiễn cao, ứng dụng rộng rãi trong streaming service, nền tảng playlist cá nhân hóa và phân tích thói quen nghe nhạc. Qua GTZAN và LibROSA, bạn có pipeline hoàn chỉnh:

  • Trích xuất đặc trưng MFCC

  • Huấn luyện mô hình ML như RandomForest, SVM, KNN

  • Trực quan hóa và đánh giá kết quả

  • Nâng cấp sang CNN/Spectrogram learning khi cần

GTZAN dataset là một dataset chuẩn, dễ tải và dễ dùng như thành phần trong TensorFlow Datasets hoặc qua Kaggle

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!