[ICASSP 2024] SERC-GCN: Speech Emotion Recognition In Conversation Using Graph Convolutional Networks

저번 리뷰에서는 텍스트 위주의 논문을 읽었다면, 이번에는 speech 단일 모달에서는 ERC를 어떻게 해결하고 있지라는 궁금증이 들어 ICASSP 논문을 가지고 와봤습니다. 이제까지 multi-modal ERC 논문 혹은 NLP ERC 논문만 읽어왔었는데, 이번을 기회로 speech, image ERC는 어떻게 수행하는지 팔로업 해볼까 합니다. 그럼 리뷰 시작하겠습니다.

<Introduction>

Speech Emotion Recognition (ERC)는 음성 언어로 표현된 감정을 인식하는 task라고 말할 수 있는데요. 현재 SER은 화자의 감정 상태를 식별하기 위해 음성 세그먼트 즉, 발화를 분석하는데 중점을 둡니다. SER은 감정 관련 정보가 대화의 여러 부분에 흩어져 있기 때문에 장기적인 맥락에 대한 효율적인 모델링이 필요하다는 문제가 있는데요. Speech emotion recognition in conversation (SERC)는 고립된 발화가 아닌 대화 맥락 내에서 음성 발화에서 감정과 관련된 속성을 포착하여 사람의 감정을 식별합니다.

Figure 1을 통해서 SERC 데이터셋이 어떻게 구성되어 있는지 감을 잡을 수 있는데요. 일련의 발화와 각 구성 발화에 대한 화자 정보가 주어지면 SERC는 각 발화의 감정을 예측합니다. SERC problem으로는 (i) utterance-level feature 추출, (ii) context, temporal, speaker dynamic과 관련된 대화에서 utterance dependency 모델링이라는 까다로운 작업을 해야한다는 것입니다. (i), (ii) 모두 효과적으로 감정 인식을 하기 위해서는 필수로 요구되는 것이지요.

SERC 방법론 중에는 여러 방법론이 있지만 (i)과 (ii)을 모두 잘 수행하는 모델은 없었고, 그나마 최근에 많이 연구되고 있는 graph 기반 방법론이 이 둘을 수행하였지만 본 논문에서는 graph 기반 방법론에서 이 둘을 잘 수행하는 모델을 만들고자 하였습니다. 그래서 graph 방법론인 GCN을 사용하여 각 발화 오디오의 graph 구조를 포착합니다. GCN 기반 보델링을 통해 framework는 오디오 데이터와 복잡한 대화 상호 작용을 보다 효과적으로 처리할 수 있습니다. 또한, 본 논문에서는 graph 복답도가 높아서 의미 있는 speaker dependency를 제대로 학습하지 못하는 현상을 graph sparsification을 통해서 해결하고자 하였습니다. 대화에서 감정의 최근성의 중요성을 고려하기 위해 작은 temporal window에서 발생한 과거와 미래의 에지만 고려합니다. 또한, 사용자의 장기적인 emotion profile (즉, self-dependency)를 고려하기 위해서 graph에서 동일한 speaker edge를 모두 유지함으로써 화자와 자신의 발화와의 관계를 보존합니다.

최종적으로 본 논문의 contribution을 정리하면 아래와 같습니다.

  • SERC-GCN (Speech Emotion Recognition in Conversation using GCN)을 제안함.
  • IEMOCAP에서 SOTA 달성
  • code 공개

<Problem definition>

먼저, 여러 발화자의 집합 S = ${s_1, s_2, …, s_S}$로 구성된 일련의 utterance ($u_1, u_2, u_3, …, u_N$)이 주어진다고 합시다. emotion label의 경우 L = {$l_1, l_2, …, l_y$}로 구성되어 제공됩니다. 이렇게 데이터가 주어졌을 때 SERC task는 speech signal utterance에 대해서 $l_{u_i} \in L$을 할당하는 것을 목표로 합니다.

<Method>

Figure 3은 이 논문에서 제안한 방법론의 전체 framework를 그림으로 그린 것인데요. stage one과 stage two로 나눠진 것을 확인할 수 있습니다. 그러면 stage one, two 순서대로 설명드리겠습니다.

<Stage One: Context-free>

context-free stage에서는 utterance-level speech feature를 추출하고 Figure 2를 통해 확인할 수 있는데 graph로 이를 모델링합니다.

<Utterance Graph construction>

single speech utterance는 frame-to-node transformation을 통해서 그래프로 모델링할 수 있는데요. 여기서 음성 신호의 M frame은 graph $G_u$에서 M개의 vertices를 형성합니다. Figure 2a에 표시된 것처럼 다른 논문에서도 많이 사용하는 OpenSMILE toolkit을 이용하여 raw speech utterance에서 Low Level Descriptors (LLD) set을 추출합니다. 여기서 추출된 feature는 표준 음향 측정값 set을 기반으로 한다고 하는데 여기에는 speech 분야에서 많이 사용하는 MFCC, zero-crossing rate, voice probability, f0 등이 포합된다고 합니다. 각 speech utterance는 directed cyclic graph $G_u$ = ($Z_u, E_u$)로 구성되며, 여기서 $Z_u$ = {$z_1, …, z_M$}은 utterance의 M vertices의 집합이고 edge 집합은 아래와 같이 정의됩니다.

utterance를 LLD에 매핑하기 위해서 sliding window로 audio signal을 처리한 뒤, 측정값을 추출합니다. 각 vertex $z_i$는 vertex feature $x_i$와 연관되어 있는데, 이는 vertex feature |$x_i$| = 35의 LLD를 말합니다. 각 speech sample은 M = 120개의 vertex로 이루어진 graph를 생성하고, 각 vertex는 25ms로 overlapping된 speech segment에 해당합니다. Figure 2b를 통해서 제가 방금 설명드린 것을 그림으로 확인할 수 있습니다.

<Utterance Graph Convolution>

각 utterance graph에 대해서 본 논문의 저자들은 graph convolutiona을 위해서 spectral GCN을 사용하였습니다. time domain에서의 graph convolution은 $h = x_i * w$로 주어지며, 여기서 h는 convolution output, $x_i$는 input vertex feature, w는 학습 가능한 graph convolution kernel을 말합니다. graph spectral domain에서의 위의 식은 $x_i$와 $w_u$의 곱인 $\hat{h} = \hat{x_i}⊗\hat{w_u}$와 같으며, 여기서 $\hat{h}, \hat{x_i},\hat{w_u}$는 convolution output, input features, kernel을 의미합니다. $\hat{H}=(U^TX)(U^TW_u)$를 이용하여 graph convolution을 계산하면, $H=U\hat{H}$로 주여지며, U는 고유 벡터를 의미합니다. 행렬 형태로 계싼할 경우, GCN의 k번째 layer에 대해 graph convolution propagation은 다음과 같이 계산됩니다.

본 논문에서는 두 개의 GCN layer에 대해서 k=2로 설정하였고, 위에서 설명한 convolution kernel을 MLP를 사용하여 다음과 같이 학습하였습니다.

<Utterance Feature Extraction>

GCN layer를 통과한 뒤, pooling layer를 통과합니다. pooling layer는 node-level embeddings ($H_k$)에서 utterance의 graph-level representation ($h_G$)를 주는데요. 그래서 이를 이렇게 $h_G = poolingfuction(H^k)$로 표현할 수 있습니다. 본 논문에서는 정확도를 높이기 위해서 Sum pooling을 사용했다고 하네요. 이렇게 pooling layer에서 utterance-level feature를 추출할 수 있습니다. 이렇게 pooling된 context와 무관환 speaker-independent utterance-level feature($g_i$)는 Stage one의 output이고, Stage two에서는 conversation graph를 초기화하는데 사용됩니다.

<Stage Two: Context-dependent>

Utterance-level feature($g_i$)는 temporal 및 speaker information을 모델링하는데 사용되며, 앞에서 말한 것처럼 conversation graph를 초기화 하는데 사용됩니다.

<Conversation Graph Construction>

Figure 3에서 볼 수 있듯이 N개의 utterance sequece ($u_1, u_2, u_3, …, u_N$)로부터 각 dyadic conversastion을 directed graph $G_c = (V_c, E_c, R_c, W_c)$로 구성합니다. 각 utterance는 vertex $v_i \in V_c$로 표현되며, utterance speech feature vector $g_i, i \in [1, 2, …, N]$으로 초기화 됩니다. 대화에서 utterance를 나타내는 각 vertex $v_i$는 past utterance 3개와 future utterance 3개를 연결하는 directed edge를 가지며, 대화를 넘어서는 edge는 생략합니다. 또한, 동일한 user에 대한 utterance도 directed edge를 통해서 연결됩니다. edge $r_{ij}$의 relation r은 utterance $v_j$의 화자 $s_i$와 utterance $v_j$의 화자 $s_j$ 사이의 화자 의존성을 기반으로 설정됩니다. 이 관계를 사용하여 vertice간의 past 및 future의 temporal dependency를 나타냅니다. edge weight는 similarity 기반 attention module을 사용하여 설정합니다. attention function은 각 vertex에 대해 들어오는 edge set의 총합이 1이 되도록 계산됩니다. weight는 다음과 같이 계산됩니다. $\alpha_{ij} = softmax(v_i ⊙ W_e [v_{j1}, …, v_{jm}])$ 이렇게 계산할수 있습니다. 여기서 $y = 1, 2, …, m$인 $j_y$의 경우, $v_i$에 연결된 m개의 vertex에 대한 weight를 계산하여 $v_i$가 총 weight 1을 받도록 합니다.

<Feature Transformation>

utterance feature $g_i$는 two-step graph convolution process를 사용하여 speaker-independent feature vector에서 speaker-dependent feature vector로 변합니다. 첫 번째 단계에서는 local neighbourhood information을 집계하여 각 vertex에 대해 feature vector를 계산합니다. 계산하는 식은 아래와 같습니다.

$i = 1, 2, …, N$의 경우, $a_{ii}, a_{ij}$는 edge weight를 나타내고, $N^r_i$는 relation $r \in R_c$에서 vertex i의 이웃 인덱스 입니다. $c_{i,r}$은 gradient-based learning setup에서 자동으로 학습되는 problem-specific normalization constant를 의미합니다. σ는 activation function을 나타내고 $W_r, W_0$은 transformation의 학습가능한 파라미터를 의미합니다. 두 번째 단계에서는 또 다른 transformation을 적용하여 local neighborhood의 정규화된 합을 누적합니다.

<Emotion Classifier>

speech utterance feature vector ($g_i$)와 context-dependent vector ($h_i$)를 concat하여 최종 utterance representation을 얻습니다. 그런 다음 fc network를 이용하여 emotion label 중 하나로 분류합니다.

<Experiments>

본 논문에서는 살짝 아쉬운 점이 IEMOCAP 벤치마크에 대해서만 성능을 리포팅하였다는 것인데요. 제 리뷰를 많이 보신 분들은 아시겠지만 IEMOCAP은 multi-modal emotion 데이터셋으로 본 논문에서는 category를 2두개의 set으로 가져갔습니다.

  • Set-1 includes happy, sad, neutral, angry and excited
  • Set-2 includes happy, sad, neutral, angry, excited, and frustrated

Table 1을 통해서 IEMOCAP 데이터셋의 구성을 확인 할 수 있습니다.

Table 2를 통해서 set-1에서의 model 성능을 확인할 수 있습니다. 밑줄은 second-best model이고 bold된 성능이 best 성능을 의미합니다. 본 논문에서 제안한 모델의 성능이 가장 높은 것을 확인할 수 있는데 조금 아쉬운 부분은 A. SER models 부분에 성능 리포팅한 모델을 보면 LSTM이나 RNN 과 같이 상당히 오래전에 제안된 모델들이 리포팅 된 것을 확인할 수 있는데요. 이번에 처음으로 SERC 분야 논문을 읽다보니 이렇게 리포팅 하는 것이 당연한 것인지에 대해서 잘 모르겠으나 너무 old한 모델도 같이 리포팅한 것은 아닌가 하는 생각이 드네요.

Table 3를 통해서는 set-2에서의 성능을 확인할 수 있는데요. 역시나 본 논문에서 제안한 모델의 성능이 가장 높은 것을 확인할 수 있습니다. 여기서도 아쉬운 점은 old한 모델을 위주로 성능을 리포팅했다는 것입니다.

Table 4를 통해서는 Model의 sensitivity를 확인할 수 있는데요. table 결과를 보면 recency와 self-dependency를 대화 graph 구성에 통합했을 때 가장 높은 정확도를 달성하는 것을 확인할 수 있습니다. 이를 통해서 graph 구성에 recency와 self-speaker dependency를 통합하는 것이 얼마나 중요한지를 확인할 수 있습니다.


이렇게 리뷰를 마쳐보겠습니다. 처음으로 SERC 논문을 읽어봤는데 speech에서는 어떻게 ERC를 다루는지 조금이나마 감을 얻을 수 있는 논문이었던 것 같습니다. 조금 아쉬운 부분은 본 방법론과 비교한 모델이 생각보다 old하고 벤치마크도 IEMOCAP 하나 밖에 없었다는 것인데 사실 ICASSP 논문 보면 벤치마크 하나만 리포팅하는 경우도 여러 있어서 어쩔 수 없나 싶기도 하네요. 여기까지 읽어주셔서 감사합니다.

Author: 김 주연

4 thoughts on “[ICASSP 2024] SERC-GCN: Speech Emotion Recognition In Conversation Using Graph Convolutional Networks

  1. 안녕하세요 주연님 좋은 리뷰 감사합니다.
    Experiment에서 WA%와 UA%를 통해 SERC를 평가하는 것으로 설명해주셨는데 WA와 UA에 대한 설명이 없어서 이해가 어렵네요. 혹시 WA와 UA에 대해서 부가설명해주실 수 있나요?
    감사합니다.

    1. 안녕하세요. 댓글 감사합니다!

      WA와 UA에 대해서 제가 설명드리는거를 깜빡했네요. WA는 Weighted ACC, UA는 UnWeighted ACC의 약자인데요. WA의 경우, 각 category의 sample의 불균형한 분포를 고려하여 정확도를 측정한 것이고, UA의 경우, category의 불균형을 고려하지 않고 정확도를 측정한 것을 말합니다.

      감사합니다.

  2. 좋은 리뷰 감사합니다.

    context-free 단계에서는 발화를 graph로 모델링 하는 과정으로 이해하면 될까요?? 혹시 graph를 sequential한 형태가 아닌 cyclic한 형태로 표현하는 이유가 무엇인 지 설명해주실 수 있나요??

    multi-modal emotion 데이터셋인 IEMOCAP를 2개의 set으로 가져갔다고 하셨는데, frustrated라는 감정의 유무에 따라 다르게 리포팅하였다는 것 인가요?? 그리고 두 set의 라벨은 frustrated의 유무에 따라 달라지는지도 궁금합니다.

    그리고 소제목에 대한 레벨을 다르게 표현해주시면 리뷰를 이해하는 데 더 도움이 될 것 같습니다!

    1. 안녕하세요. 댓글 감사합니다.

      1-1) 네 맞습니다.
      1-2) graph를 sequential한 형태가 아닌 cyclic한 형태로 표현한 것에 대해서 찬찬히 생각해봤는데, 제가 생각하기에는 utterance를 graph로 만들때 overlapping되는 부분이 있고 utterance의 순서를 표시하기 위해서 cyclic하게 만든 것은 아닌가 추측합니다.

      2) 네 맞습니다. 두 set의 라벨은 frustrated 유무에 따라 달라지는데요. IEMOCAP의 경우 대부분의 논문에서 리포팅하는 4감정 6감정 보다 훨씬 많은 감정으로 annotation 되었기 때문에 이렇게도 가져가는 것 같습니다. 사실 이렇게 성능을 리포팅하는 것은 처음보는 것이여서 다른 논문에서도 이렇게 성능을 리포팅하는지는 확인해봐야할 것 같습니다.

      3) 소제목 라벨 관련하여서 말씀해주셔서 감사합니다! 다음부터는 반영하여 작성해보겠습니다.

      감사합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다