Речь — это естественный и интуитивный способ общения и выражения эмоций. По мере развития технологий обработки речи и языка обнаружение речевых эмоций становится все более важной областью исследований. Системы обнаружения речевых эмоций могут использоваться в различных приложениях, таких как колл-центры, консультации по психическому здоровью и социальная робототехника.
В этом сообщении блога мы рассмотрим, как создать простую систему обнаружения речевых эмоций с помощью Python. Мы будем использовать библиотеку с открытым исходным кодом под названием librosa для извлечения признаков из речевых сигналов, а затем использовать методы машинного обучения для классификации эмоций.
Во-первых, нам нужно установить необходимые библиотеки:
!pip install librosa !pip install soundfile !pip install numpy !pip install sklearn
Далее нам нужно импортировать необходимые библиотеки:
import librosa import soundfile import numpy as np import sklearn import os
Мы будем использовать набор данных RAVDESS, общедоступный набор данных записей речи, который включает восемь эмоций: нейтральные, спокойные, счастливые, грустные, злые, испуганные, отвращение и удивление. Мы будем использовать первые две секунды каждой записи речи и извлекать кепстральные коэффициенты частоты Mel (MFCC) в качестве признаков.
emotions = { '01': 'neutral', '02': 'calm', '03': 'happy', '04': 'sad', '05': 'angry', '06': 'fearful', '07': 'disgust', '08': 'surprised' } def extract_feature(file_name): with soundfile.SoundFile(file_name) as sound_file: X = sound_file.read(dtype="float32") sample_rate = sound_file.samplerate mfccs = librosa.feature.mfcc(X, sr=sample_rate, n_mfcc=13) return mfccs def load_data(test_size=0.2): X, y = [], [] for file in os.listdir("data/"): if file.endswith(".wav"): emotion = emotions[file.split("-")[2]] feature = extract_feature("data/" + file) X.append(feature.T) y.append(emotion) return sklearn.model_selection.train_test_split(np.array(X), y, test_size=test_size, random_state=42) X_train, X_test, y_train, y_test = load_data(test_size=0.25)
Мы будем использовать классификатор машины опорных векторов (SVM) для классификации эмоций. Мы будем использовать библиотеку scikit-learn для обучения классификатора.
from sklearn.svm import SVC model = SVC(kernel='rbf', probability=True) model.fit(X_train.reshape(len(X_train), -1), y_train)
Наконец, мы можем использовать обученную модель для прогнозирования эмоций новых записей речи.
filename = 'data/03-01-01-01-01-01-01.wav' feature = extract_feature(filename).T result = model.predict(feature.reshape(1, -1))[0] print(f"Emotion detected: {result}")
В этом примере мы загружаем данные, разбиваем их на наборы для обучения и тестирования и обучаем модель SVM. Затем мы используем модель, чтобы предсказать эмоции от новой записи речи.
Обнаружение речевых эмоций является сложной задачей из-за изменчивости речевых сигналов и сложности человеческих эмоций. Однако мы можем создавать эффективные системы обнаружения речевых эмоций, используя методы машинного обучения и библиотеки с открытым исходным кодом, такие как librosa.