
Речь — это естественный и интуитивный способ общения и выражения эмоций. По мере развития технологий обработки речи и языка обнаружение речевых эмоций становится все более важной областью исследований. Системы обнаружения речевых эмоций могут использоваться в различных приложениях, таких как колл-центры, консультации по психическому здоровью и социальная робототехника.
В этом сообщении блога мы рассмотрим, как создать простую систему обнаружения речевых эмоций с помощью 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.