Multi-modal 감정 인식 AI 모델 개발 - 연구과정(2)

davidshlee47 21.09.03
658 3 0

안녕하세요.😄 2차 포스팅으로 다시 돌아온 SKT AI fellowship 3기 Cycling Hit 팀입니다! 저희는 그동안 한국어 멀티모달 감정 인식 AI 모델 개발 연구 진행에 힘을 쏟고 있었는데요. 이번 포스팅을 통해 저희가 진행한 부분에 대한 설명과 함께 데모 영상도 보여 드리고자 합니다.

 

Dataset Preparation

먼저 데이터셋 선정 및 전처리 가공 과정을 말씀드릴게요.

 

저희는 기본적으로 AI Hub 멀티 모달 영상 AI데이터셋을 사용했습니다. 110시간 17분 분량의 멀티 모달(영상, 음성, 텍스트) 데이터셋이며 총 8만 여개의 발화 구간이 존재합니다. 각각의 발화 구간은 기쁨, 슬픔, 분노, 놀람, 공포, 경멸, 혐오, 중립에 관한 총 8종의 감정 라벨링이 있습니다. 추가적으로 감정의 강도를 나타내는 Arousal이 1(약함)부터 10(강함)까지 있고, 감정의 긍/부정도를 나타내는 Valence도 1(부정)부터 10(긍정) 까지 확인할 수 있습니다. 각각의 데이터 수를 정리해 보면 다음과 같습니다.

 

중간 발표까지는 모든 감정 class를 활용하지 않고, 부정(Negative) / 중립 (Neutral) / 긍정 (Positive)의 총 3가지 class에 대해서만 감정 인식 분류를 진행했습니다. 앞서 언급한 8종의 감정 라벨링 중에서 기쁨(Happy)만을 긍정에 포함시켰고, 슬픔/분노/공포/경멸/혐오 5가지 감정을 부정에 포함시켰습니다. 놀람(Surprise)는 긍정인지 부정인지 애매한 데이터가 많았기 때문에 데이터셋에서 제외시켰습니다.

앞서 대략 8만 여개의 발화 데이터가 있다고 말씀드렸지만 이 많은 데이터를 모두 사용할 수는 없었습니다. 왜냐하면 위 표에서도 볼 수 있듯이, 각 감정별 데이터수가 Unbalance 하였고, 실제로 음원을 들어보았을 때 배우의 연기력이 부족하거나 레이블링이 잘못된 경우가 많았기 때문입니다. 그래서 저희는 학습에 사용할 데이터셋을 추려내는 몇 가지 작업을 실행하였습니다.

우선, 텍스트와 음성의 Valence 및 Arousal를 활용하여 Weighted Valence를 구하고 해당 값이 극단적인 데이터만을 활용하여 학습을 진행합니다. 3가지 classes 중 neutral은 그대로 사용하지만 positive / negative의 경우 valence 값이 현저히 높거나/낮은 데이터들만 이용하였습니다. 위 그림에서처럼 모든 데이터셋이 아니라 특정 positive / negative 데이터들만을 골라서 감정이 확실하다고 가정하고 사용한 것입니다. 즉, 비교적 감정의 세기가 확실한 데이터만을 학습에 활용하자는 의도를 담고 있으며 이는 그저 좋은 데이터를 선별하기 위한 ‘분류기’로 활용이 됩니다. 해당 ‘분류기’를 통해 8만 여개의 전체 데이터를 추론하여 맞춘 데이터는 질 좋은 데이터로 간주하고 기본 데이터셋을 구성하였습니다. 또한, 추가적인 Human Efforts(아르바이트 고용을 통한 직접적인 분류)를 통해서 전처리가 된 기본 데이터셋의 audio를 직접 듣고 추가적인 정제 작업을 거쳤습니다.

 

 

Feature Extraction

음성 feature로 주로 사용되는 MFCC외에도, 여러 가지 features를 추출하여 실험에 이용해 보았습니다. 이 페이지에서는 그 feature들을 visualize하여 간단한 설명과 함께 보여드릴게요. 먼저 오디오 음성을 곧바로 시간 축 그래프로 나타내보면 다음과 같습니다.

 

MFCC

먼저, 음성에서 가장 흔히 사용되는 feature 중 하나인 MFCC(Mel-Frequency Cepstral Coefficient)입니다. 그래프로 표현해보니 조금 낯설게 느껴지지만, 소리의 고유한 특징을 잡아내는 데에 효과적인 feature입니다. 위에서 보신 audio 파형을 짧은 구간마다 푸리에 트랜스폼을 적용하여 스펙트럼을 구하고, mel filterbank를 취해 mel spectrogram을 구할 수 있습니다.(저번 글에서 mel spectrogram의 그래프를 보여드렸었죠 ㅎㅎ) 그 중에서도, 캡스트럴 분석을 통해 MFCC를 구할 수 있습니다. 보통은 13차를 사용하여 차분 값까지 활용하거나, 40차까지의 MFCC를 이용하곤 해요. 위의 그래프는 40차일 때의 모습이라 세로 축 차원이 40인 것을 확인하실 수 있습니다.

그 외에도, tempogram, pitch 등 다양한 음성 feature들을 사용해보기도 하였는데, MFCC만을 사용할 때보다 월등한 성능 차이를 보이지는 않았습니다.

 

PASE+

 

또 저희는 Multi-Task Self-Supervised Learning for Robust Speech Recognition(Micro Ravanelli, Yoshua Bengio, ICASSP2020)에서 발표한 PASE+ feature를 사용해 보기도 하였습니다. 이는 이전에 이들이 연구했던 PASE에서 worker 종류를 늘리고 Encoder 구조를 조금 변형한 것입니다. encoder에서 추출한 feature를 가지고 각 worker의 종류에 해당하는 속성을 복원하는 방식으로 학습합니다. 이렇게 PASE 학습을 마치고 나면, workers를 떼고 encoder만을 가져가서 사용자의 task에 맞추어 feature extractor로 사용할 수 있습니다.

 

 

Audio Augmentation

audio같은 경우 uni-modal로만 사용했을 때 감정을 파악하기 더 어렵기 때문에 데이터를 더 다양하게 사용하고자 augmentation 방안도 생각하게 되었습니다. crop, loudness, noise 추가, pitch조정 등 다양한 방식으로 augmentation이 가능합니다. 아래는 다양한 augmentation에 대해 시간 축으로 plot 및 스펙트로그램을 나타낸 것입니다. 시간 축 그래프에서는 파란 색이 기본 오디오이고, 붉은 색이 augment된 오디오 입니다. 스펙트로그램에서는 상단이 기본, 아래가 augment된 오디오 입니다.

 

crop augment audio

 

 

loud augment audio

 

 

mask augment

 

noise augment

 

pitch augment

 

 

Proposed Model

Proposed Model

저희는 트랜스포머 기반의 멀티 모달 모델을 구성하였습니다. 저희가 참고한 논문 “Self-Supervised Learning with Cross-Modal Transformers for Emotion Recognition” 이외에도 다른 멀티 모달 태스크에서 Cross-Modal Transformer가 많이 사용되는 것을 확인 할 수 있었고, 저희 또한 multi-modal 학습을 위해 cross-modal transformer네트워크를 설계하였습니다. 아래는 위 논문에서 제안한 Text input을 anchor로 하는 Video-Audio Multi-modal Transformer 모델의 총 구조입니다.

 

저희는 video input은 사용하지 않고, KoBERT와 MFCC 또는 PASE를 통해서 텍스트와 음성 특징을 추출하여 사용하였습니다. 이후 CNN encoder와 self-attention, 그리고 cross-modal transformer 순으로 연관성 정보를 계산하고 마지막 FC layer를 통해 최종 output을 계산합니다.

 

 

Results & Demo Video

Audio / Text / Multi-modal 모델 성능 비교

 

 

무엇보다 저희가 하고 있는 태스크는 “멀티모달” 감정 인식이기 때문에 “유니모달”로 한 방식과의 비교가 필요할 것 같습니다. 위 그래프는 Audio-Only, Text-Only, Multi-Modal 모델의 Validation F1-Score 성능을 비교한 것입니다. Multi-Modal의 성능이 94.19%로 가장 높았으며, Audio-Only 보다는 Text-Only가 더 좋은 성능을 보였습니다. “사랑해”, “싫어” 등의 감정과 직접적인 연관이 있는 단어들 때문에 Text-Only 모델이 Audio-Only에 비해 비교적 높은 성능을 보인 것 같으나, Multi-Modal과 Text-Only 성능 간에 9.6% 정도의 간극이 있는걸 보아서 Audio 정보가 감정 정보를 인식하는데 큰 도움을 주고 있다고 할 수 있습니다.

 

Demo 영상

중간 발표 때에는 시간 관계 상 저희가 준비한 데모 영상을 다 보여드리지 못해 조금 아쉬웠는데요, 이 곳에 추가본 하나 더 업로드하면서 아쉬움을 덜어볼까 합니다 ㅎㅎ

 

 

저희 팀원이 녹음한 발화 구간에서, '나는 너를 만나(여기까지는 부정적 prediction) 너무 행복해(positive prediction)'의 결과를 보시면 멀티 모달 감정 인식 모델의 inference를 잘 확인하실 수 있습니다. 그 다음 문장인 '할게 너무 많아서 힘들어'같은 발화의 경우 negative, '나는 오늘 점심에 냉면을 먹었다(음성 인식은 먹어로 인식됐네요 ^^;)'의 경우 'neutral' 결과가 나타납니다.

 

 

저희 팀원 둘의 대화에서, 첫 번째 발화자가 '그림 정말 잘 그리시네요' 같은 경우 positive를, 돌아오는 답변 '아니에요~'의 경우에도 'positive'의 결과를 확인하실 수 있습니다. 사실 text로만 분류하게 된다면 '아니에요'같은 경우 negative 감정이 예측되지만, multi-modal 학습 덕에 올바르게 판단한 대표적인 예시입니다.

이 외에도 재미난 예시들이 많은데, 모델 성능을 더 일반화 시켜 최종 발표때에는 더 재미 있는 데모 영상을 보여드릴게요.

 

Future Plans

앞으로 저희의 계획은 크게 두 가지입니다. 첫째, 한국어 감정 인식 모델 성능 일반화/고도화입니다. 둘째, 영어 감정 인식 데이터셋을 활용한 모델 학습 및 실험 진행입니다.

저희가 직접 구성 및 가공한 데이터셋에 대해서만 잘나오는 것이 아니라, Unseen Data에 해서도 결과를 잘 맞추도록 하여 모델의 일반화를 향상 시키고자 합니다. Text / Audio 사이의 가중치 부여, 감정 레이블링의 세분화, Multimodal & Unimodal 레이블을 모두 사용하는 등 다양한 방법을 시도하고자 합니다! 마지막으로는 3개의 긍정/부정/중립의 emotion class에서 그치지 않고 그 이상의 여러 감정 emotion을 인식할 수 있도록 할 것입니다.

감정 인식 분야에는 IEMOCAP, MOSEI 등의 널리 사용되는 English Emotion Recognition Benchmark Dataset이 있습니다. 한국어 감정 인식 성능을 고도화/일반화하는데 성공하고 나면, 영어 데이터셋에도 지금까지 쌓아온 방법론들을 활용하여 Anger / Happiness / Sadness / Neutral 총 4가지 emotion classes를 판별하는 State-of-the-Arts 네트워크를 구현하는 것이 저희 팀의 최종 목표입니다. Cycling Hit 파이팅! 😆

davidshlee47 님의 최신 블로그

더보기

관련 블로그