Notice
Recent Posts
Recent Comments
Link
헬창 개발자
[졸업 프로젝트] 감정 -5- 본문
이번 포스팅은 VAD를 학습한 모델을 이용해 감정 차원에 매핑을 하는 방법을 소개합니다.
저번 포스팅때 학습한 모델에 입력값에 문장을 입력하고 출력되는 VAD값을 확인해 보겠습니다
"How can you say that?" 이라는 문장의 VAD값은 [0.4840004858940471, 0.3319215985240239, 0.3930063435385865] 이네요
이제 감정 매핑을 위한 알고리즘이 필요한데 저는 코사인 거리를 계산하여 가장 가까운 벡터값에 감정을 매핑하는 방법을 선택하겠습니다.
코드는 다음과 같습니다.
def vad_cos(vad):
# surprise
v_surprise = 0.875
a_surprise = 0.875
d_surprise = 0.562
# anger
v_anger = 0.167
a_anger = 0.865
d_anger = 0.657
# sadness
v_sadness = 0.052
a_sadness = 0.288
d_sadness = 0.164
# disgust
v_disgust = 0.052
a_disgust = 0.775
d_disgust = 0.317
# fear
v_fear = 0.073
a_fear = 0.84
d_fear = 0.293
# joy
v_joy = 0.98
a_joy = 0.824
d_joy = 0.794
dists = {}
dists['surprise'] = distance.cosine([scale(v_surprise), scale(a_surprise), scale(d_surprise)], vad)
dists['anger'] = distance.cosine([scale(v_anger), scale(a_anger), scale(d_anger)], vad)
dists['sadness'] = distance.cosine([scale(v_sadness), scale(a_sadness), scale(d_sadness)], vad)
dists['disgust'] = distance.cosine([scale(v_disgust), scale(a_disgust), scale(d_disgust)], vad)
dists['fear'] = distance.cosine([scale(v_fear), scale(a_fear), scale(d_fear)], vad)
dists['joy'] = distance.cosine([scale(v_joy), scale(a_joy), scale(d_joy)], vad)
print(dists)
return min(dists, key=dists.get)
코드를 다시 실행한다면 코사인 거리가 제일 짧은 fear에 감정이 잘 분류되는것을 확인이 가능합니다.
{
'surprise': 0.013786639073757434,
'anger': 0.05668916978805527,
'sadness': 0.027631403312294744,
'disgust': 0.06536700689907893,
'fear': 0.06916755311319811,
'joy': 0.007088526663760586
}
감정의 연속선은 fear가 제일높고 disgust, anger 순으로 감정이 변화 하는것을 볼 수 있습니다.
이제 STT에서 받아온 텍스트 데이터를 벡터로 바꿔 모델의 입력 값으로 넣어 거리 계산만 해준다면 음성 감정 인식단계는 구현이 끝입니다!!
'프로젝트' 카테고리의 다른 글
[졸업 프로젝트] 감정 - 7 (END) - (1) | 2023.02.14 |
---|---|
[졸업 프로젝트] 감정 -6- (0) | 2023.02.14 |
[졸업 프로젝트] 감정 -4- (0) | 2023.02.03 |
[졸업 프로젝트] 감정 -3- (0) | 2023.02.03 |
[졸업 프로젝트] 감정 -2- (0) | 2023.02.03 |
Comments