한줄 요약: sentiment analysis를 할 건데, 하나의 모달만을 가지고도 여러개의 모달 정보를 담은 것 만큼의 효과를 내보자!! 그럼 test할 때 모달 하나만 있어도 된다!!
# Seq2seq # Cyclic translation loss
Paper: https://ojs.aaai.org/index.php/AAAI/article/view/4666 (main)
Paper supplementary 있는 곳: https://arxiv.org/pdf/1812.07809.pdf
Github: https://github.com/hainow/MCTN
Multimodal Sentiment Analysis
- Sentiment Analysis : Identifying a speaker's opinionhttps://intellectdata.com/sentiment-analysis-flip-the-customer-negatives-to-positives/
Learning Joint Representation of multiple modalities
CMU MultiComp Lab실에서 나온 데이터들이구먼? (Multimodal + Healthcare 연구 多)
Multomodal Cyclic Translation Network Model (MCTN)
Goal: Source modal만을 가지고 maximal information을 담고있는 joint representation을 만들어서 test를 할 수 있도록 해보자!
point 1: Seq2seq 사용해서 source 모달만 사용 가능할 수 있도록!
point 2: A cyclic translation loss 사용해서 두 모달간의 tranlation을 완벽하게 해보자!! - 총 두개의 loss 사용 (뒤에서 자세히 다시 설명하겠음!)
기존 연구에서 비슷한 연구가 있었던 건 아니라서 한계점을 극복한 건 아니고, 찐 새로운 방식을 제안한 듯!!
그래서 밑에 내용은 어디서 idea를 얻었는지로 생각하면 될 듯!
: 하고자 하는 task
: 영감을 받은 연구들! 특히 3)4)번
; multimodal sentiment analysis의 main challenge는 아무래도 joint representation learning이겠쥬?
1) fusion e.g. concatenation
2) Supervised approaches - Neural Network
3) Generative approaches
4) Translation
다은 의문점
논문 상에는 learn to translate one madality to another 이라는 문장이 있는데, 릴워에 써있는 어떠한 논문을 찾아봐도 translation하는 것 없다! 왤까! 그냥 generate한 걸 가지고 translation했다고 말한 걸까? STT, TTS처럼 transform하는 건 많잖아?! 그럼 그걸 릴워에 썼어야하는 건 아닌가..?!?! => 뒤까지 다 읽어보니 충분히 비슷한 맥락인 듯 하다!
1) to infer the missing modalities by modeling the probabilistic relationships among different modalities
그냥 하나가 부족한 부분이 있으니까, 다른 모달들 정보 잘 활용해서 부족한 부분 메꿔보겠다! 이거구먼?
2) Training with modalities dropped at random can imporve the robustness of joint representations
이미지, text 같이 학습한 모델을 가지고 embedding 뽑아서 visual representaion 만든다.
=> 위의 방법들은 prediction 하기 전에 missing된 정보를 infer하겠다는 거고, 본 연구에서는 이미 missing되어있고, perturbed된 모달리티여도 테스트할 때 잘 사용할 수 있다는 걸 보여줌!
Multimodal Language Analysis with Recurrent Multistage Fusion (EMNLP, 2018)
- 보통은 length (L)로 쓰지 않고 t라고 쓴다고 함. 각 word를 말하는 게 끝나는 시점을 기준으로 chunking을 한다고 함!!
Traing (Tr)
Testing (Te)
Cycle consistency loss
일단 이 모델이 요구하는 input, output들을 알려면 Cycle consistency loss부터 알아야 함!
CycleGAN
Cycle-GAN은 pair-image를 사용하지 않고 X 도메인 데이터세트와 Y 도메인 데이터세트만을 이용해 두 도메인 간에 이미지를 변환하는 법을 학습
Cycle consistency loss
- (a) cycle consistency: Y= G(X), X= F(Y)일 때, X = F(G(X))
- 이게 가능하면 X만 있어도 Y의 정보를 충분히 유추할 수 있음! (우리로 따지면 text만 가지고 audio 정보까지 알아버리는 거임!)
- 하지만 두 함수의 학습 정도가 다를 수 있어서 완전히 똑같은 원형을 생성해내는 것은 어려움 (Mode Collapse)
- (b,c) cycle-consistency loss: 완전히 같은 게 나오지 않고 약간씩 다른 게 나와버리니까 (cyclic translation이라고 하자!), 이때 생성된 것과 원본의 차이를 최소한으로 줄이도록 학습하는 것! 그래서 (a)처럼 A랑 B랑 완벽하게 상호작용할 수 있도록 목표로 하는 것이제.
- (b) = G(X), = F(), (c) = F(Y), = G()
<출처>
(위) https://velog.io/@sjinu/CycleGAN
(아래) https://dogfoottech.tistory.com/177
MCTN: Multimodal Cyclic Translation Network
Translation - Seq2seq2 (초록색)
Joint representation (노랑색)
- 다은 의문점
이어야 하지 않았을까....? => 수식이 이해가 안될 땐 코드를 보자!)
Inference
- 다은 의문점
- 논문에서는 translated representation을 쓴다고 해놓고, 수식은 E_ST로 해놓는다..? E_ST는 traslated된게 아닌데...?? 가 아닐까...??? => 코드를 보자!!!
- 아니다! 논문이 맞다! 이제 이해가 된다!
- 여기서 관건은 우리가 source modal만 사용하고서도 target modal의 정보까지 모두 다 잘 담고 있는 표현벡터를 뽑는 것이 핵심인 것이지!!!! 그래서 CycleGAN에서처럼 전혀 다른 category의 데이터를 넣어도 색다른 영역의 이미지를 만들어 내는 것 처럼! translation을 잘 학습을 해놓으면 encoder가 input을 받아서 내놓는 embedding이 결국엔 target이 되는거잖아?? 그래서 그 embedding안에는 source와 target 정보를 모두 잘 반영한 애라고 할 수 있는거지!!!!!!
또다른 의문점: 그럼 그냥 만들어진 그 모달의 정보도 추가로 넣으면 안되는것? 그냥 똑같은 내용 두번 넣는게 되는 것?
Coupled Translation-Prediction Objective
총 3개의 loss를 가지고 전체 로스를 구한다!
Test Time
모달이 3개일 때도 가능! 모달이 3개 => , ,
- 다은 의문점
range로 되어있는데, 어떻게 F1을 구한 걸까?? category를 만든건가?
- 다은 의문점
- V-A 간의 관계에 대해서 더 자세히 설명을 써줬다면 좋았을 것 같음.
- (b)에서 A->V 실험은 안함. 눈속임?
- a,b,c,d만 봐도 V-A 모델은 논문에서 말하고자 하는 바와 전혀 다르게 성능을 뽑아놓고 있는데, 이에 대한 설명은 성능이 떨어지더라~ 뿐임.
- V<->A보다 V->A가 성능이 더 좋다는 건 A가 안좋은 영향을 미친다는 것?
- b-(V->A)와 c-(V->A, A->V)의 성능 결과 숫자가 아예 똑같음. 실수? 혹은 A->V가 아예 영향이 없는 것??? 그래서 실험도 따로 안한 것???
:구조 별로 얼마나 성능에 좋은 영향을 미칠까?
Setting
Q3- Cyclic translation | Q4 - One Seq2seq | Q6 - Hierarchical | ||
---|---|---|---|---|
Bimodal | (a) | Target | / | / |
(b) | Control | / | / | |
(c) | Control | Target | / | |
(d) | Control | Control | / | |
Trimodal | (e) | Target | / | Target |
(f) | Control | Target | / | |
(g) | Control | Control | / | |
(h) | Control | / | Control | |
(i) | / | / | / |
- Bimodal
- (a): 기존 main 구조
- (b): \[cyclic loss X] 그냥 translation만
- (c): \[cyclic loss X] 독립적으로 S,T 둘다 translation
- (d): \[cyclic loss X, encoder 2개] (c)랑 방식은 똑같은데 S,T 따로 embedding 뽑아서 concat
*(이 방식 써도 test time때는 학습된 encoder만 사용하면 되니까 모달 한개로 하는 거겠지?)*
- Trimodal
- (e): 기존 main hierarchical 구조
- (f): \[cyclic loss X] (c) 확장 버전 (가운데에 두번 작동하는 부분은 그림 생략된듯!)
- (g): \[cyclic loss X, 1차_encoder 2개] (d) 확장버전, S <-> T1 embedding 뽑아서 concat한 걸 가지고 T2 생성
- (h): \[cyclic loss X] 원래 (e)버전에서는 S <-> T1 translation 임베딩 가지고 T2를 만들지 않았음? 그런데 1차 아예 빼버리고 S,T1 raw를 바로 사용해서 T2 생성
- (i): \[cyclic loss X, decoder 2개] 원래는 S,T1 사용해서 T2를 만들었는데, 여기선 S를 가지고 T1,T2각각 만들어버림. decoder가 두개!
Result Tables
Q3: What is the impact of cyclic translations in MCTN?
- 다은 의문점
모든 부분에서 최고점을 낸 것은 아닌데..? 왜 그냥 없는 애들 취급하는 거야... ㅋㅋ
Q4: What is the effect of using two Seq2Seq models instead of one shared Seq2Seq model for cyclic translations?
- 다은 의문점
- (b)모델과의 해석도 있으면 좋지 않았을까. 이상적인 결과는 c>d>b임. 하지만 결과를 보면 c>b>d임. 여기서 주장하는 것은 따로 훈련해서 제대로 학습을 못했다는 것인데, 그래도 아예 학습 안한 b보다는 d가 더 좋았어야 하는 것 아닐까? 아님 아예 방해가 된다는 걸까?? 무조건 모든 정보 합치는 게 좋은 건 아니란 연구들도 있는데 그거 인용해서 요런 한마디라도 덧붙였으면 더 좋지 않았을까?
Q6: What is the impact of using two levels of translations instead of one level when learning from three modalities?
- 다은 의문점
- (e)랑 (h)가 정말 좋은 비교일까? 투 레벨이 좋다고 하면 다른 건 다 동일해야하는데, (e)의 첫번 째 레벨에는 cyclic translation이 들어가 있어서 비교가 안될 것 같은 걸? 차라리...? 2번째 단계를 빼고, 첫번째 단계 translation만 하는 게 더 낫지 않았을까??
so sad... keras로 되어있넹..... but I can do it!
main.py
핵심 모델의 전체적인 흐름을 파악해보자!
seq2seq 부분 (mctn_model)
sentiment analysis 부분 (regression_models)
3개 모달일 땐?
loss & Test time
케라스로 되어있는 코드까지 분석한 알차디 알찬 발표 감사합니다 : -) What if I'm a reviewer of this parper와 중간중간 있는 논문에 대한 해석들이 논문에 대한 이해를 더 쉽게 하는데 큰 도움이 된 것 같습니다 !!!