Sunteți pe pagina 1din 3

Recunoașterea emoțiilor din semnalul audio

Universitatea Tehnica din Cluj Napoca

Abstract
Tema proiectului meu este recunoasterea emotiilor din
semnalul audio. Pentru realizarea proiectului mi-am propus sa
folosesc programul Anaconda Navigator in limbajul de
asamblare python. S-au folosit 1440 de fisiere audio cu emotii
diferite din baza de date RAVDESS (Ryerson Audio-Visual
Database of Emotional Speech and Song). Din baza de date
s-au pastrat doar fisierele audio. Programul este configurat
pentru 8 tipuri de emotii diferite care se defines din
esantioanele audio (neutru, calm, fericit, suparat, surprins, [1]
speriat, nervos si dezgustat). Coeficientii Mel Cepstrali (MFCC) – reprezintă o reprezentare
a spectrului de putere pe termen scurt al unui sunet, bazat pe o
Cuvinte cheie: recunoasterea emotiilor, RAVDESS database,
transformare de cosinus liniară a unui spectru de putere
confusion matrix, classification report, machine lerning
logaritmica pe o scală neliniare de frecvență. În practică, cea
mai des întâlnită aplicație a cepstrumului este în
1. Introducere recunuoașterea automată a vorbirii, pentru parametrizarea
Vorbirea este afectata de emotii: formei de undă a semnalului vocal și reducerea variabilității
Teama sau furia – vorbire rapida si puternic articulate, cu parametrilor la nivel de foneme intra și inter-vorbitor. Aceștia
tonalitate ridicata reprezintă energia medie din benzile de frecvență date un banc
Oboseala, plictiseala sau supararea – vorbire lenta si slab de filtre de lungime N, egal distanțate pe scala Mel.[2]
articulate, cu tonalitate redusa
Procesarea emotiilor din vorbire presupune recunoasterea Decision Tree Classifier - sunt o clasă de Machine Learning
emotiilor vorbitorului prin analiza unor sabloane ale vorbirii, capabilă să efectueze clasificarea pe mai multe clase într-un
analiza unor parametrii vocali si caracteristici prozodice.[4] set de date. Ca si in cazul altor clasificari, Decision Tree
Classifier are ca intrări două array-uri: un array X, rar sau
Avand toate datele putem construi un model care va fi utitlizat dens, de mărime [n_samples, n_features] care deține probele
pentru recunoasterea emotiilor din semnalul audio . Avand de antrenament și un array Y de valori întregi, mărime
fisierele audio, adica semnalul vocal, se doreste prelucrarea [n_samples], care deține etichetele de clasă pentru
semnalului in vederea recunoasterii si extragerii eșantioanele de antrenament. După ce a fost montat, modelul
caracteristicilor importante din acest punct de vedere. Pe langa poate fi apoi folosit pentru a prezice clasa de mostre.
parametrii consacrati precum frecventa fundamental sunt Alternativ, probabilitatea fiecărei clase poate fi prezisă, care
descrsi si parametrii MEL cepstrali MFCC(Mel frequency este fracțiunea de probe de formare din aceeași clasă într-o
cepstral coefficients .Se instaleaza LibROSA, un pachet frunză.[3].Decsion Tree este o metodă de învățare
python pentru analiza audio-video prin comanda “pip install neparametrică supravegheată utilizată pentru clasificare și
librosa” din linia de comanda Anaconda Prompt. In X, care regresie. Scopul este de a crea un model care prezice valoarea
este o lista de tip array se stocheaza sample rate iar in mfccs unei variabile țintă prin învățarea unor simple reguli de decizie
scoate coeficientii MFCC. Instructiunea y=X arata din ce array deduse din caracteristicile de date. Decision Tree construiește
scoate coeficientii mfcc. Array-ul care cuprinde coeficientii modele de clasificare sau regresie sub forma unei structuri de
mfcc il putem utliza cu machine learning cum ar fi arborele de copaci. Acesta rupe un set de date în subseturi mai mici și mai
decizie(“Decission Tree Classifier”). Pentru Decision Tree o mici, în timp ce în același timp un arbore de decizie asociat
sa avem o functie „fit” care pregateste classification report si este dezvoltat treptat. Rezultatul final este un arbore cu noduri
confusion matrix. Odata cu functia „fit” si functia de predictie, de decizie și noduri de frunze. Un nod de decizie are două sau
cu care vom face un test si vom obtine o probabilitate de mai multe ramuri. Nodul frunzei reprezintă o clasificare sau o
eroare. decizie. Cel mai important nod de decizie dintr-un copac care
Coeficienii Mel cepstrali sunt coeficienii cei mai des utilizai si corespunde celui mai bun predictor numit nod rădăcină.
care dau cele mai bune rezultate în sistemele automate de Copacii de decizie pot gestiona atât date categorice, cât și
recunoatere a vorbirii [60]. Exist o serie de abordri în literatura numerice.[2]
de specialitate pentru extragerea acestor caracteristici, toate Scikit-learn este o bibliotecă de învățare a machine learning
având ca elemente comune mai multi pasi, conform figurii: pentru limbajul de programare Python. Dispune de algoritmi
de clasificare, regresie și grupare, inclusiv mașini vectoriale de
suport, păduri aleatoare, amplificare gradient, k-mijloace și
DBSCAN și este proiectat să interacționeze cu librăriile
NumPy și SciPy numerice și științifice Python. Scikit-learn
este în mare parte scris în Python, cu niște algoritmi de bază testarea si clasificarea datelor in vederea stabilirii
scrise în Cython pentru a atinge performanța. [2] classification report si confusion matrix.
Confusion matrix este un tabel specific care permite
2. Metoda vizualizarea performantei unui algoritm, iar classification
Pentru testarea si functionarea proramului s-a folosit o parte report trebuie sa fie un raport simplu al masurii P/R/F/S
din baza de date audio-video RAVDESS. Aceasta contine (precision, recall, f1-score, support) pentru fiecare element din
1440 de fisiere audio, 24 de actori a cate 60 de mostre fiecare. datele de testare.
RAVDESS conține 24 de actori profesioniști (12 femei, 12 X_train – split astfel incat setul de test sa aiba procentaj 0.33
bărbați), vocalizând două declarații lexicale într-un accent din datele de intrare. Se foloseste functia de predictie prin care
neutru din America de Nord. Emoțiile de vorbire includ se produce o probabilitate de eroare, iar functia fit pregateste
expresii de calm, fericit, trist, supărat, speriat, surprins și raportul de clasificare.
dezgustat. Fiecare expresie este produsă la două nivele de
intensitate emoțională (normală, puternică), cu o expresie
neutră suplimentară. Fiecare dintre fișierele 1440 are un nume
unic de fișier. Numele de fișier constă dintr-un identificator
numeric de 7 părți (de exemplu, 03-01-06-01-02-01-12.wav).
Acești identificatori definesc caracteristicile stimulului.
1. Modalitate (01=full audio video, 02= numai video,
03 = numai audio)
2. Canal vocal (01=discurs, 02=melodie)
3. Emotia(01=neutru, 02=calm, 03=fericit, 04=trist,
05=suparat, 06=infricat, 07=dezgustat, 08=surprins)
4. Intensitatea emotionala(01=normal, 02=puternica).
5. Declaratie(01=”Copii vorbesc la usa”, 02=”Cainii
stau langa usa”)
6. Repetare(01=prima repetare, 02=a doua repetare)
7. Actorii de la 1 la 24, cu numere impare au fost
trecuti cei de sex masculin, iar cu numere pare cele
de sex feminin
[5]
3. Rezultate
Primul pas in construirea programului de detectie a emotiilor
consta in parcurgerea fisierelor audio si prelucrarea semnalelor In prima parte a proiectului, programul afiseaza numele
in vederea extragerii parametrilor de care avem nevoie. Se fisierelor parcurse si calea acestora pentru a vedea ca
folosesc liste de tip array pentru stocarea sample rating si a programul functioneaza. La final se afiseaza “done” pentru a
coeficientilor mfcc. Pentru analiza audio se insaleaza “librosa” ne da seama ca nu mai sunt fisiere de parcurs si se poate trece
din linia de comanda. In X se stocheaza sample rating, iar in la etapa urmatoare.
mfcc, coeficientii cepstrali. Instructiunea y=X arata din ce
array scoate coeficientii mfcc, iar n_mfcc=40 determina cati
coeficienti se extrag. Stringul “_file” este scazut cu 1 pentru a
prezice clasa fara erori. “arr” contine doua seturi : mfcc si
label. La parcurgerea fiecarui fisier audio se afiseaza calea
acestuia si numele, daca un fisier nu este valid, se sare peste
acesta pentru a nu intrerupe programul. In lista “lst” se adauga
datele fiecarui fisier audio cu exceptia celor sarite. La finalul
trecerii prin fiecare fisier se afisaza “done” pentru a stii ca
programul a terminat de parcurs toate mostrele audio.

In a doua parte a proiectului programul afiseaza classification


report si confusion matrix.
Clasification report determina precizia predictiilor labelurilor.
Coloana “precision” determina ce procent din predictii au fost
corecte
“recall” este procentul instantelor pozitive
“f1-score” procentul predictiilor pozitive corecte (media
armonica a preciziei si recall-ului)
“support” este numarul de esantioane adevarte care se afla in
clasa
In partea a doua a proiectului, cu X s-a definit setul de date de
intrare din lista, iar cu y, setul de date de iesire, adica emotia Confusion matrix este pentru a vedea care mostre sunt
stabilita. Se folosesc functii din biblioteca sklearn pentru clasificate gresit. Diagonala principal determina clasificarea
corecta. Matricea de confuzie este relative simplu de inteles, [5] https://www.kaggle.com/uwrfkaggler/ravdess-emotional-
insa terminologia asociata poate fi confuza. speech-audio

4. Discutii
Programul putea fi realizat mult mai complex folosind diferiti
algoritmi de machine learning de complexitati ridicate cum ar
fi : Artificial Neural Network (ANN), K-nearest Neighbour,
Support Vector Machine, Hidden Markov Model, Gaussian
Mixture Model, etc.

Pentru o fiabilitate crescuta, se poate introduce functia de


import al fisierelor audio direct din Google Drive folosind
Colab, un mediu Google Cloud pentru jupyter.

5. Concluzii si idei de continuare a


proiectului

In forma sa actuala, programul implementeaza o solutie de


baza pentru clasificarea semnalului vocal bazat pe continutul
sau emotional. Programului i-i se pot aduce multiple
imbunatatiri cum ar fi o mai buna performanta si o mai mare
precizie a rezultatelor, implementarea de functii complexe sau
de retele neuronale, importul datelor de intrare din Cloud si
multe altele.

6. References
[1] Contributii la recunoasterea vorbirii continue si la
procesarea limbajului natural – Domokos Josef

[2] www.wikipedia.com

[3] https://scikit-learn.org/stable/modules/tree.html

[4] Metode inteligente de rezolvare a problemelor reale – Laura


Diosan