NL-032, Style Transfer from Non-Parallel Text by Cross-Alignment (2017-NIPS)
NL-031에 이어 controllable text generation에 관한 것이다.
0. Abstract
- 이 논문은 문장을 style transfer을 하는 것인데 non-parallel text 데이터로 하겠다는 것이다. (Parallel text⇾ 긍정: 음식이 맛있다 ⟷ 부정: 음식이 맛있다 이런걸 의미하는 듯?)
- 중요한 점은 문장을 context / style 두 개로 구별하는 것이다.
- 여기서 가정을 하는데, 다른 text corpora여도 같은 latent content distribution을 가진다는 것이다.
- 이것을 이용하여 refined alignment을 통한 style transfer을 하게 된다.
- 이 논문의 방법을 다음의 3가지 방법을 통해 검증한다.
- sentiment modification
- decipherment of word substitution ciphers
- recovery of word order
1. Introduction
- 많은 양의 parallel data을 통하여 text generation(번역, 요약 등)을 할 수가 있다.
- 하지만, mono-lingual, non-parallel 데이터를 가지고 있는 경우가 많다.
- 우리는 문장의 context을 보존하지만, 원하는 presentation constraints(style 등)을 가지게 만들 것이다.
- 즉 목표는 context와 이와 독립적인 style을 controlling하는 것이다.
- 여기서 가정을 하는데 문장 두 개의 문장은 다른 스타일이라도 같은 context 분포를 가진다!
- 여기서 이것을 입증하고 한 문장 style의 content vector로 같은 context vector을 가지는 다른 style을 가지는 문장으로 변환시킨다.
- Encoder은 문장과 기존 style indicator을 입력으로 받아 style과는 독립적인 content representation에 매핑시킨다.
- 그리고나서, style-dependent decoder을 통과시켜 원하는 것을 만든다.
- 여기서는 VAE을 사용하지 않았는데 왜냐하면 latent content representation rich and unperturbed을 유지하는 것이 필수적이기 때문이다.
- 아마도 VAE을 사용하면 sampling을 하는 식으로 진행이되고, 분포를 찾는 개념이다보니 약간의 변형이 일어날? 수 있다고 생각하는 것 같다
- 따라서 VAE없이 AE로만 함으로써 latent vector을 제대로 학습시키려고 한다.?
- 실제로 richer latent representation을 얻는 것은 매우 어려우므로 corpora 사이에 align과 informative content 제약이 걸리게 된다.
- 이러한 모델이 의미있음을 보이기 위해 3가지 task로 실험
- sentiment modification
- decipherment of word substitution ciphers
- recovery of word order
- Non-parallel data로 모델이 학습된다.
- 41.5%가 사람이 보기에 sentiment가 변경이 되었다고 나왔고 이에 비교실험은 41.0%의 성능을 보인다.
- 비교 모델이 NL-031모델인 것 같음. Reference는 다른 논문인데 검색해보면 NL-031 논문이 나옴
- 2,3 task에서는 57.4, 26.1의 BLEU을 얻었고 이는 cross-alignment 없이 한 50.2, 20.9의 성능보다 좋음을 보여주었다.
- 즉 cross-alignment의 효과를 입증
2. Related work
- Style transfer in vision
- 생략
- Non-parallel transfer in natural language
- Muller & Hu 방법이 있었음.
- Hu가 NL-031의 toward 방법이고 이와 비슷함
- 여기서는 Content 보존과 style transfer을 위해 cross-alignment 사용
- Adversarial training over discrete samples
- Professor-Forcing 알고리즘 사용
3. Formulation
- 데이터를 생성하는데 다음의 3가지 가정을 한다.
- a latent style variable y는 p(y)의 분포에서 생성
- a latent content variable z는 p(z)의 분포에서 생성
- a datapoint x는 conditional 분포 p(x|y, z)에서 생성
- 두 가지 데이터 세트가 주어지는데, same content distribution을 가지나 different style y1, y2을 가지게 된다.
- 여기서 y1, y2는 무엇인지를 모른다는고 함.
- X1은 p(x1|y1)을 X2는 p(x2|y2)에서 샘플들로 구성이 되어 있다.
- 우리는 p(x1|x2;y1,y2)와 p(x2|x1;y1,y2)같은 style transfer function을 알고 싶다.
- 정확히 무슨 의미인지는 모델보면 좀 더 이해가 될 것으로 생각..
- 우리는 x1, x2의 marginal distribution을 관측하지만 그것의 joint distribution을 계산하려고 한다.
- (1)은 marginal과 joint의 관계를 나타내는 식? 이다.
- (알고싶은 것) joint distribution: x를 찾는데 y와 z가 필요함
- p(x1|x2;y1,y2)을 알고 싶은데 x1,y1으로 z1을 구할 수 있으니 즉 p(x1|z1,y1)을 알고 싶은 것
- p(x2|x1;y1,y2)도 마찬가지
- (관측되는 것) marginal distribution: x를 찾는데 z의 term이 없음
- 우리가 관측하는 것은 p(x1|y1), p(x2|y2)
- 즉 내 생각으론 marginal distribution이란 말이 원래 x을 찾는데 y, z가 필요한데, 우리가 관측하는 것은 z에 대한 term이 없는, 즉 y의 term으로만 분포를 표시하는 식이다.
- 여기서 p(x1|y1), p(x2|y2)은 관측되고 y1, y2는 모르는 상태이다.
- 두 가지 case를 생각해보자.
- Both dataset X1 and X2 are sampled from the same style y
- X1 and X2 are sampled from style y and y' respectively
- 이 두 케이스는 다른 joint distribtuion을 가지게 되나, 관측된 marginal distribution은 같은 분포를 가지게 된다.
- 밑의 제약을 보고 유추해보자면, p(x2|y)=p(x2|y')라고 하면, 1번이나 2번 케이스나 marginal은 같은 값을 가지게 된다.
- 하지만 joint에서 p(x1|x2;y,y')=p(x1|z,y')p(z|x2)p(x2|y)와 p(x1|x2;y,y)=p(x1|z,y)p(z|x2)p(x2|y')을 비교해보자.
- 1번 case에서는 사실 X1, X2는 same style이기 때문에 joint 값이 같다.
- 하지만 2번 case에서는 첫 번째 term인 p(x1|z,y')와 p(x1|z,y)는 다르기 때문에 joint 분포가 다르다는 것을 말하는 것 같다.
- 즉 p(x2|y)=p(x2|y')가 같으면, joint을 구할 때 혼란이 생길 수 있다는 점을 말하는 것 같다.
- 위의 두 가지 케이스 같은 경우에는 혼란이 발생하기 때문에 다음과 같이 Proposition을 따른다고 제약을 두자.
- 위의 Generative framework에서 p(x|y)와 p(x|y')의 분포가 다르면 x1와 x2의 joint distribution을 구할 수 있다. 이 제약은 사소한 것 같지만 상당히 중요하다고 함.
- 이 제약은 다른 style로 부터 생성된 X는 충분해야지만, style transfer이 잘 될 것이다를 말한다.
- 즉 확실한 style Y의 집합에서 complex distribution z을, more probable transfer function을 복구할 가능성이 높아진다.
- VAE같은 경우는 z를 N(0,1)식으로 가정을 하는데 AE을 쓰는 이유를 여기서 생각해볼 수 있다.
- 즉 z를 more complex하를 가지도록 AE로 학습을 하면 복잡성이 decoder에 집중되지 않기 때문에 더 잘 학습을 이룰 수 있을 것이다.
3.1 Example 1: Gaussian
- z~N(0, I)은 centered isotropic Gaussian distribution으로 선택하자.
- style y=(A, b)인 affine transformation이라고 하자.
- 예를 들면 y(x)=Ax+b+e, e=noise
- 만약 b=0이면, Az+b~N(0, I)로 x를 sampling하게 된다.
- 그러면 x는 어떠한 style y=(A, 0)과 동일한 분포를 가지게 된다.
- Rotation의 효과는 회복될 수 없다?
- z~N(0, I)라고 했으므로 이 경우 A가 orthogonal하면 다른 A라도 x는 같은 분포를 가진다는 것 같다.
- 만약 z가 more complex distribution이라면 (Gaussian mixture와 같은) affine transformation은 unique하게 결정될 것이다.
- 따라서 다음과 같은 Lemma와 Theorem을 언급한다.
3.2 Example 2: Word substitution
- z가 bi-gram language model을 따르고 style y는 content word가 surface form으로 매칭되는 vocabulary라고 하자.
- 같은 language z에서 x1, x2을 관측하면 x1와 x2사이의 word alignment을 추론하게 된다.
- 간단하게 언어 번역문제라고 생각해보면, recovery 문제는 여전히 충분히 어렵다.
- M1, M2는 각각 R(nxn)의 estimated bi-gram probability matrix of data X1 and X2라고 하자.
- Word alignment는 다음의 optimization 문제를 말한다.
- 이 식의 formulation은 graphic isomorphism(GI) 문제이고 P가 유일함을 보이는 것은 어렵다.
- 만약 M의 그래프가 충분히 복잡하면, 충분히 다루기 쉬울 것이다. (왜?)
- 설명이 있지만.. 이해 못하겠음 ㅜ
- 결국엔 실험적으로 보이는 것 같긴 함
- 결론은 z는 latent content varibale로 data x의 복잡성을 충분히 전달해야하고 y는 latent style variable로 상대적으로 간단한 효과를 가져야 한다!
4. Method
- 이미지는 continuous하기 때문에 직접 학습을 하지만 언어는 discreteness하기 때문에 latent sapce을 통하여 진행한다.
- Style transfer function은 다음과 같이 표현을 할 수가 있다.
- 이는 auto-encoder model로 학습을 할 수가 있다.
- Encoder step은 x2의 content z~p(z|x2, y2)을 endcoing step은 p(x1|y1,z)을 말하게 된다.
- 다시 한 번 논문의 말을 써보면
- content z for a given sentence x and a style y
- generates a sentence x from a given style y and content z
- 즉 reconstruction loss는 다음과 같다.
- 의미있는 transfer을 하기 위해서는 X1과 X2의 content space가 완전히 동일해야 한다.
- 예를 들어) 나는 졸립다 ⟷ I am Hong kildong과 같이 content가 다르면 style transfer가 아니다!
- 나는 홍길동이다 ⟷ I am Hong kildong 이렇게 style만 다르고 같은 content을 가져야 한다.
- 실험 부분에 나오지만, 긍부정에 사용되는 데이터세트는 식당 리뷰에 관련된 것이다. X1에는 positive로 음식에 대한 호평들이 있을 것이고 X2에는 negative로 음식에 대한 악평들이 있을 것이다.
- 이 때, X1의 content z1과 X2의 content z2은 긍부정 감정을 뺀 vector가 되야 하므로 사실상 z1과 z2모두 "음식에 대한 리뷰"라는 같은 content space를 가진다는 의미라고 이해했다.
- 즉 x1과 x2는 same latent content distribution p(z)에서 생성되었다는 제약을 둔다.
- 이를 학습하는 방법 중 하나는 VAE이다.
- 즉 전체의 obj function은 L_rec + L_KL을 최소화 화면 된다.
- 하지만 이는 전에 말했듯이, z를 간단한 분포를 가지도록 제한하는 것으로써 decoding이 좀 더 복잡하도록 pushing하는 효과가 있어서 non-parallel style transfer에는 좋은 전략이 아닐 것이다.(may not be라고 하는 것 봐서는 그냥 생각일 뿐...)
- 반대로 standard auto-encoder은 단순히 reconstruction error을 최소화하는 목적으로 z가 x의 정보를 더욱 많이 담을 것이다.
- 또한 p(z)에 대해 특별한 modeling없이 p(z|y1)와 p(z|y2)의 분포 alignment를 강제하는 것이 가능하다.
4.1 Aligned auto-encdoer
- VAE에서 p(z)을 완벽히 가정을 분배하면
,
을 align시키는 것이고 이는 다음의 optimization 문제 제약을 따른다.
- 실제로 이것을 그대로 최적화 하는 대로 하지 않고 Lagrangian relaxation of the primal problem을 최적화 한다고 한다.
- 즉 여기서 adversarial discriminator D를 도입하여 다른 style로부터 z의 posterior 분포를 align하는 과정을 거친다.
- 즉 G학습 + 제약(z1=z2)을 하는 것이 아니라 GAN처럼 D를 도입하여서 제약을 D속에 녹이겠다는 것이다.
- 정확히 언급은 안하지만, GAN과 같이 D가 G의 학습에 도움이 될 것이라 생각한 것 같다.
- 전체 training obj function은 min-max 게임으로 다음과 같이 된다.
- 과정은 GAN처럼 생각하면 되는데, x1,y1가 real x2,y2가 fake(target style)라고 생각해보자.
- D는 style을 판단하는 네트워크라고 생각하면 된다.
- 예를 들어서 보자!)
- (x1,y1) (그 영화는 재밌다, positive) ⇾ (x2,y2) (그 영화는 재미없다, negative)
- D(real, positive)=1, D(fake, negative)=0. 진짜 문장은 긍정이고 가짜 문장(생성)은 negative인 것이다.
- E와 G입장에서 보면 recon loss를 줄이고 adv loss를 키우는게 좋다. 즉 D(E(x1,y1))은 작게, D(E(x2,y2))은 크게 만든다는 것이다. 즉 real positive sentence embedding은 negative로 생각, fake negative sentence embedding은 positive로 생각하게끔 만든다.
- 다시 말해서 E,G입장에서 Recon loss는 당연히 작게 하는게 좋은 것이고 adv loss을 키운다는 것은 D를 속인다는 것이다.
- 즉 "그 영화는 재밌다, positive"에서 encoding된 z1을 D입장에서 negative로 판단하고 "그 영화는 재미없다, negative"에서 encoding된 z을 D입장에서 positive로 판단하게 E를 학습시킨다는 의미이다.
- D학습시에는 z1은 positive이고 z2은 negative라고 하도록 판단하도록 한다.
- 다시 말하면 (x1,y1)가 (x2,y2)가 되도록 E,G을 학습하는데 encoding z을 가지고 GAN 학습방식을 적용했다.
- 이렇게 함으로써 얻을 수 있는 generator 효과는 encoding을 통하여 얻은 z를 D가 positive인지 negative인지 판단을 못하도록 한다는 것이다. 즉 z1=z2가 되도록 하겠다는 것이다. 이때 D는 제대로 판단하는 네트워크이어야 하므로 min-max 문제로 alternative하게 학습을 하는 형식이 된다.
- E,G는 single-layer RNNs with GRU cell이다. E에서 문장 x을 받고 initial hidden state는 y이다.
- initial hidden state가 y라는 점이 중요하다고 생각한다.
- toward 논문의 코드에서도 비슷한 방법이 있는데 generator의 초기 hidden state가 [style;content]로 취해준다. 참고로 이 논문의 encoder에서는 문장에서 content을 뽑느 식으로 하므로 encoder의 initial hidden state은 None이였다.
- 이 때, 마지막 hidden state가 z content representation이 된다.
- G에는 (y,z)가 조건으로 들어가서 문장을 생성하게 된다.
- D는 feed-forward 네트워크로 a single hidden layer와 sigmoid output layer의 구조를 가진다.
4.2 Cross-aligned auto-encoder
- 두 번째 방법은 cross-aligned AE 방법으로 직접적으로 transfered samples을 align한다.
- 4.1 방법과 비슷하나 우리는 D1, D2 두 가지를 사용하는 방법이다.
- 여기서는 encoding한 결과를 D에 넣어서 D를 학습하는 adversarial 방법이 아니다.
- Decoder에 넣어서 마지막 hidden state를 가지고 D를 학습하는 것이다.
- 이 논문에서의 4.1, 4.2의 D는 real / fake을 구별하는 것이자 속성을 구별하는 것이다. 왜냐하면 real끼리, fake끼리 모두 같은 속성을 가지기 때문이다.
- 이해할 때는 D가 속성을 구별하는 것이라고 생각하면 편함
- 하지만 만약 속성의 label 개수가 2가지가 아닌 경우는 다른 개념이다.
- 즉 이 모델은 엄밀히 말하면 속성의 label수가 2가지인 경우에 적용할 수 있다. 더 많은 label을 가지는 속성이라면 변형이 필요할 것이다.
- Adversarial training은 G gradient BP에 문제가 살짝있다. 왜냐하면 discrete samples이므로
- 따라서 sampling-based gradient estimator인 REINFORCE 알고리즘을 사용하는 경우가 있으나(SeqGAN 처럼) 이는 high variance 때문에 불안정하다.(그래서 사실 MaliGAN 등 actor-critic을 사용해는 것도 있긴 함)
- 우리는 이러한 문제점 때문에 두 가지 테크닉을 사용함
- Softmax distribution over words
- 모델 그림을 보면 알 수 있듯이, 입력값으로 softmax 값이 들어간다는 것이다.
- 원래 4.1방법이나 toward 논문에서는 teacher-forcing이기 때문에 이렇게 할일이 없다.
- non teacher-forcing 부분에서 이전의 값을 넣을 때, one-hot encoding 결과가 아닌 softmax distribution을 넣겠다는 것이다.
- 이러면 discrete sapce가 continuous space처럼 되서 그런 것 같다. 원래는 [0,1,0] 이런게 입력이고 출력인데, 중간단인 softmax 값을 넣어서 한다는 것이고 추가적으로 temperature softmax을 사용함.
- Professor-Forcing을 사용한다.
- Background 부분에 정리해둔 부분이 있으니 참고 바람.
- Teacher-forcing으로 생성된 부분은 real / non teacher-forcing(free-running)부분은 fake로 GAN 방식으로 LM을 학습하는 것이다.
- 더 자세한 건 모델을 보면서...
- 위 그림은 D1 입장에서 그린 것임
- [y1, z1]으로 생성된 것은 real
- [y1, z2]으로 생성된 것은 fake
- 예를 들어 보자!
- (positive) x1="그 영화는 재밌다" / (negative) x2="그 영화는 재미없다"
- (x1,positive)로 z1, (x2, negative)로 z2을 encoding할 수 있다.
- G입장에서 이상적으로는 z1, z2가 같아야 한다.
- (z1,positive)로 문장1 생성 / (z2,negative)로 문장2를 생성
- G입장에서는 문장1, 문장2는 같아야 하나 D입장에서는 이를 구별할 수 있어야 한다.
- 즉 문장1은 real / 문장2는 fake가 되는 것이다.
- (y1, z1)에서 h1 / (y2, z1)에서 h1~ 생성
- (y2, z2)에서 h2 / (y1, z2)에서 h2~ 생성
- D1은 h1와 h2~ / D2는 h2와 h1~을 구별하는 식
- D는 Kim 방식의 convNet 구조이다.
5. Experimental Setup
- Sentiment modification
- Restaurant review을 가진 데이터 세트
- postivie: 평점 3점 이상, negative: 3점 미만
- 데이터 세트는 문서별로 annotation이 되어 있지만, 모델은 실제로 문장 레벨이다.
- 따라서 간단히 문서내 모든 문장은 문서의 annotation을 따라간다고 생각.
- 사실 이는 부정확하므로 문장이 10개가 넘는 문서는 필터링을 하는 간단한 조치를 취함
- 또한 문장에서 15개의 words들은 삭제함
- Neagtive: 250k, Positive: 350k, vocab: 10k (빈도수 5개 이하는 <unk>처리한 결과)
- Metric은 model-based을 사용. Kim이 설명한 TextCNN으로 평가하여 97.4% 성능을 얻음
- Test set중 500개를 임의로 샘플링하여 사람한테 평가도 시킴.
- 첫 번째 평가: Fluency에 1점~4점 / Sentiment cateogries은 positive, negative, neither로 선택
- 두 번째 평가: Transfer process로 변환된 문장이 source와 다른 감정을 가지고 semantically equiavlent한가? (context는 같고 긍부정이 제대로 바뀌었는 지?)
- 이 두 개의 평가는 중복이 안되는데, 예를 들어 "영화는 재밌다"가 "음식은 맛 없다"로 바뀌었다고 하면, 첫 번째 평가는 높은 점수를 가지지만, 두 번째 평가는 낮은 점수를 가진다.
- Word substitution decipherment
- 암호 해독하는 task로 1-1 대응으로 치환하는 것이다.
- 그냥 간단히 생각해보면, 01*10*11 -> I am good 이런 식으로 암호와 단어들이 매핑되는 것 같다. (물론 여기서는 parallel data가 아닌 non-parallel로 학습하는 것)
- 암호 해독 task가 parallel data면 쉬운 문제가 되나 여기서는 non-parallel 암호해독 문제이다.
- 학습시 X1 set 200k, X2 set 200k가 non-parallel하게 존재하고 dev,test는 X1 set 100k, X2 set 100k가 parallel 존재한다. (평가는 parallel 해야 제대로 되었는지 알 수 있음)
- 치환되는 voacb의 percentage에 따라 모델의 성능은 달라지는 어려움이 있다.
- 추측하기론, 01*am good -> I am good 식은 33.3% 치환율(스페이스 빼고 생각)
- 01*10 good -> I am good 식은 66.6% 치환율 같이 치환율이 높을 수록 어려운 task라고 하는 것 같다.
- 간단히 스페이스는 *로 암호화 했다.
- 모델은 word substitution function임을 모르고 data distribution을 배우는 것이다.
- 추가적으로 word frequency기반 simple 암호 해독 모델과 비교를 한다.
- Word order recovery
- Word ordering하는 것으로 bag translation이라고도 알려져 있다.
- Original English sentences X1 vs shuffled English sentences X2 사이을 transfer 하는 것이다.
- 예) good am I vs I am good
- 암호 해독과 같이 train은 non-parallel 데이터이고 test는 parallel 데이터로 구성되어 있다.
6. Results
- Sentiment modification
- 위의 정량적 평가에서는 Hu(toward) 방법이 더 좋다고 하지만..
- Table 3에서는 Hu(2번 째) 보다 이 논문(3 번째) 방법이 좀 더 그럴싸 하다고 정성적으로 말한다.
- 즉 적절한 evaluation이 중요하다고 한다. Table1, Table2에서의 metric은 사실 정확한 방법이 아니긴하다.
- 하지만 이것은 sample이므로 단순히 잘 된 것만 보여주는 것이라는 의심도 있음..
- Word substitution decipherment
- 치환율이 커질수록 당연히 엄청 어려워지고 100%일 때 보면, 다른 모델들은 잘 작동을 안한다.
- 반면, Parallel data로 모델을(논문의) 학습을 하면 엄청 잘 되는 것을 알 수가 있다.
- 즉 non-parallel 학습이 쉽지 않은 것이고 치환율이 높을 수록 어려운데, 이 논문의 모델을 그걸 해낸다..
- Word order recovery
- Table 4의 마지막 column이 이 실험의 결과인데, parallel data로 학습해도 어려운 것을 알 수가 있다.
- Non-parallel인 경우는 cross-aligned AE만 문법적으로 reorder가 가능한 수준임을 알 수가 있다.
7. Conclusion
- 여기서 처음으로 non-parallel data로 해독 문제를 하는 task를 처리한다.
- 해독 관점에서는 "when can the joint distribution p(x1, x2) be recovered given only marginal distributions?" 라는 흥미로운 질문을 남긴다...
Reference
- 논문: https://arxiv.org/pdf/1705.09655.pdf
- 저자코드(tensorflow): https://github.com/shentianxiao/language-style-transfer
댓글
댓글 쓰기