안녕하세요. 이번 x-review는 ERC (Emotion Recognition in Conversation) 관련한 논문 입니다. 이번에는 multi-modal이 아닌 text 모델 관련한 논문인데요. text를 베이스로한 모델의 성능이 mult-modal을 베이스로한 모델의 성능과 차이가 크지 않은 것에 의문을 가지며, text 모델은 어떤 방법론을 사용하여서 성능이 이리 좋을까 라는 생각을 하게 되어 선택하게 되었습니다.
이 논문의 저자는 kakao에 속해있는 사람인데요. 제가 학부 수업인 데이터사이언스특론 수업을 들으며 이 사람의 논문과 코드를 많이 참고했는데 마침 ERC 논문이 있길래 가져와봤습니다. 무려 2달 단위로 탑티어 학회 논문이 나오는 엄청난 분이여서 어떤 방법론인지 많이 궁금하네요. 그러면 리뷰 시작하겠습니다.
<Introduction>
Introduction에서는 ERC의 최신 연구들이 어떻게 진행되고 있는지에 대해서 나옵니s다. 현재 발화만 고려하는 (이전의 발화는 고려하지 않는) utterance-level의 emotion recognition은 한계점이 있으며, 좋은 performance를 보이지 못한다고 합니다. 그래서 최근 연구는 이전의 발화를 고려하여 emotion recognition을 진행하는데요. 예로 DialogueRNN, AGHMN 모델이 있습니다. 두 모델 모두 이전의 발화로부터 정보를 얻어 emotion recognition을 합니다.
최근에는 많은 연구들이 “external knowledge(외부 지식)”을 통해 ERC를 하고 있다고 합니다. 여기서 외부 지식은 상식, 감정사전 등을 의미합니다. 그런데 외부 지식을 사용하는데 문제점이 있습니다. 바로 영어에서만 사용이 가능하다는 문제 입니다.
왜 영어권에서만 사용가능할 걸까요? 다른 언어권에서 사용하기 위해서 외부 지식 데이터를 새롭게 설계해야하는데 이 과정이 매우 비싸고 어렵기 때문입니다.
그래서 이 논문에서는 이를 pretrained model을 이용해서 해결하자고 말합니다. NLP 연구에서 pretrained languages model을 사용함으로서 많은 효과를 얻을 수 있다는 것이 입증되면서 많은 나라에서 이미 pretrained model이 개발이 되었다고 합니다. 또한 pretrained model을 knowledge base로서 사용하는 연구도 나왔다고 합니다. 이 때문에 pretrained model을 사용하면 기존의 외부 지식을 영어권 나라만 사용 가능한 것에 대한 한계를 극복할 수 있습니다. 이를 이용하여 논문의 저자는 구조화된 외부 데이터에 대한 의존성을 없애고 pre-trained model을 knowledge의 extractor로 사용하였습니다.
- CoM : context embedding module
- PM : pre-trained memory module
CoM은 context로서 모든 이전의 발화를 반영하는데요. auto-regressive model로, 이전의 발화와 현재의 발화 사이의 attention을 통해 현재 감정을 예측합니다.
PM은 발화로부터 memory를 추출합니다. 여기서는 memory embedding으로서 pre-trained model의 output을 사용합니다.
위의 CoMPM을 이용하여 sota를 달성했다고 하는데요. 또한 영어가 아닌 다른 언어에서도 적용할 수 있다는 것이 contribution을 가집니다. 그러면 CoMPM이 어떻게 감정을 예측하는지 설명드리겠습니다.
<Problem Statement>
problem statement 입니다. 여러 기호가 많이 나와서 헷갈릴텐데 u는 발화, p는 참가자, e는 감정 이렇게 3가지가 중심이구나를 생각해주시면 되겠습니다.
- M : 발화 수
- (u_1, p_{u_1}), (u_2, p_{u_2}), … , (u_M, p_{u_M}) : M개의 sequential 발화
- u_i : 발화 (화자 p_u_i가 말한 발화)
- p_{u_i} : 대화 참가자 중 한명
여기서 i와 j가 다르다는 가정에서 p_{u_i}와 p_{u_j}는 같은 화자일 수 있습니다. 또한 논문에서는 대화 참가자의 최소 수가 2명 혹은 그 이상이라는 것을 가정하여 진행하고 있습니다.
- e_t : u_t 발화의 예측된 감정
- u_t : t번째 턴의 발화(the utterance of the t-th turn)
- h_t = {u_1, … , u_{t-1}} : t 이전의 발화
<model>
[그림 1]을 통해서 model의 전체적인 구조를 확인할 수 있습니다. 선이 굉장히 많은데 대충 이전의 발화를 다 참고하는구나가 살짝 보이시죠?
<CoM: Context Embedding Module>
context embedding module은 t번째 턴 전의 모든 발화를 대화 context로 고려하여 e_t를 예측합니다. [그림2]를 통해 3명의 대화 참가자(s_A, s_B, s_C)가 주어졌을 때, s_A가 발화한 u_6의 감정을 어떻게 예측하는지에 대해서 확인할 수 있습니다. 이전의 발화는 h_6 = {u_1, ... , u_5}로 표시할 수 있으며, u_6과 h_6 사이의 관계를 고려하여 e_6을 예측합니다. 이 논문에서 사용하는 데이터셋은 최소 2명 이상의 화자가 있다고 가정하는데요. 이 때문에 special token인 <s_{\mathbb{P}}>를 주어 대화의 참가자를 구별합지다. 여기서 \mathbb{P}는 참가자의 집합을 의미하는데요. 즉, 동일한 화자의 발언 앞에 동일한 special token을 주어 구별합니다.
context model로는 transformer encoder를 사용하였습니다. pretrained model을 사용하였고 RoBERTa를 사용했다고 하네요. 감정을 예측하기 위해서 <cls> token을 사용하였는데, <cls> token은 input과 concat됩니다. context model을 식으로 표현하면 [식 (1)]과 같습니다.
여기서 \mathbb{P}_{:t-1}은 이전 턴의 화자의 집합을 의미합니다. c_t\in{\mathbb{R}}^{1\times{h_c}}이며 h_c는 CoM의 차원을 의미합니다.
<PM:Pre-trained Memory Module>
앞에 introduction에서 pretrained language model이 외부 지식의 base로 사용될 수 있다고 언급하였는데요. 여기서는 이를 이용하여 현재 발화 u_t의 감정을 활용하기 위해 화자의 이전 발화에서 pretrained memory를 추출 및 트랙킹 합니다. 그런데 만약에 화자가 현재 턴 전에 한번도 나타나지 않았다면 어떻게 pretrained memory를 추출할 수 있을까요? 그럴때는 pretrained memory의 결과를 zero vector로 준다고 합니다.
<cls>가 문장 분류 테스크에서 가장 많이 사용하기 때문에 <cls> token의 임베딩 출력값을 발화를 표현하는 벡터로서 사용했다고 합니다. 식으로 표현하면 [식 (2)]와 같습니다.
여기서 p_{u_i}는 p_S와 같은데, S는 현재 발화의 화자를 의미합니다. 그리하여 k_i \in{\mathbb{R}}^{1\times{h_c}}이며, h_k는 PM의 차원을 의미합니다.
<CoMPM: Combnation of CoM and PM>
이렇게 각각 CoM과 PM의 작동 원리에 대해서 설명하였는데요. 논문의 저자가 제안한 모델이 CoMPM인 만큼 어떻게 이 둘을 합쳤는지에 대해서 말씀드리고자 합니다.
논문의 저자는 CoMPM을 결합할 때 이러한 가정을 가지고 결합하였는데요. 이전의 연구 결과에서 현재의 turn에 가까운 발화가 response에 더 중요하다는 것에 착안하여 현재의 발화에 가까운 발화가 감정 인식에 더 중요할 것이다라고 가정합니다.
<Tracking method>
[그림 3]을 통해 memory tracking을 어떻게 하였는지 확인할 수 있는데요. GRU를 이용하여 k_i tracking method를 사용하였습니다.
tracking method는 현재 감정에 대해서 모든 화자의 발화의 중요성이 동일하지 않고 현재 발화의 거리에 따라 달라진다고 가정합니다. 즉, 대화의 흐름은 대화가 진행됨에 따라 달라지기 때문에, 감정의 미치는 영향이 현재의 발화와의 거리에 따라 달라질 수 있다는 것이지요. 그래서 GRU를 이용하여 k_i의 sequential position 정보를 track하고 capture합니다. 이를 식으로 표현하면 [식 (3)]과 같습니다
여기서 t는 현재 발화의 turn index를 의미합니다. n은 화자의 이전 발화의 수, i_s (s = 1, 2, … , n)는 각각의 턴을 의미합니다. kt_t\in{\mathbb{R}}^{1\times{h_c}}이며 kt_t는 k_{i_n}의 output을 의미합니다. 결과적으로 멀리 있는 발화에 대한 지식은 희석되고 현재 발화에 대한 영향은 감소됩니다.
GRU는 2개의 layer로 구성되어 있습니다. output vector의 차원은 h_c입니다. 그리하여서 최종적으로 얻는 output vector o_t는 kt_t와 c_t를 더하여 얻을 수 있습니다. [식 (4)]를 통해 어떻게 더하는지 수식으로 확인할 수 있습니다.
여기서 W_p는 context output의 차원으로 pre-trained memory를 project하는 matrix를 의미합니다.
<Emotion prediction>
자 드디어 감정을 예측해봅시다. 소프트맥스를 이용하여서 예측을 하는데 o_t와 선형행렬 W_o\in{\mathbb{R}}^{h_e\times{h_c}}를 곱한 벡터에 소프트맥스를 적용시켜 감정 class 개수인 h_e만큼의 확률 분포를 얻습니다. 여기서 e_t는 예측된 감정 클래스 입니다. 이를 식으로 표현하면 [식 (5)]와 같습니다.
여기서 loss는 cross entropy를 사용합니다.
<Experiments>
[표 1]을 통해서 성능을 확인할 수 있습니다. 단독으로 사용되는 CoM은 PM을 사용하지 않으며, 대화 맥락만 고려하여서 감정을 예측합니다. 단독으로 사용되는 PM은 메모리 모듈로 사용되지 않지만 동일한 백본이 사용됩니다. 또한 문맥을 고려하지 않고 현재 턴의 발화만으로 감정을 예측합니다.
CoMPM은 pretained modeld의 초기 상태에서 CoM과 PM의 매개변수가 모두 업데이트 되는 모델을 의미합니다. CoMPM(f)는 pretrained model의 초기 상태에서 PM을 frozen한 것을 의미합니다. CoMPM(s)는 PM이 처음부터 train되는 모델을 의미합니다. CoMPM(k)는 ConceptNet에서 PM을 학습시킨 모델을 의미합니다.
PM의 효과는 CoM과 CoMPM의 성능 비교를 통해 확인할 수 있으며, CoM과 PM의 결과를 비교하여 CoM의 효과를 확인할 수 있습니다. PM은 context를 고려하지 않기 때문에 CoM보다 성능이 떨어졌으며 평균 대화 턴 수가 높은 IEMOCAP 데이터 세트에서 성능 격차가 더 크다는 것을 알 수 있습니다. 결과적으로 CoM과 PM의 조합이 더 나은 성능을 달성하는 데 효과적이라는 것을 보여줍니다.
논문의 저자는 다양한 언어 모델의 pretrained memory의 효과를 실험하였습니다. PM 구조의 영향을 제거하기 위해서 PM의 파라미터를 frozen하였고, feature extractor로서 사용했다고 합니다. [표 2]는 다양한 언어 모델에 의해 추출된 pretrained memory의 성능을 보여줍니다. 만약 PM과 CoM이 다른 백본을 가진다면, pretrained memory는 context output의 차원으로 W_p를 통해 투영됩니다.
RoBERTa+BERT와 RoBERTa+GPT2(CoM과 PM(f))는 RoBERTa+RoBERTa보다 성능이 낮으며, 이는 RoBERTa의 pretrained momory가 BERT 및 GPT2보다 더 풍부한 정보를 포함하기 때문으로 추론됩니다.
BERT+RoBERTa는 RoBERTa+BERT보다 성능 저하가 더 크다는 것을 확인할 수 있습니다. 또한 BERT+RoBERTa의 성능은 CoM(RoBERTa)보다 낮으며, 이는 CoM의 성능이 pretrained memory의 사용보다 더 중요한 요소임을 증명합니다. 즉, 성능을 위해서는 CoM이 PM보다 중요하며, 대화에서 감정 인식 연구에서 외부 지식보다 context modeling에 초점을 맞추는 것이 효과적임을 확인할 수 있습니다.
이 논문의 주요 contribution이 영어권이 아닌 다른 언어를 사용해도 성능이 좋게 나온다는 것인데, 이를 뒷받침하기 위해서 한국어 데이터셋에서의 성능 또한 리포팅하였습니다. [표 3]을 통해 확인할 수 있습니다.
CoM, PM의 백본으로는 Korean-BERT를 사용했다고 합니다. 논문에서 말하길, 실험 성능이 한국어 데이터셋에서의 성능이 영어 데이터셋에서처럼 좋은 것 확인할 수 있고, 논문의 접근 방식이 영어뿐만 아니라 다른 언어에서도 잘 작동하는 베이스라인에서 상당한 성능 향상을 보인다고 합니다.
이렇게 ERC 논문 리뷰를 마쳤습니다. 최근에 더더욱 제 자신이 분석을 잘 하지 못한다는 것을 느끼고 있어 실험 파트 부분을 이전의 리뷰보다 더 꼼꼼히 본 것 같습니다. 남들에 비해서 덜 꼼꼼할지라도 이제 시작이니 앞으로 더욱 꼼꼼히 해보도록 하겠습니다. 읽어주셔서 감사합니다.
안녕하세요 김주연 연구원님. 좋은 리뷰 감사합니다.
‘저자가 주장하는 CoMPM모델은 pre trained 모델은 영어가 아닌 다른 언어를 사용해도 좋은 성능을 보인다’ 라고 하셨는데 리뷰를 읽어보면 해당 국가의 언어로 사전 학습된 언어 모델이 미리 준비되어 있어야 하는 것으로 보입니다. 그렇다면 이 논문의 의의는 여러 언어에서 강인하게 작동하는 pre-trained 모델을 제안하는 것이 아니라 단순히 동일한 하나의 언어로 학습된 CoM과 PM을 함께 사용하는 것이 ERC에 효과적이었다는 것을 보여주는 것이 맞나요?
또 한국어 데이터로 실험한 결과에 대해서도 질문이 있는데, CoM, PM의 backbone으로 동일한 모델을 사용한 것인가요? 영어 데이터셋의 경우 table 2 와 같이 서로 다른 backbone을 사용한 비교 실험이 존재하는데 한국에 데이터에 관해서는 이러한 실험이 있는지도 궁금합니다.
안녕하세요. 댓글 감사합니다.
1) 네 맞습니다. 만약에 아랍어 ERC를 하고 싶다면 아랍어로 사전 학습된 모델이 필요합니다.
2) 한국어 데이터셋에서 CoM과 PM의 백본은 동일합니다.
감사합니다.
안녕하세요 김주연 연구원님
지난번 ERC (Emotion Recognition in Conversation) 와 기존 감정 인식 연구와의 차이를 언급하신 덕에 해당 연구가 어떤 태스크 인지 수월하게 이해할 수 있던 것 같습니다.
그런데 몇 가지 질문이 있는데요.
우선, 기존 감정인식 연구에서 사용하는 데이터셋과의 가장 큰 차이는 무엇인가요? 다시 말해 여기서 사용하는 데이터셋의 특징은 무엇인지 알 수 있을까요?
두번째, 저희 과제에 있어 발화를 어떤 Segment 단위로 나누어야 하는 지 고려하고 있는 것은 잘 알고 계실 것이라 생각됩니다. 가령 KROC 에 Voice Detection 과 관련된 서베이를 진행했던 것처럼요. 그렇다면 대화라는 상황을 고려하기 때문에 어디가 발화인지에 대해 무조건 알아야 할 것 같습니다. 이에 대해서는 어떻게 처리하는지 알 수 있나요?
그리고 마지막으로, W-Avg F1, Macro F1, Micro F1이라는 평가 지표를 많이 사용하는 이유가 있을까요? 분명 이 지표를 사용하는 이유가 있을 것 같은데 궁금해서 질문드립니다. 감사합니다.
안녕하세요. 댓글 감사합니다.
1) 제가 그 부분을 설명드리는 것을 빼먹은 것 같네요. 이 데이터셋인 기존의 감정인식 데이터셋과의 가장 큰 차이는 단순히 utterance로 데이터셋이 존재하느냐, dialogues로 데이터셋이 존재하는냐의 차이인 것 같습니다. dialogues로 준다면 대화 한 덩어리가 여러개 이런식으로 데이터셋이 존재한다고 생각하시면 될 듯 합니다.
2) 이 부분은 이 논문에서는 고려하지 않습니다. 데이터셋에서 제공한 dialogues를 그대로 사용한다고 생각하시면 될 듯 합니다.
3) evaluation metrics에 대해서는 왜 이 평가 지표를 사용했는지에 대해서는 나와있지 않아 이 부분은 다시 알아보는 것이 좋을 듯 합니다. 다른 논문에서도 이렇게 사용하는지 알아보고 알려드리도록 하겠습니다.
감사합니다.
좋은 리뷰 감사합니다.
제가 해당 태스크에 대해 잘 몰라서 pretrained model이라는 것이 헷갈립니다.
이 방법론에서의 pretrained model은 이전에 발화 내용을 고려한 것으로 이해하면 되나요?? 그렇다면 화자가 현재 턴 전에 한번도 나타나지 않았을 경우 제로 벡터를 준다고 하셨는데, 화자가 이전에 등장하였는지 여부는 어떤식으로 판단을 하는것인가요?? 화자의 정보가 주어지는 것인지, 화자를 모델이 인지하여 구분하는 것인지 궁금합니다.
안녕하세요 댓글 감사합니다.
special token을 주어 화자를 구분하는데요. 모델이 직접 화자를 구분하는 것은 아니고 화자의 정보가 같이 주어진다고 생각하시면 좋을 것 같습니다.
감사합니다.