Search
⛩️

[논문리뷰] CTRL: A CONDITIONAL TRANSFORMER LANGUAGE MODEL FOR CONTROLLABLE GENERATION

Created
3/7/2021, 12:26:24 PM
Tags
Conditional-Generation
💡
논문 리뷰: Controllable 한 Generation 을 할 수 있는 Trasformer 기반 Language Model

논문 정보 (URL, 저자 등)

Salesforce

개요

Controllable 한 Generation 을 할 수 있는 Trasformer 기반 Language Model
특정 스타일, 컨텐츠, 테스크에 관련된 Generation 을 할 수 있도록 하는 것이 목적
명시적인 Control Code 을 입력으로 줌으로서, 해당 속성에 맞춰 Generation 하도록 pretraining
Control Code = 해당 문장이 속해 있는 코퍼스 도메인 (예: 위키피디아 코퍼스 문장 → Control Code: WIKI)
Control Code 를 넣는 방법: 그냥 단순하게 맨 앞에 입력 토큰으로 넣어줌
엄청나게 큰 모델을 엄청나게 많은 데이터셋으로 학습한 모델
기본적인 Multi Layer 기반의 Transformer 와 동일
모델 파라미터: 1.63 billion-parameter, 250K vocab 사이즈
학습 데이터셋: 총 180GB
Decoding 시에 보다 정확한 토큰을 생성하면서 반복 문제를 우회할 수 있는 새로운 테크닉 제시
동일한 제시어를 줘도 Control Code 에 따라서 생성 결과가 달라지는 실험 결과를 제시하였음
모델 및 코드 공개 : https://github.com/salesforce/ctrl

모델

Objective

일반적인 language model objective term 에 Controle Code (c)가 조건부로 들어감
실제 토큰 단위 입력에서는 sequence 맨 앞에 Control Code 를 명시적으로 넣어 줌
이외에는 기존의 Language Model Pretraining 방식과 동일함
별도에 Controllable Code 에 대한 Prediction 은 존재하지 않음

Model Architecture

모델 구조 및 설명

일반적인 Multi-Head Attention 기반의 Transformer 모델 구조와 유사함
일반적인 Transformer 구조와 동일함
hidden dimension d = 1280
inner(Intermediate) dimension f = 8192
48 layers, and 16 heads per layer
embedding vocab size: 250K
Encoder Token Embedding 과 Decoder Output Token Embedding 은 shared

Generation Distribution

Temperature-controlled stochastic sampling 방법

T에 따라서 단어의 다양성 vs 단어의 정확성 을 조절할 수 있는 Term
일반적으로 language model 을 학습 할 때 이 방법을 사용함 (Meena와 동일한 방식)
T → 0에 가까워 질 수록 다항분포(multinomial distribution)의 형태는 뾰족한 형태로 감
= 작은 범위의 단어 분포에서 샘플링
T → 무한대 에 갈수록 다항분포(multinomial distribution)의 형태는 uniform-distribution 과 동일한 형태가 됨
= 넓은 범위의 단어 분포에서 샘플링
T에 대한 값은 Generation 목표에 따라서 휴리스틱하게 결정해야 함

Nucleus Sampling 방법

isort(pi)>pt\sum_i sort(p_i) > p_t
확률 값의 합이 일정 이하가 되는 범위 내에서 샘플링을 하겠다.
다음 단어에 대한 확실한 자신이 있으면 자연스럽게 top-k 에서 k의 값이 작아짐
k의 값이 모델의 confidence 에 따라서 유연하게 조절되는 효과를 얻을 수 있음

한계점

QA에 대한 명확한 답변을 선택해야 하는데, 위와 같은 Sampling 방식으로 Distribution 을 추출하면 오답들도 정답 후보에 올라가는 문제가 생김
생성의 의도에 따라서 parameter 를 바꾸는 이 방법은 여전히 trade-off 가 있음
Sampling 범위를 좁히면 좁힐 수록 토큰의 반복 또는 유사한 말만 하는 문제가 있음
Sampling 범위를 넓히면 넓힐 수록 정확한 토큰을 생성해 내기 어려움 (특히 QA 테스크에서)

새롭게 제안하는 방법: penalized sampling

조금 더 정확한 토큰 생성에 초점을 맞춘 sampling 방식
최대한 greedy 한 답변을 추구하지만, 이전에 생성된 단어들에 대해서는 패널티를 줄 수 있는 방법
Temperature-controlled stochastic sampling 에 I 를 추가하여 반복에 대한 패널티를 줄 수 있도록 설계
I 값이 1인 경우 기존 Temperature-controlled stochastic sampling 과 동일함
Control Code 가 없는 경우 I 값은 1
\theta 가 1.2 정도 될 때에 실제 정답 답변을 생성하는 비율과 토큰이 반복해서 생성되는 비율 사이의 밸런스를 맞출 수 있다고 주장함
학습 시에는 이 term 이 적용되지 않으며, inference 시에만 사용함
생성 모델이 충분히 좋은 토큰 분포를 생성할 수 있다는 가정 하에 이 방식이 잘 적용된다는 것을 고지함

데이터

각 데이터셋 별 Control Code와 학습에 사용한 전체 데이터셋
총 데이터 약 180GB, TFRecord 이용해서 140GB 로 압축
BPE 로 학습된 모델을 FastBPE 패키지로 분절

실험

Tensorflow 로 구현하였음
Adagrad Optimizer 를 사용하는게 Adam 보다 훨신 convergence 도 빠르고 memory 효율적이었음
256 core 짜리 TPU v3 Pod 를 이용해서 약 2주간 학습하였음 (Batch-size 1024)

Control Code 의 변경 결과

A knife 를 입력으로 주고 Control 코드를 각각 Horror 와 Reviews 로 주었을 때 생성 결과가 다르게 나타남
My neighbor is 를 입력으로 주고, Control 코드를 subreddit 이름인 Relationships, Legal 로 주었을 때 결과가 다르게 나타남

More complex control codes

Review Rating 을 다르게 주었을 때 생성 결과가 달라짐
Control Code 를 Link 로 주었을 때, 각 링크 제목과 관련된 뉴스 기사가 생성됨 (실제로 링크 텍스트를 보는 것이 아니라, 링크에 있는 제목을 보는 것)
날짜, 제목은 동일하게 주고 카테고리만 변경했을 때 다른 결과를 보여줌

Triggering specific tasks

특정 테스크를 수행하도록 할 수도 있음 (예시 QA 또는 번역)

Zero-shot code-mixing

두가지의 코드를 mixing 해서 넣으면 어떯게 될까? 궁금해서 저자들도 해봤는데 잘 되었다고 한다.
학습 셋에서는 한번도 두개 이상의 코드를 mix 한 적이 없다고 함
첫번째에는 Diet 도메인 Code + 번역 코드를 mix 했을 때의 결과
두번째에는 Politics 도메인 Code + 불어 기사 제목 입력을 mix 했을 때의 결과
학습때에 보지 않았던 결과인데도, 어느정도 잘 한다고 함

저자의 욕심

More control codes and finer-grained control : 더 많은 코드와 세세한 컨트롤을 하고 싶다
Extensions to other areas in NLP : unsupervised 로 학습 + supervised 성능을 더 높여보고 싶다
Analyzing the relationships between language models and training data.
Making the interface between humans and language models more explicit and intuitive.